1、DDL\DML
-- 创建学生表
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
-- 创建课程表
CREATE TABLE courses (
course_id INT PRIMARY KEY AUTO_INCREMENT,
course_name VARCHAR(50)
);
-- 创建教师表
CREATE TABLE teachers (
teacher_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
department VARCHAR(50)
);
-- 创建成绩表
CREATE TABLE grades (
grade_id INT PRIMARY KEY AUTO_INCREMENT,
student_id INT,
course_id INT,
grade DECIMAL(5, 2),
FOREIGN KEY (student_id) REFERENCES students(student_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- 创建授课表
CREATE TABLE teachings (
teaching_id INT PRIMARY KEY AUTO_INCREMENT,
teacher_id INT,
course_id INT,
FOREIGN KEY (teacher_id) REFERENCES teachers(teacher_id),
FOREIGN KEY (course_id) REFERENCES courses(course_id)
);
-- 插入学生数据
INSERT INTO students (name, age, gender)
VALUES ('张三', 18, '男'),
('李四', 19, '女'),
('王五', 20, '男');
-- 插入课程数据
INSERT INTO courses (course_name)
VALUES ('数学'),
('英语'),
('物理');
-- 插入教师数据
INSERT INTO teachers (name, department)
VALUES ('赵老师', '数学系'),
('钱老师', '英语系'),
('孙老师', '物理系');
-- 插入成绩数据
INSERT INTO grades (student_id, course_id, grade)
VALUES (1, 1, 85.5),
(1, 2, 78.0),
(2, 1, 90.0),
(2, 2, 88.5),
(3, 1, 75.0),
(3, 3, 80.0);
-- 插入授课数据
INSERT INTO teachings (teacher_id, course_id)
VALUES (1, 1),
(2, 2),
(3, 3);
2、简单查询
4、多表联合复杂查询
5、er图
6、模型图
7、触发器
a、
-- 当插入新学生记录时,自动将其年龄字段的值限制在19至30岁之间。
delimiter$$-- 修改分隔符从;改为$$这样在触发器中;就不会阻断程序了
CREATE TRIGGER validate_age_insert-- 创建触发器
BEFORE INSERT ON students
FOR EACH ROW-- 每行都要触发这个触发器
begin-- 开始触发器
if new.age < 19 or new.age > 30 THEN
SIGNAL SQLSTATE '45000' SET message_text='年龄必须在 19 至 30 岁之间';
END IF;
END;-- 由于我已将;改为$$所以这里的分号就不会代表结束
$$-- 结束了
delimiter;-- 最后再讲分隔符改回;
b、
-- 当删除学生记录时,同时删除其在成绩表中的相关记录
delimiter$$
-- 修改分隔符从;改为$$这样在触发器中;就不会阻断程序了
CREATE TRIGGER delete_student_scores -- 创建触发器
BEFORE DELETE ON students
FOR EACH ROW-- 每行都要触发这个触发器
begin-- 开始触发器
DELETE FROM grades WHERE student_id = OLD.student_id;
-- delete from 表名{where 条件}
END;-- 由于我已将;改为$$所以这里的分号就不会代表结束
$$-- 结束了
delimiter;-- 最后再讲分隔符改回;
c、
-- 当教师id发生变更时,显示报错
delimiter$$
-- 修改分隔符从;改为$$这样在触发器中;就不会阻断程序了
CREATE TRIGGER check_teacher_id_change-- 创建触发器
BEFORE UPDATE ON teachers
FOR EACH ROW-- 每行都要触发这个触发器
begin-- 开始触发器
IF (OLD.teacher_id!= NEW.teacher_id) THEN
SIGNAL SQLSTATE '45000' SET message_text='教师 ID 不允许变更!';
-- 自定义异常
END IF;
END;-- 由于我已将;改为$$所以这里的分号就不会代表结束
$$-- 结束了
delimiter;-- 最后再讲分隔符改回;
7、存储过程