博客
关于我
MySQL(3)DML详解
阅读量:789 次
发布时间:2023-02-13

本文共 2818 字,大约阅读时间需要 9 分钟。

数据库操作语言(DML)

DML(数据操作语言)是数据库操作中的核心功能,主要用于对数据库中的数据进行增删改查操作。以下将详细介绍DML的三大主要语句:插入数据(INSERT)修改数据(UPDATE)删除数据(DELETE)


1. 插入数据(INSERT)

1.1 语法

插入数据的语法主要有以下几种形式:

  • 简单插入
    INSERT INTO 表名称 VALUES(值 1,值 2,…);
  • 批量插入
    INSERT INTO 表名称 VALUES(值 1,值 2,…),(值 1,值 2,…),…;
  • 指定字段插入
    INSERT INTO 表名称 (字段 1,字段 2,…) VALUES(值 1,值 2,…);
  • 批量指定字段插入
    INSERT INTO 表名称 (字段 1,字段 2,…) VALUES(值 1,值 2,…),(值 1,值 2,…),…;
  • 1.2 说明

  • 字段值对应关系

    • 值的顺序和个数必须与字段列表中的字段顺序和个数一致。如果不一致,会返回错误信息 Column count doesn’t match value count
    • 如果没有在 VALUES 中指定字段名,默认将值逐一赋值给表中定义的字段,顺序与字段定义一致。
  • 特殊情况处理

    • 自增长列:默认值列允许手动插入合适的值,但如果插入 NULL0,实际插入的值会是自增长后的结果。
    • 默认约束:可以直接赋值或使用 DEFAULT 关键字表示使用默认值。
    • 允许 NULL 的列:可以手动赋值或保留 NULL
  • 多行插入

    • VALUES 后可以跟多个值组,支持批量插入。
    • 值可以是常量值、表达式或函数。
  • 示例

    • 插入部门数据:
      INSERT INTO t_department(dname, description) VALUES('教学部','技术培训'),('咨询部','课程咨询服务');
    • 插入员工数据:
      INSERT INTO t_employee(eid, ename, gender, card_id, tel, job_id, mid, birthday, hiredate, address, dept_id) VALUES (1, '孙红雷', '男', '123456789012345678', '12345678901', 1, NULL, '1990-01-01', '2015-01-01', '白庙', 1),       (2, '张亮', '男', '123456789012345677', '12345678902', 2, NULL, '1990-01-02', '2015-01-02', '天通苑北', 1);

  • 2. 修改数据(UPDATE)

    2.1 语法

    修改数据的语法如下:

  • 单张表修改
    UPDATE 表名称 SET 字段名 1 = 值 1, 字段名 2 = 值 2, … 【WHERE 条件】;
  • 多张表修改
    UPDATE 表 1,表 2,… SET 表 1.字段名 1 = 值 1, 表 1.字段名 2 = 值 2, 表 2.字段名 1 = 值 1, 表 2.字段名 2 = 值 2, … 【WHERE 条件】;
  • 2.2 说明

  • 默认修改所有记录

    • 如果 WHERE 条件省略,修改操作会对所有记录进行更新。
  • 值类型

    • 值可以是常量值、表达式或函数。
  • 多张表更新

    • 如果两张表之间没有外键关系,但逻辑上有依赖关系,可以通过 UPDATE 语句同时更新多张表。
  • 外键约束处理

    • 如果修改主表的外键字段值,需确保从表的外键约束不会阻止操作。具体处理方式取决于外键的约束类型(如 RESTRICTCASCADE 等)。
  • 示例

    • 修改所有员工的基本工资:
      UPDATE t_salary SET basic_salary = basic_salary * 1.05;
    • 修改特定员工的手机号码和生日:
      UPDATE t_employee SET tel = '13709098765', birthday = '1982-09-26' WHERE ename = '孙俪';

  • 3. 删除数据(DELETE)

    3.1 语法

    删除数据的语法如下:

  • 单张表删除
    DELETE FROM 表名称 【WHERE 条件】;
  • 多张表删除
    DELETE 表 1,表 2,… FROM 表 1,表 2,… 【WHERE 条件】;
  • 3.2 说明

  • 默认删除所有记录

    • 如果 WHERE 条件省略,删除操作会删除表中所有记录,表结构保留。
  • 使用 TRUNCATE

    • TRUNCATE 语句可以快速清空表中所有数据,并重新创建表结构。
    • TRUNCATE 操作不能回滚,不能用于部分删除记录。
  • 外键约束处理

    • 如果删除主表的外键字段值,需确保从表的外键约束不会阻止操作。具体处理方式取决于外键的约束类型(如 RESTRICTCASCADE 等)。
  • 示例

    • 删除特定员工信息:
      DELETE FROM t_employee WHERE eid = 9;
    • 删除所有“教学部”相关信息:
      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. 查询数据(SELECT)

    4.1 语法

    查询数据的语法如下:

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

    4.2 说明

  • 基本查询

    • SELECT * 可以查询表中所有字段。
    • SELECT 后的字段列表可以是表中的字段、常量值、表达式或函数。
  • 条件查询

    • 使用 WHERE 子句添加条件过滤。
  • 分组查询

    • 使用 GROUP BY 子句对结果进行分组。
  • 排序查询

    • 使用 ORDER BY 子句对结果进行排序,支持 ASC(升序)或 DESC(降序)。
  • 限制结果数

    • 使用 LIMIT 子句限制返回的行数。
  • 示例

    • 查询所有员工的姓名和手机号码:
      SELECT ename AS '员工姓名', tel AS '手机号码' FROM t_employee;
    • 查询不同部门的员工数量:
      SELECT COUNT(DISTINCT dept_id) AS '部门数量' FROM t_employee;

  • 通过以上操作,可以对数据库中的数据进行插入、修改、删除和查询,满足日常数据库管理需求。

    转载地址:http://jedfk.baihongyu.com/

    你可能感兴趣的文章
    mysql用户管理、常用语句、数据分备份恢复
    查看>>
    MySQL留疑问:left join时选on还是where?
    查看>>
    mysql登陆慢问题解决
    查看>>
    MySQL的 DDL和DML和DQL的基本语法
    查看>>
    mysql的 if else , case when then, IFNULL
    查看>>
    MySQL的10种常用数据类型
    查看>>
    MySQL的btree索引和hash索引的区别
    查看>>
    mysql的cast函数
    查看>>
    MySql的CRUD(增、删、改、查)操作
    查看>>
    MySQL的DATE_FORMAT()函数将Date转为字符串
    查看>>
    mysql的decimal与Java的BigDecimal用法
    查看>>
    MySql的Delete、Truncate、Drop分析
    查看>>
    MySQL的Geometry数据处理之WKB方案
    查看>>
    MySQL的Geometry数据处理之WKT方案
    查看>>
    mysql的grant用法
    查看>>
    Mysql的InnoDB引擎的表锁与行锁
    查看>>
    mysql的InnoDB引擎索引为什么使用B+Tree
    查看>>
    MySQL的InnoDB默认隔离级别为 Repeatable read(可重复读)为啥能解决幻读问题?
    查看>>
    MySQL的insert-on-duplicate语句详解
    查看>>
    mysql的logrotate脚本
    查看>>