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 SQLEXCEPTIONBEGINROLLBACK; -- 出错时回滚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 逻辑块。