MySQL DML 操作

时间:2022-07-26
本文章向大家介绍MySQL DML 操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1.1 概述

  DML(Data Manipulation Language)数据操作语言,以 INSERT、UPDATE、DELETE 三种指令为核心,分别代表插入、更新与删除,DML 和 DQL 合称 CRUD(create、read、update、delete) 增查改删。

1.2 新增(create)

  当我们需要向数据库表中插入一条新记录时,就需要使用 INSERT 语句。先列举出需要插入的字段名称,然后在 VALUES 子句中依次写出对应字段的值,还可以一次性添加多条记录,只需要在VALUES子句中指定多个记录值。

1.2.1 单行插入

语法

# 字段和值需要意义对应,字段全部省略时默认为所有字段新增值
insert into tb_name(field_1, field_2, ···) values (value_1, value_2, ···);

# 看看就好,没人用
insert into tb_name set field_1 = value_1, field_2 = value_2, ···;

示例

注意   ① 字段与值要一一对应,不用插入值的字段要么字段和值都不写,要么字段写上,值用 null 代替   ② 字段顺序不必和数据库表的字段顺序一致,但值的顺序必须和字段顺序一致   ③ 当表名后省略所有字段时,默认为所有字段添加数据   ④ 除数字外,其他类型都需要引号(单双皆可)

1.2.2 多行插入

语法

insert into tb_name(field_1, field_2, ···) values (value_1, value_2, ···),(value_1, value_2, ···), ···;

示例

1.2.3 复制表

语法

# 将 tb_name_1 表复制到 tb_name_2 表(仅有结构)
create table tb_name_2 like tb_name_1;

# 将 tb_name_1 表复制到 tb_name_2 表(结构和数据)
create table tb_name_2 select * from tb_name_1;

示例

1.3 修改(update)

  如果要更新数据库表中的记录,我们就需要使用 UPDATE 语句,然后在 WHERE 子句中写出需要更新的行的筛选条件。如果 WHERE 条件没有匹配到任何记录,UPDATE 语句不会报错,也不会有任何记录被更新。UPDATE 语句可以没有 WHERE 条件,这时,整个表的所有记录都会被更新。在使用 MySQL 这类真正的关系数据库时,UPDATE 语句会返回更新的行数。

语法

# 更新满足条件的数据,无条件更新所有数据
update tb_name set col_name_1 = value_1, ···, col_name_n = value_n where 条件;

# 多表更新,看看就好
update tb_name_1, tb_name_2 set tb_name_1.col_name = value, tb_name_2.col_name = value where 条件;

示例

1.4 删除(delete)

  如果要删除数据库表中的记录,可以使用 DELETE 语句。DELETE 语句的 WHERE 条件也是用来筛选需要删除的行,因此 DELETE 语句也可以一次删除多条记录。如果 WHERE 条件没有匹配到任何记录,DELETE 语句不会报错,也不会有任何记录被删除。要特别小心的是,不带 WHERE 条件的 DELETE 语句会删除整个表的数据,若是希望删除整个表的数据可以使用 TRUNCATE。

1.4.1 delete

语法

# 删除名为 tb_name 表中满足条件的数据,无条件则删除 tb_name 表中所有数据
delete from tb_name where 条件;

示例

1.4.2 truncate

  使用 delete 删除所有数据是一条一条数据删,当数据量达到一定程度后,会非常消耗资源。而 truncate 是先删除整张表,然后创建一个结构一摸一样的表从而达到删除所有数据的效果。

语法

# table 可以省略
truncate [table] tb_name;

示例

1.4.3 几种删除的比较

drop、truncate、delete 的区别

drop   删除内容和定义,释放空间,简而言之执行 drop 就是把整个表删除,以后要使用该表是不可能的,除非重新创建该表。drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index),依赖于该表的存储过程将被保留,但其状态会变为 invalid。

truncate   删除内容、释放空间但不删除定义(即保留表的结构),与 drop 不同的是,truncate 删除表之后会再创建一个一摸一样的空表。truncate 不能删除具体某一行数据,只能清空表。

delete   delete 语句用于删除表中的行。带 where 条件时删除表中满足条件的数据,不带 where 条件时删除表中所有数据。delete 语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。

drop、truncate、delete 的安全性

  delete 支持事务,删除的操作记录记录在日志中,删除错误可以进行回滚操作。drop、truncate 删除可以将表中所有数据删除,谨慎操作。

drop、truncate、delete 执行效率

  由于 drop 是直接删除整张表,truncate 是删除表之后在创建一个一摸一样的空表,delete(指不带 where 条件的 delete) 是逐行删除表中数据,所以一般来说: drop > truncate > delete