详解mysql DML语句的使用

前言:

在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作。

这里说明下DDL与DML语句的分类,可能有的同学还不太清楚。

DDL(Data Definition Language):数据定义语言,用于创建、删除、修改、库或表结构,对数据库或表的结构操作。常见的有create,alter,drop等。

DML(Data Manipulation Language):数据操纵语言,主要对表记录进行更新(增、删、改)。常见的有insert,update,delete等。

1.插入数据

插入数据主要用到的是insert语法,官方文档同样给出很多选项:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]  [INTO] tbl_name  [PARTITION (partition_name [, partition_name] ...)]  [(col_name [, col_name] ...)]  {VALUES | VALUE} (value_list) [, (value_list)] ...  [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]  [INTO] tbl_name  [PARTITION (partition_name [, partition_name] ...)]  SET assignment_list  [ON DUPLICATE KEY UPDATE assignment_list]
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]  [INTO] tbl_name  [PARTITION (partition_name [, partition_name] ...)]  [(col_name [, col_name] ...)]  SELECT ...  [ON DUPLICATE KEY UPDATE assignment_list]
value:  {expr | DEFAULT}
value_list:  value [, value] ...
assignment:  col_name = value
assignment_list:  assignment [, assignment] ...

有兴趣的同学可以咨询研究下上面的各个选项哦,下面我将分类给大家介绍几个常用的语法。

INSERT INTO ... VALUES (...)

这可能是你写insert语句最常用的一种,标准用法为:

INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]VALUES (值1) [… , (值n) ];
#插入多行INSERT INTO table(column1,column2...)VALUES (value1,value2,...),    (value1,value2,...),...;

语法说明如下:

  • <表名> :指定被操作的表名。
  • <列名> :指定需要插入数据的列名。若向表中的所有列插入数据,则全部的列名均可以省略,直接采用 INSERT<表名>VALUES(…) 即可。
  • VALUES 或 VALUE 子句:该子句包含要插入的数据清单。数据清单中数据的顺序要和列的顺序相对应。

INSERT ... SET ...

insert ... set语句一次只能插入一条数据,可以向表中插入部分列的值,这种方式更为灵活。

INSERT INTO <表名>SET <列名1> = <值1>,  <列名2> = <值2>,  …#其中 INTO 可以省略

INSERT INTO ... SELECT ...

INSERT INTO…SELECT…FROM 语句用于快速地从一个或多个表中取出数据,并将这些数据作为行数据插入另一个表中。

SELECT 子句返回的是一个查询到的结果集,INSERT 语句将这个结果集插入指定表中,结果集中的每行数据的字段数、字段的数据类型都必须与被操作的表完全一致。

举个例子,假如test表和test_bak表结构完全一致,我们想把test表中的数据插入到test_bak表中,那么我们可以这么操作:

INSERT INTO test_bak select * from test;

INSERT ...> #假设student表结构和原始数据如下:CREATE TABLE `student` ( `xuehao` int(11) primary key, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8; mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 20 |+--------+------+------+ #比如我们想插入这条数据,MySQL发现主键重复后会执行后面的更新语句insert into student (xuehao,name,age) values (1003,'ccc',19)> #还是上面那个student表,xuehao是主键 原有数据为mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 19 |+--------+------+------+ #如果执行replace into student values (1003,'ccc',17); #则新的表数据为mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 17 |+--------+------+------+ #效果等同于将xuehao为1003的行删除,然后再插入新行

2.更新数据

update语句用于更新表数据,官方推荐语法为:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference  SET assignment_list  [WHERE where_condition]  [ORDER BY ...]  [LIMIT row_count]
value:  {expr | DEFAULT}
assignment:  col_name = value
assignment_list:  assignment [, assignment] ...

详解mysql DML语句的使用

扫一扫手机访问