06 mysql之DML

一、什么是DML

DML 用于操作数据库中的数据。主要命令包括:

  • INSERT:添加数据
  • SELECT:查询数据
  • UPDATE:修改数据
  • DELETE:删除数据

二、插入数据(INSERT)

2.1 插入单条记录

-- 插入学生记录(使用默认值)
INSERT INTO students (student_id, student_name, age, gender, birth)
VALUES (1,'张三', 18, 'M', '1996-7-22');

-- 插入教师记录(关联学生ID=1)
INSERT INTO teachers (teacher_id, teacher_name, subject, experience_years, mentor_student_id)
VALUES (1, '李四', '数学', 5, 1);

2.2 批量插入

INSERT INTO students (student_id, student_name, age, gender, birth)
VALUES 
(2, '王丽', 17, 'F', '1996-3-2'),
(3, '张起灵', 19, 'M', '1997-11-9');

数据库数据最后如下:

三、修改数据(UPDATE)

-- 修改单个记录
UPDATE students
SET age = 20, email = 'zhangsan_new@school.com'
WHERE student_id = 1;

-- 批量修改
UPDATE teachers
SET experience_years = experience_years + 1
WHERE subject = '数学';

四、删除数据(DELETE) 

-- 删除单条记录
DELETE FROM students WHERE student_id = 3;

-- 删除所有记录(保留表结构)
DELETE FROM teachers;

五、事务处理(ROLLBACK;)

回滚(Rollback)的作用是撤销还未提交的事务。MySQL中可以使用以下语句实现回滚:ROLLBACK;

确保一组操作的原子性(全部成功或全部失败):

DELIMITER //

CREATE PROCEDURE process_student_teacher()
BEGIN
    -- 声明错误处理
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
        ROLLBACK;  -- 出错时回滚
        RESIGNAL;  -- 重新抛出错误
    END;

    -- 开始事务
    START TRANSACTION;

    -- 执行 SQL 操作
    INSERT INTO students (name, age) VALUES ('测试', 20);
    UPDATE teachers SET experience_years = 10 WHERE teacher_id = 1;

    -- 成功则提交
    COMMIT;
END //

DELIMITER ;

-- 调用存储过程
CALL process_student_teacher();

因为没有name这个字段,会回滚

  • DELIMITER //:由于存储过程包含多个 SQL 语句(用 ; 分隔),而 MySQL 默认用 ; 作为语句结束符,所以临时改成 // 避免冲突。

  • CREATE PROCEDURE:定义一个存储过程,名为 process_student_teacher

  • BEGIN ... END:存储过程的主体部分,包含要执行的 SQL 逻辑。

  • DECLARE EXIT HANDLER FOR SQLEXCEPTION

    • 声明一个 错误处理器(Error Handler),当发生 SQLEXCEPTION(SQL 错误)时触发。

    • EXIT 表示执行完错误处理后,退出存储过程(也可以使用 CONTINUE 继续执行)。

  • ROLLBACK

    • 如果发生错误(如插入失败、更新失败),回滚整个事务,撤销所有更改。

  • RESIGNAL(可选):

    • 重新抛出错误,让调用者(如应用程序)知道发生了什么问题。如果省略,错误会被静默处理。

  • START TRANSACTION

    • 开启一个事务,后续的 SQL 操作要么全部成功,要么全部失败(原子性)。

  • INSERT / UPDATE

    • 在事务内执行 SQL 操作,如果任何一步失败,整个事务会回滚。

  • COMMIT

    • 如果所有操作成功,提交事务,使更改永久生效。

  • CALL 用于执行存储过程,相当于调用一个封装好的 SQL 逻辑块。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬呀爬的水滴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值