摘要:子句用于指定表中要修改的列名及其列值。表示删除时,表中各行将按照子句中指定的顺序进行删除。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
前言:
在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作。
这里说明下DDL与DML语句的分类,可能有的同学还不太清楚。1.插入数据
DDL(Data Definition Language):数据定义语言,用于创建、删除、修改、库或表结构,对数据库或表的结构操作。常见的有create,alter,drop等。
DML(Data Manipulation Language):数据操纵语言,主要对表记录进行更新(增、删、改)。常见的有insert,update,delete等。
插入数据主要用到的是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 ... 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 子句]
语法说明如下:
<表名>:用于指定要更新的表名称。
SET 子句:用于指定表中要修改的列名及其列值。其中,每个指定的列值可以是表达式,也可以是该列对应的默认值。如果指定的是默认值,可用关键字 DEFAULT 表示列值。
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 子句]
语法说明如下:
<表名>:指定要删除数据的表名。
ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。
WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值。
总结:
本文主要介绍了三种DML语句的语法,看似简单,其实其中各种选项还是很复杂的,特别是insert语句,经常用到的选项就有很多。在这里也要提醒大家,执行update或delete语句时一定要小心,不使用where条件会更新或删除全部数据哦。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/110708.html
摘要:本文将从最基础的语句出发,为你展示出创建及修改不同对象应该使用的标准语句。自己也很少写这种系列的文章,打算多写几篇入门的基础文章,可能这几篇先后顺序也不太严谨,其他同学有什么好的想法,欢迎与我沟通哦 前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构。相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了。本文将从MySQL最基础的语句出发,为你...
摘要:数据库管理系统数据库管理系统,用户管理数据库的软件。为数据库管理系统提供的功能语言是一种数据库查询和程序设计语言,其主要用于存取数据,查询数据,更新数据和管理数据库系统。是面向关系型数据库的。 数据库技术构成 showImg(https://segmentfault.com/img/remote/1460000007005414); showImg(https://segmentfau...
摘要:数据库管理系统数据库管理系统,用户管理数据库的软件。为数据库管理系统提供的功能语言是一种数据库查询和程序设计语言,其主要用于存取数据,查询数据,更新数据和管理数据库系统。是面向关系型数据库的。 数据库技术构成 showImg(https://segmentfault.com/img/remote/1460000007005414); showImg(https://segmentfau...
摘要:数据库管理系统数据库管理系统,用户管理数据库的软件。为数据库管理系统提供的功能语言是一种数据库查询和程序设计语言,其主要用于存取数据,查询数据,更新数据和管理数据库系统。是面向关系型数据库的。 数据库技术构成 showImg(https://segmentfault.com/img/remote/1460000007005414); showImg(https://segmentfau...
摘要:同其他语言类似,有标准组织出具的规范,但不同的数据库也有自己的不同的实现。本篇基础语句其实也只会介绍此类。数据控制语句,用于控制不同数据的访问权限,配置密码等。和在各种操作符号如后使用和可以表示任意一个和所有的意思。 这是MySQL系列笔记的第一部分,本系列笔记希望能按照笔者自己学习MySQL技术的经历来记录,避免纯粹按照内容一块一块总结,也就是不同于一般按内容分配章节的书籍的结构,有...
阅读 2633·2021-10-11 11:08
阅读 1268·2021-09-30 09:48
阅读 854·2021-09-22 15:29
阅读 864·2019-08-30 15:54
阅读 860·2019-08-29 15:19
阅读 434·2019-08-29 13:12
阅读 1374·2019-08-27 14:27
阅读 3050·2019-08-26 13:53