MySQL基础篇:数据操作语言DML

1、概述

数据操作语言(DML)用于插入、修改、删除、查询数据记录,包括以下SQL语句:

  • INSERT:添加数据到数据库中
  • UPDATE:修改数据库中的数据
  • DELETE:删除数据库中的数据

2、插入数据

2.1 语法

INSERT INTO 表名称 VALUES(1,值2,……,值n);
INSERT INTO 表名称 VALUES(1,值2,……,值n),(1,值2,……,值n),……;
INSERT INTO 表名称 (字段1,字段2,……) VALUES(1,2,……),(1,2,……),……;

2.2 说明

  1. 值的顺序、个数与字段列表中字段的顺序、个数一致;

    (1) 如果个数少了就报Column count doesn’t match value count

    (2) 如果values前面的()中没有列出字段,那么默认就是为表中的所有字段赋值,那么个数与顺序与表结构中字段定义的一致

  2. 关于自增长列,默认值列,允许为NULL列的赋值

    (1) 如果字段列表列出了字段名,那么值列表中就要为其赋值,哪怕它是自增长列,有默认值列,可以为NULL值的列;

    • InnoDB 表的自动增长列可以手动插入合适的值,但是插入的值如果是 NULL 或者 0,则实际插入的将是自动增长后的值;
    • 如果列声明了“默认约束”那么对应的位置可以赋值具体的值,也可以使用“DEFAULT”,表示使用默认值;
    • 如果列允许了 NULL 值,那么可以为对应的字段可以赋值为具体值也可以赋值为 NULL

    (2) 对于没有列出的字段,像自增列就自动赋值,像默认值列就自动赋默认值,像允许 NULL 的列就自动赋 NULL值

  3. VALUES也可以写成VALUE,但是VALUES是标准写法

  4. 可以同时插入多行

  5. 如果插入从表的数据,要注意查看主表参照字段的值是否存在

  6. 值的位置可以是常量、表达式、函数

3、修改数据

3.1 语法

UPDATE 表名称 SET 字段名1=1,字段名2=2,……【WHERE 条件】;
UPDATE1,2,…… SET1.字段名1=1,表1.字段名2=2,2.字段 1 =1,2.字段 2=2......WHERE 条件】;

3.2 说明

  1. 如果不写where条件,会修改所有行

  2. 值可以是常量值、表达式、函数

  3. 可以同时更新多张表

    如果两个表没有建立外键,但逻辑上有外键关系

  4. 如果修改从表外键字段的数据,要注意查看主表参照字段的值是否存在

  5. 如果修改主表的被参考的字段的值,要注意查看从表的外键是否有依赖该值,如果有

    1. 如果外键是on update RESTRICTon update NO ACTION,那么要先处理从表的数据,才能修改;
    2. 如果外键是 on update SET NULLon update CASCADE,那么直接修改,从表的外键字段会自动处理

4、删除数据

4.1 语法

DEELTE FROM 表名 【WHERE 条件】;
DELETE1,表 2,....... FROM1,表 2......where 条件】;

4.2 说明

  1. 如果不加where条件,表示删除整张表的数据,表结构保留。

    delete from 表名:

    删除整张表的数据还可以使用truncate 表名;

  2. 如果删除主表的记录,要注意查看从表的外键是否有依赖该行的值,如果有

    1. 如果外键是 on delete RESTRICT 或 on delete NO ACTION,那么要先处理从表的数据,才能删除
    2. 如果外键是 on delete SET NULL 或 on delete CASCADE,那么删除时从表的对应记录也会被置空或跟着删除
  3. 可以一次删除多个表的数据

    例如:两个表没有建立外键,但逻辑上有外键关系,也可以通过删除多个表的数据来实现级联删除

4.3 示例

#删除学号为 9 的学生信息
DELETE FROM t_stu WHERE sid = 9;

#注意:前提是没有外键或外键是 on delete cascade
#删除所有“教学部”的员工信息和薪资信息和“教学部”部门信息
DELETE t_employee,t_department,t_salary
FROM t_employee,t_department,t_salary
WHERE t_department.`dname` ='教学部' AND t_employee.`dept_id`=t_department.`did` AND t_employee.`eid` = t_salary.eid;

4.4 DELETE与TRUNCATE区别

  1. truncate相当于删除表再重建一张同名结构的表,操作后得到一张全新表,delete是在原有表中删除数据
  2. 如果决定清空一张表的数据,truncate速度更快一些
  3. truncate语句不能回滚

5、查询数据

5.1 语法

SELECT 查询列表
	FROM 表名或视图列表
	[WHERE 条件表达式]
	[GROUP BY 字段名 [HAVING 条件表达式]]
	[ORDER BY 字段 [ASC | DESC]]
	[LIMIT m,n];

5.2 说明

  1. 如果 SELECT 后面是*,那么表示查询所有字段
  2. SELECT 后面的查询列表,可以是表中的字段,常量值,表达式,函数
  3. 查询的结果是一个虚拟的表
  4. select 语句,可以包含 5 种子句:依次是 where、 group by、having、 order by、limit 必须照这个顺序

你可能感兴趣的:(MySQL基础篇:数据操作语言DML)