数据操作语言(DML)
插入数据
1、INSERT:向表中插入行
2、VALUES 方式添加
(1)VALUES 也可以写成 VALUE ,但是 VALUES 是标准写法
(2)字符型 / 日期型数据应包含在 '' 中
(3)数据长度需要在列的数据类型的规定范围内
(4)可以插入 NULL,前提是列允许为 NULL
3、情况一
(1)为表的所有字段按默认顺序插入数据
INSERT INTO `表名`
VALUES(值1, 值2,……, 值n);
(2)值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同
(3)所有字段都添加值,可以省略字段名称
4、情况二
(1)为表的指定字段插入数据
INSERT INTO 表名 (字段1[, 字段2,……, 字段n])
VALUES(值1[, 值2,……, 值n]);
(2)为表的指定字段插入数据,就是在 INSERT 语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值
(3)在 INSERT 子句中随意列出列名,但插入值的位置与字段的位置是相对应的,且插入值与列的数据类型需要一致,如果类型不同,将无法插入,且 MySQL 会产生错误
(4)若值为字符型 / 日期型,需要 '' 或 "" 括住
(5)数据长度需要在列的数据类型的规定范围内
(6)可以插入 NULL,前提是列允许为 NULL
5、情况三
(1)同时插入多条记录
INSERT INTO `表名` (`字段1`, `字段2`,……, `字段n`)
VALUES(值……),(值……),(值……)……;
(2)INSERT 语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开
(3)添加多条记录,括号内的值与字段位置相对应
(4)使用 INSERT 同时插入多条记录时,MySQL 会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下
(5)Records:表明插入的记录条数
(6)Duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值
(7)Warnings:表明有问题的数据值,例如发生数据类型转换
(8)一个同时插入多行记录 INSERT 语句,等同于多个单行插入 INSERT 语句,但多个单行 INSERT 语句在处理过程中效率更高,所以在插入多条记录时,最好选择使用单条 INSERT 语句的方式插入
6、默认值
(1)某个字段不添加值时,则会添加默认值,没有设置默认值,且无 NOT NULL 默认值为 NULL;若没有设置默认值,且存在 NOT NULL,则报错
(2)创建表 / 增加列 / 修改列时可以设置默认值
DEFAULT 默认值;
7、将查询结果插入到表中
(1)INSERT 可以将 SELECT 语句查询的结果插入到表中,只需要使用一条 INSERT 语句和一条 SELECT 语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition];
(2)在 INSERT 语句中加入子查询
(3)不必书写 VALUES 子句
(4)子查询中的值列表,应与 INSERT 子句中的列名对应
8、IGNORE 子句是 MySQL 对 SQL 标准的扩展
INSERT IGNORE INTO `表名` (`字段1`, `字段2`,……, `字段n`)
VALUES(值……),(值……),(值……)……;
(1)只使用 INSERT 语句向表中添加多行时,如果在处理过程中发生错误,MySQL 将终止语句并返回错误,没有行插入表中
(2)如果使用 INSERT IGNORE 语句,将忽略导致错误的包含无效数据的行,并将具有有效数据的行插入到表中
更新数据
1、UPDATE:修改表中行
UPDATE `表名`
SET 字段1=值1,……, 字段n=值n
WHERE 过滤条件;
2、SET 子句指定需要修改的列,及修改的值,可同时修改多列
3、使用 WHERE 子句指定需要更新的数据
(1)如果省略 WHERE 子句,则表中的所有数据都将被更新
(2)更新中的数据完整性错误:WHERE 指定行不存在
4、可以一次更新多条数据
5、如果需要回滚数据,需要保证在 DML 前,进行设置:SET AUTOCOMMIT = FALSE
6、使用 JOIN 来查询具有(在某种情况下 INNER JOIN)或可能没有(在这种情况下 LEFT JOIN)另一个表中的行的表中的行,在 MySQL 中,可以使用 UPDATE 语句中的 JOIN 句来执行跨表更新
UPDATE T1, T2,
[INNER JOIN | LEFT JOIN] T1 ON T1.C1 = T2. C1
SET T1.C2 = T2.C2,
T2.C3 = expr
WHERE condition
(1)首先,在子句后面指定主表(T1)和主表要加入的表(T2)UPDATE,必须在 UPDATE 子句后指定至少一个表,表中未在 UPDATE 子句后指定的数据将不会更新
(2)接下来,指定一种加入你想用即无论是 INNER JOIN 或 LEFT JOIN 和联接谓词,JOIN 必须在 UPDATE 之后出现
(3)然后,将新值分配给要更新的 T1 和 / 或 T2 表中的列
(4)之后,在 WHERE 子句中指定一个条件以将行限制为要更新的行
删除数据
1、DELETE:删除表中行
DELETE FROM table_name [WHERE <condition>];
(1)table_name:指定要执行删除操作的表
(2)[WHERE ]:可选参数,指定删除条件,如果没有 WHERE 子句,DELETE 语句将删除表中的所有记录
2、删除中的数据完整性错误:不能删除在另一个表作为外键的主键的行
3、使用 INNER JOIN 语句中的子句 DELETE 删除表中的行和另一个表中的匹配行
(1)要从满足指定条件的 T1 和 T2 表中删除行
DELETE T1, T2
FROM T1
INNER JOIN T2 ON T1.key = T2.key
WHERE condition;
(2)注意:把表名 T1 和 T2 放在 DELETE 和 FROM 关键字之间。如果省略 T1 表,则 DELETE 语句仅删除 T2 表中的行;同样,如果省略 T2 表,则 DELETE 语句将仅删除 T1 表中的行
(3)表达式 T1.key = T2.key 指定用于匹配将要删除的 T1 和 T2 表之间的行的条件
(4)WHERE 子句中的条件确定 T1 和 T2 中将被删除的行
4、在 DELETE 语句中使用 LEFT JOIN 子句删除一个表(左表)中的行,而该表在另一个表(右表)中没有匹配的行
DELETE T1
FROM T1
LEFT JOIN
T2 ON T1.key = T2.key
WHERE T2.key IS NULL;
(1)只把 T1 表放在 DELETE 的关键字后面,而不像在使用 INNER JOIN 子句那样 T1 和 T2 两个表
MySQL 8 新特性:计算列
1、某一列的值是通过别的列计算得来的
2、如:a 列值为 1、b 列值为 2,c 列不需要手动插入,定义 a+b 的结果为 c 的值,则 c 就是计算列,是通过别的列计算得来的
3、在 MySQL 8.0 中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战