Mysql基础(11)DML语言
2021/6/15 19:23:22
本文主要是介绍Mysql基础(11)DML语言,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
DML语言
DML(Data Manipulation Language)是指数据操作语言,用来对数据库中表的记录进行更新。
顾名思义,操作数据,因此是针对表记录,不是针对表结构。
插入语句(insert)
实现数据插入需要提供表名、列名、值,因此insert语句中需要包含这几部分。
方式一
其语法如下
insert into 表名(列名)values (对应的一行列值), (对应的一行列值), (对应的一行列值)
注意事项
-
后面的values是复数形式
-
插入的值类型要与列类型一致或兼容,l两者要一一对应(位置和数量),但不受顺序影响。
-
列名可省略,默认按表的顺序列出全部字段。根据上一条,值部分需要写出全部。
-
不可以为null的值必须插入数据。可以为null(表中列的属性为nullable)的列有两种插入方式
#省略可为空列的列名和值 insert into boy(id,boyname) values(123,'张仨') #使用null作为可为空列的值 insert into bot(id,boyname,userCp) values('23','李四',null)
方式二
其语法如下
insert into 表名 set 列名=值,列名=值...
这种方式可显式插入有值的列,不必处理null值。
对比
-
方式一支持批量插入多行数据,方式二不支持
-
方式一支持子查询,方式2不支持。这导致方式一主流的原因。
insert into shoplist(orderID,flowerID,email,num) SELECT max(orderID),1,'a@163.com',1 from myorder //注意insert后直接是子查询,没有 value关键字。子查询的查询列表是待插入列的值。
更新语句(update)
顾名思义,更新语句一般修改若干条记录,而不是全表,因此多和where子句联用。可分为更新单表记录和多表记录。
更新单表
基本语法
update 表名 set 列名=值,列名=值 [where子句] //若没有where子句,则更新全表。
更新多表
更新多表指将多个表连接起来,作为一个大表。更新该大表的字段。因连接方式分为sql92和sql99,因此更新多表有两种语法
#sql92 update 表1 别名1,表2 别名2 set 列名=值,列名=值 where 别名1.key = 别名2.key //连接条件必须有 and [筛选条件] #sql99 update 表1 别名1 inner join | left outer join |right outer join 表2 别名2 on 别名1.key = 别名2.key //先连接 set 列名=值,列名=值 [where子句]
实例 修改张无忌的女朋友的手机号为1114
#sql99方式 UPDATE beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id SET b.phone='1114' WHERE bo.boyName = '张无忌' #报错 where和set不能调换顺序 UPDATE beauty b INNER JOIN boys bo ON b.boyfriend_id = bo.id WHERE bo.boyName = '张无忌' SET b.phone='1114'
实例 修改没有男朋友的女神的男朋友的编号都为2
#使用子查询 UPDATE beauty b SET boyfriend_id = 2 WHERE boyfriend_id NOT IN( SELECT DISTINCT id FROM boys ) #使用连接 UPDATE boys bo RIGHT JOIN beauty b ON b.boyfriend_id = bo.id SET b.boyfriend_id = 2 WHERE bo.id IS NULL
删除语句(delete)
删除的最小单位是行,因此删除操作需要找到删除行的位置,这要求sql语句中提供提供表名、筛选条件。删除语句分为单表删除和多表删除
单表删除(delete)
其基本语法如下。若没有where子句,会删除整个表的数据。
delete from 表名 [where子句]
单表删除(truncate)
其基本语法如下。注意truncate不能使用where子句。
truncate table 表名
truncate和delete对比
- delete可以使用where子句,truncate不能使用。
- truncate删除效率更高。
- 若表中有自增长列,truacate删除后自增长列从1开始,delete删除后自增长列从断点开始。这说明mysql保存了delete删除现场信息。
- truncate没有返回值,delete返回删除行数。
- truncate不能回滚,delete可以。这一点呼应第三点,即mysql保存了delete现场。
多表删除(级联删除)
多表删指连接多个表后成为一个中间表,删除中间表的数据。分为sql92和sql99,其语法如下
#sql92 delete 别名1,别名2 //若删除一个表的数据,则只写一个表的别名。否则写两个 from 表1 别名,表2 别名 where 连接条件 and 筛选条件 #sql99 delete 别名1,别名2 //若删除一个表的数据,则只写一个表的别名。否则写两个 from 表1 别名1 inner|left |right join 表名2 别名2 on 连接条件 where 筛选条件
这篇关于Mysql基础(11)DML语言的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-20部署MySQL集群入门:新手必读指南
- 2024-11-20部署MySQL集群教程:初学者指南
- 2024-11-20部署MySQL集群项目实战:新手教程
- 2024-11-20部署MySQL集群资料:新手入门教程
- 2024-11-20MySQL集群部署教程:入门级详解
- 2024-11-20MySQL集群教程:入门与实践指南
- 2024-11-20部署MySQL集群教程:新手入门指南
- 2024-11-20MySQL读写分离教程:轻松入门
- 2024-11-20部署MySQL集群入门:一步一步搭建你的数据库集群
- 2024-11-19部署MySQL集群学习:入门教程