1. 插入数据

1.2 方式一:VALUES 的方式添加

这种语法一次性只能插入一条数据
情况一:为表中的所有字段按默认顺序插入数据

INSERT INTO 表名
VALUES (value1,value2,...)  顺序必须和声明表的字段顺序一致

情况二:为表中指定字段插入数据

INSERT INTO 表名(column1,column2,...)
VALUES (value1,value2,...)
其他字段的值为表定义时的默认值

情况三:同时插入多条记录

INSERT INTO 表名
VALUES
(value1,value2,...),
(value1,value2,...),
(value1,value2,...);

或
INSERT INTO 表名(column1,column2,...)
VALUES
(value1,value2,...),
(value1,value2,...),
(value1,value2,...);

使用INSERT同时插入多条记录时,MySQL会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下:

● Records:表明插入的记录条数。

● Duplicates:表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值。

● Warnings:表明有问题的数据值,例如发生数据类型转换。

一个同时插入多行记录的INSERT语句等同于多个单行插入的INSERT语句,但是多行的INSERT语句在处理过程中 效率更高 。因为MySQL执行单条INSERT语句插入多行数据比使用多条INSERT语句快,所以在插入多条记录时最好选择使用单条INSERT语句的方式插入。

小结:

  • 字符和日期类型数据应使用单引号

1.3 方式2:将查询结果插入到表中

INSERT 可以将 SELECT 语句查询的结果插入到表中

INSERT INTO 目标表名(column1,column2,...)
SELECT (column1,column2,...)
FROM 源表名
[WHERE ....]
  • 在 INSERT 语句中加入子查询。
  • 不必书写 VALUES 子句。
  • 子查询中的值列表应与 INSERT 子句中的列名对应。

2. 更新数据

UPDATE 表名
SET column1=value1,column2=value2...
[WHERE ....]
  • 可以一次更新多条数据

  • 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;

  • 使用 WHERE 子句指定需要更新的数据

UPDATE employees
SET department_id = 70
WHERE employee_id = 112;
  • 如果省略 WHERE 子句,则表中的所有数据都将被更新。

  • 更新中的数据完整性错误

UPDATE employees
SET department_id = 55
WHERE department_id = 110;

employees 表和 departments 表有关联
department表中 没有 55 号的部门

3. 删除数据

DELETE FROM 表名
WHERE ...

WHERE 为可选参数,指定删除条件,如果没有WHERE子句,DELETE语句将删除表中的所有记录。

  • 删除中的数据完整性错误
DELETE FROM departments
WHERE department_id = 60;

说明:You cannot delete a row that contains a primary key that is used as a foreign key in another table.

employees 表中有数据 与 department 表 关联

4. MySQL8新特性:计算列

有一列的数据是由其他列计算而来的。例如 a 列的值为 1,b 列的值为 2,c 列的值为 a + b
则 c 就是计算列

在 MySQL8.0 中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。

CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL
);

INSERT INTO tb1(a,b) VALUES (100,200);

mysql> SELECT * FROM tb1;
+------+------+------+------+
| id   | a    | b    | c    |
+------+------+------+------+
| NULL | 100  |  200 | 300  |
+------+------+------+------+
1 row in set (0.00 sec)
文章作者: 临川
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 临川羡鱼
MySQL MySQL
喜欢就支持一下吧