小编给大家分享一下关于mysql中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 ... 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 ... ON DUPLICATE KEY UPDATE
如果要插入的新行违反主键(PRIMARY KEY)或UNIQUE约束,则MySQL会报错,此语法就是为了解决此错误。当数据库中存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。
下面举个例子为大家演示下效果:
#假设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) on DUPLICATE KEY UPDATE age = 19; #执行之后发现数据变成了这样mysql> select * from student;+--------+------+------+| xuehao | name | age |+--------+------+------+| 1001 | aaa | 18 || 1002 | bbb | 19 || 1003 | ccc | 19 |+--------+------+------+ #即上条语句等效于执行 update student set age = 19 where xuehao = 1003;
REPLACE INTO ... VALUES ...
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。2. 否则,直接插入新数据。
同样举个例子说明下:
#还是上面那个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] ...
同样的,这里只给大家介绍常用的单表更新语法:
UPDATE <表名> SET 字段 1=值 1 [,字段 2=值 2… ] [WHERE 子句 ][ORDER BY 子句] [LIMIT 子句]
语法说明如下:
3.删除数据
delete语句用于删除表数据,官方文档推荐语法:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [PARTITION (partition_name [, partition_name] ...)] [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
使用 DELETE 语句从单个表中删除数据,语法格式为:
DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]
语法说明如下:
以上是关于mysql中DML语句的使用方法的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。