前言:

在上篇文章中,主要为大家介绍的是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 = valueassignment_list: assignment [, assignment] ...

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

INSERT INTO ... VALUES (...)

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

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

语法说明如下:

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

INSERT ... SET ...

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

INSERT INTO SET  = ,  = , …#其中 INTO 可以省略

INSERT INTO ... SELECT ...

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

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

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

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 = valueassignment_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条件会更新或删除全部数据哦。

insert into语句_入门MySQL——DML语句篇相关推荐

  1. mysql 截断表_入门MySQL——基础语句篇

    前言: 前面几篇文章,我们介绍了MySQL的基础概念及逻辑架构.相信你现在应该有了自己的一套MySQL环境,接下来我们就可以开始练习MySQL了.本文将从MySQL最基础的语句出发,为你展示出创建及修 ...

  2. mysql定期执行备份语句_【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件...

    项目部署在服务期上之后,有了新的需求,需要每月定时备份mysql数据库的所有数据! 查找了网上的多篇文章之后,自己又对bat文件中的mysqldump语句进行改进,可以实现了不用输入密码就能自动定时备 ...

  3. SQL基础使用入门(二): DML语句和DCL语句

    SQL语句第二个类别--DML 语句 DML是数据操作语言的缩写,主要用来对数据表中数据记录实例对象进行操作,包括插入.删除.查找以及修改四大操作,这也是开发人员使用中最为频繁的操作. 1.插入记录 ...

  4. mysql dml语句 先读取在更新_事务的4个特性——ACID(原子性、一致性、隔离性和持久性)、更新丢失问题...

    两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题: 1.幻想读:事务T1读取一条指定where条件的语句,返回结果集.此时事务T2插入一行新记录,恰好满足T1的where条件.然后T1使用 ...

  5. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...

    本篇Himi简单介绍一些MySQL数据库的基础操作: 注:mysql 语句对大小写不敏感,语句以分号";"标识语句结束: 1.   首先使用两个简单的查询语句: 查询当前版本:se ...

  6. mysql数据加百分号_使用MySQL SELECT语句时,在每个值的末尾添加一个百分号(%)...

    要在末尾添加百分号,请使用CONCAT()函数.让我们首先创建一个表-mysql> create table DemoTable ( StudentId int NOT NULL AUTO_IN ...

  7. mysql的tcl语句_初识数据库(TCL语句)

    TCL语句 : 事物控制语句 --什么是事物 : 多种操作能够达到统一的结果 --在网上购买了一部电话 --1.查询是否有该电话的库存 ,将库存 - 1 --2.从银行卡中扣钱,a)查询卡中的钱是否足 ...

  8. mysql select 区分大小写_在MySQL SELECT语句中实现区分大小写

    SELECT默认情况下不区分大小写.对于区分大小写的实现,使用BINARY运算符.以下是语法:select *from yourTableName where BINARY yourColumnNam ...

  9. mysql查询语句详解_基于mysql查询语句的使用详解

    1> 查询数据表除了前三条以外的数据. 起初我想到的是这条语句 SELECT * FROM admin WHERE userid NOT IN (SELECT userid FROM admin ...

最新文章

  1. 干货 | 如何使用 CNN 推理机在 IoT 设备上实现深度学习
  2. “河边一群鹅,嘘声赶落河。捉得鹅来填肚饿,吃完回家玩老婆!”
  3. 独家 | 一文读懂概率论学习:贝叶斯理论(附链接)
  4. 软件测试与评估:Keep/悦跑圈
  5. java setsolinger_java socket 的参数选项解读(转)
  6. 【C++学习笔记四】运算符重载
  7. php 调用日历控制,基于ThinkPHP实现的日历功能实例详解
  8. python模块化编程_Python模块化编程
  9. 中国程序员最应该感谢的几家公司
  10. android新对象锁,Android的线程和对象锁定
  11. • 服务注册与发现(Eureka、Consul)
  12. 大数据专业python实验报告_大数据导论实验报告
  13. python web 开发从入门到精通 pdf_Python Web开发从入门到精通
  14. 绕过tp路由器管理密码_路由器管理员密码忘了怎么办 路由器管理员密码忘了解决方法【介绍】...
  15. 易到要在网约车市场突围并不容易
  16. Ping IPv6在线测试检测 testipv6 加速镜像
  17. 谷歌野心有多大?曾有意联合腾讯收购 Epic、计划 5 年成为全球最大游戏平台!
  18. RL(Chapter 3): Finite Markov Decision Processes (有限马尔可夫决策过程)
  19. bootstrap-table固定表头固定列
  20. percona的安装、启动、停止

热门文章

  1. 【渝粤教育】 国家开放大学2020年春季 2716动物营养基础 参考试题
  2. 【渝粤题库】广东开放大学 文化市场营销 形成性考核 (2)
  3. java期末考试试卷及答案文库_JAVA期末考试试题及答案.docx
  4. 蓝桥杯小白系列之汇编点亮led灯
  5. 10 Equality constrained minimization
  6. 使用 CNF 测试套件测试云原生最佳实践
  7. 反射setaccessible_advancedday16类加载器,反射
  8. win mysql 2003错误_windows MySql 报1067错误 2003错误
  9. matlab的一个疑问?
  10. jvm系列二之GC收集器