MySQL入门(7)——表数据的增、删、改
插入数据
使用INSERT···VALUES语句插入数据
INSERT语句最常用的格式是INSERT···VALUES:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名 [(字段名,...)]
VALUES ({值 | DEFAULT},...),(...),...
[ON DUPLICATE KEY UPDATE 字段名=表达式,...]
参数说明如下:
- [LOW_PRIORITY | DELAYED | HIGH_PRIORITY]:可选项,其中LOW_PRIORITY是INSERT、UPDATE和DELETE都支持的可选修饰符,通常应用在多用户访问数据库的情况下,用于指示MySQL降低INSERT、DELETE或UPDATE的执行优先级;DELAYED是INSERT语句支持的可选修饰符,用于指定MySQL将待插入的行数据放到一个缓冲器中,直到待插入数据的表空闲时,才会真正执行插入;HIGH_PRIORITY是INSERT和SELECT语句支持的可选修饰符,用于指定INSERT和SELECT操作优先执行。
- [IGNORE]:可选项,表示执行INSERT语句时,所出现的错误都会被作为警告处理。
- [INTO] 数据表名:可选项,用于指定被操作的数据表。
- [(字段名,...)]:可选项,当不指定该项时,表示要向表中所有列插入数据,否则表示向表的指定列插入数据。
- VALUES({值 | DEFAULT},...),(...),...:必选项,用于指定需要插入的数据清单,其顺序必须与字段的顺序相对应。其中每一列的数据可以是常量、变量、表达式或NULL,但是数据类型必须和字段类型匹配;也可以直接使用DEFAULT关键字,表示该列插入默认值,但是使用的前提是已经明确默认值,否则会出错。
- ON DUPLICATE KEY UPDATE子句:可选项,用于指定向表中插入行时,如果导致UNIQUE KEY或PRIMARY KEY出现重复值,系统会根据UPDATE后的语句修改表中原有行的数据。
使用INSERT···SET语句插入数据
这种语法格式用于通过直接给表中的某些字段指定对应的值来实现插入指定数据,对于未指定的字段将采用默认值进行添加。语法格式如下:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名
SET 字段名={值 | DEFAULT},...
[ON DUPLICATE KEY UPDATE 字段名=表达式,...]
参数说明如下:
- [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] :可选项,其作用与INSERT···VALUES语句相同。
- [INTO]数据表名:用于指定被操作的数据表,其中[INTO]为可选项,可省略。
- SET 字段名={值 | DEFAULT}:用于给数据表中的某些字段设置要插入的值。
- ON DUPLICATE KEY UPDATE子句:可选项,其作用与INSERT···VALUES语句相同。
插入查询结果
MySQL支持将查询结果插入到指定的数据表中,通过INSERT···SELECT语句实现:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] 数据表名 [(字段名,...)]
SELECT ...
[ON DUPLICATE KEY UPDATE 字段名=表达式,...]
参数说明:
- [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]:可选项,其作用与INSERT···VALUE语句相同。
- [INTO] 数据表名:用于指定被操作的数据表,其中[INTO]为可选项,可省略。
- [(字段名,...)]:可选项,当不指定该项时,表示要向表中所有列插入数据,否则表示向表的指定列插入数据。
- SELECT子句:用于快速地从一个或多个表中取出数据,并将这些数据作为行数据插入到目标数据表中。SELECT子句返回结果集中的字段数、字段类型必须与目标数据表完全一致。
- ON DUPICATE KEY UPDATE子句:可选项,其作用与INSERT···VALUES语句相同。
修改数据
使用UPDATE语句:
UPDATE [LOW_PRIORITY] [IGNORE] 数据表名
SET 字段1=值1[,字段2=值2...]
[WHERE 条件表达式]
[ORDER BY...]
[LIMIT 行数]
参数说明:
- [LOW_PRIORITY]:可选项,表示多用户访问数据库的情况下可用于延迟UPDATE操作,知道没有别的用户再从表中读取数据为止。该过程仅适用于表级锁的存储引擎(如IyISAM、MEMORY和MERGE)。
- [IGNORE]:MySQL中,通过UPDATE语句更新表中多行数据时,如果出现错误,则整个UPDATE语句操作都会被取消,错误发生前更新的所有行将被恢复到原先的值。若需要在发生错误后继续更新,需要IGNORE关键词。
- SET子句:必选项,用于指定表中要修改的字段名及其字段值。其中的值可以是表达式,也可以是该字段所对应的默认值。若指定默认值,则使用关键词DEFAULT指定。
- WHERE子句:可选项,用于限定表中要修改的行,若不指定该子句,则UPDATE语句会更新所有行。
- ORDER BY子句:可选项,用于限定表中的行被修改的次序。
- LIMIT子句:可选项,用于限定被修改的行数。
删除数据
MySQL可以使用DELETE语句或TRUNCATE TABLE语句删除表中的一行或多行数据。
通过DELETE语句删除数据
语法格式如下:
DELETE [LOW_PRIOITY] [QUICK] [IGNORE] FROM 数据表名
[WHERE 条件表达式]
[ORDER BY ...]
[LIMIT 行数]
参数说明如下:
- [LOW_PRIOITY]:可选项,表示多用户访问数据库的情况下可用于延迟UPDATE操作,知道没有别的用户再从表中读取数据为止。该过程仅适用于表级锁的存储引擎(如IyISAM、MEMORY和MERGE)。
- [QUICK]:可选项,用于加快部分种类的删除操作速度。
- [IGNORE]:MySQL中,通过DELETE语句删除表中多行数据时,如果出现错误,则整个DELETE语句操作都会被取消,错误发生前更新的所有行将被恢复到原先的值。若需要在发生错误后继续删除,需要IGNORE关键词。
- 数据表名:用于指定要删除的数据表的表名。
- WHERE子句:可选项,用于限定表中要删除的行,若不指定该子句,则DELETE语句会删除表的所有行。
- ORDER BY子句:可选项,用于限定表中的行被删除的次序。
- LIMIT子句:可选项,用于限定被删除的行数。
通过TRUNCATE TABLE语句删除数据
若需要从表中删除所有行,可使用TRUNCATE TABLE语句:
TRUNCATE [TABLE] 数据表名
由于TRUNCATE TABLE语句会删除数据表中的所有数据,并且无法恢复,因此使用TRUNCATE TABLE语句时需谨慎。
DELETE语句和TRUNCATE TABLE语句的区别
DELETE语句与TRUNCATE TABLE语句具有如下区别:
- 使用TRUNCATE TABLE语句后,表中的AUTO_INCREMENT计数器会被重新置为该列的初始值。
- 对于参与了索引和试图的表,不能使用TRUNCATE TABLE语句来删除数据,应当使用DELETE语句。
- TRUNCATE TABLE操作与DELETE操作相比,使用的系统和事务日志资源少。DELETE语句每删除一行都会在事务日志中添加一条记录,而TRUNCATE TABLE语句是通过释放存储表数据所用的数据页来删除数据的,仅在事务日志中记录页的释放。