数据库——DML(数据操作语言)

DML语言:数据操作语言

  • insert 添加
  • update 修改
  • delete 删除

1、添加数据

SQL提供了INSERT语句,用于将一行或多行插入表中。 INSERT语句用于:

  • 向表中插入一行
  • 向表中插入多行
  • 将行从一个表复制到另一个表中。

向表中插入一行

-- insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2'), ('值3')
-- 方式一:没有指明要添加的字段,要按照声明字段的先后顺序添加
insert into emp1 values(1,'wanli','2022-12-12',4000)
-- 由于主键自增我们可以省略
insert into emp1 values('wanli','2022-12-12',4000)

-- 方式二:指明要添加的字段,没有指明的字段值为null
INSERT INTO `grade`(`gradeid`,`gradename`) VALUES('11114','大七')
INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`address`,`gradeid`,`email`)VALUES('狗子','aaaaa','男','2020-3-02','赣州','111','email')

在表中插入新行时,应注意以下几点:

  • 首先,值的数量必须与列数相同。 此外,列和值必须是对应的,因为数据库系统将通过它们在列表中的相对位置来匹配它们。
  • 其次,在添加新行之前,数据库系统检查所有完整性约束,例如,外键约束,主键约束,检查约束和非空约束。如果违反了其中一个约束,数据库系统将发出错误并终止语句,而不向表中插入任何新行。

向表中插入多行

INSERT INTO dependents (first_name, last_name, relationship, employee_id) 
VALUES
('Avg','Lee', 'Child', 192 ),
('Michelle','Lee', 'Child', 193);

将查询结果插入表中

dependents表中的所有行复制到dependents_archive表中:

INSERT INTO dependents_archive 
SELECT *FROM dependents;

查询字段和添加字段要一一对应。

2、修改数据

更改表中的现有数据,请使用UPDATE语句。 以下是UPDATE语句的语法:

UPDATE table_name
SET column1 = value1,
    column2 = value2
WHERE
    condition;

在上面的语法中 -

  • 首先,在UPDATE子句中指明要更新的表。
  • 其次,在SET子句中指定要修改的列。 SET子句中未列出的列的值不会被修改。
  • 第三,指定WHERE子句中要更新的行。

UPDATE语句根据WHERE子句中的条件影响表中的一行或多行。 例如,如果WHERE子句包含主键表达式,则UPDATE语句仅更改一行。

但是,将修改WHERE条件评估为true的任何行。 因为WHERE子句是可选的,所以,如果省略它,表中的所有行都将受到影响。

更新一行示例

将192号员工的姓名改为 ‘Zhang’

-- 修改语句 表名  属性   条件
UPDATE employees SET last_name = 'Zhang'
WHERE employee_id = 192;
    
-- 如果不指定条件,会改变所有的列
UPDATE `student` SET `name`='夏洛特'

-- 修改多个属性,用逗号隔开
UPDATE `student` SET `pwd`='654321' ,`sex`='女'  WHERE id=2;

更新多行示例

把所有工资低于2500的员工全部提高到3000

UPDATE employees
SET
    salary=3000
WHERE
    salary<3000;

带有子查询的更新

UPDATE dependents
SET last_name = (
    SELECT
        last_name
    FROM
        employees
    WHERE
        employee_id = dependents.employee_id
);

由于省略了WHERE子句,因此UPDATE语句更新了dependents表中的所有行。

3、删除数据

要从表中删除一行或多行,请使用DELETE语句。 DELETE语句的一般语法如下:

DELETE FROM table_name
WHERE condition;
  • 首先,提供要删除行的表名称(table_name)。
  • 其次,在WHERE子句中指定条件以标识需要删除的行记录。 如果省略WHERE子句,则将删除表中的所有行记录。 因此,应始终谨慎使用DELETE语句。

一般来说,DELETE语句不会将结果集。 但是,它只返回已删除的行数。

-- 用delete删除表
-- 删除指定命令  不加条件就会删除整个表
DELETE FROM `student` WHERE id=1;

-- 用TRUNCATE删除表  完全清空一个数据库表,表的结构和索引不会变
TRUNCATE `student`;
-- 用TRUNCATE不能删除指定条件的数据, truncate的工作机制就是直接清空表的内容,例如,在Oracle中实际上只是将高水位线设为0,并没有对实际的数据进行操作,所以这个操作就很快。既然如此,也就不可能实现你所说的有条件的删除了。

-- 测试DELETE和TRUNCATE的区别,用delete不会影响自增, 用TRUNCATE删除表重置主键
-- 用delete删除表
INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3') -- 此时表test的主键id自动增量为4
DELETE FROM `test`; -- 还是4,用delete不会影响自增
INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')-- 再执行一次,由于自增没变,所以id是从4开始

-- 用TRUNCATE删除表
TRUNCATE `test`;-- 表test的主键id自动增量为1,重置了

-- 补充
-- 用delete删除表的拓展:用delete删除后再重启数据库,如果引擎不一样,那重启的现象也不一样
-- 如果引擎是InnoDB ,自增列会重1开始(因为数据是存储在内存中,断电即失)
-- 如果引擎是MYISAM,继续从上一个自增量开始(因为是存在文件中的,不会丢失)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐