CREATE TABLE g_log ( Sno CHAR(8), Cno CHAR(4), Grade INT ); CREATE TRIGGER update_grade AFTER UPDATE ON SC FOR EACH ROW BEGIN INSERT INTO g_log(Sno, Cno, Grade) VALUES (NEW.Sno, NEW.Cno, NEW.Grade); END; CREATE TRIGGER instead_of_delete INSTEAD OF DELETE ON C FOR EACH ROW BEGIN DECLARE selected INT; SELECT COUNT(*) INTO selected FROM SC WHERE Cno = OLD.Cno; IF selected > 0 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '此课程已有学生已选修,无法删除'; ELSE DELETE FROM C WHERE Cno = OLD.Cno; END IF; END;
时间: 2024-02-29 09:56:52 浏览: 76
这段代码是一个 MySQL 数据库的触发器,其中包含了两个触发器:
1. "update_grade" 触发器:当 SC 表中的某一行被更新时,会将更新后的 Sno、Cno 和 Grade 值插入到 g_log 表中。
2. "instead_of_delete" 触发器:当 C 表中的某一行被删除时,会首先检查 SC 表中是否有学生选修了该课程,如果有,则会抛出一个异常,否则会删除该行。
值得注意的是,这两个触发器都是针对相应表中的每一行进行操作的,也就是说,每当表中有一行被更新或删除时,这些触发器都会被触发。
相关问题
-- 切换到数据库 SC USE SC; -- 创建学生表 Students_8208210915 CREATE TABLE Students_8208210915 ( Sno INT PRIMARY KEY, Sname VARCHAR(20) NOT NULL, Gender CHAR(2) CHECK (Gender IN ('男', '女')), Birthday DATE NOT NULL ); -- 创建课程表 Courses_8208210915 CREATE TABLE Courses_8208210915 ( Cno INT PRIMARY KEY, Cname VARCHAR(20) NOT NULL, PCno INT, Hours INT NOT NULL, Credit INT NOT NULL, FOREIGN KEY (PCno) REFERENCES Courses_8208210915 (Cno) ); -- 创建选修表 Score_8208210915 CREATE TABLE Score_8208210915 ( Sno INT NOT NULL, Cno INT NOT NULL, Score INT NOT NULL, PRIMARY KEY (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Students_8208210915 (Sno), FOREIGN KEY (Cno) REFERENCES Courses_8208210915 (Cno) );
好的,以上代码是用 SQL 语言在数据库 SC 中创建了三个表:Students_8208210915、Courses_8208210915 和 Score_8208210915。Students_8208210915 表包含学生的学号、姓名、性别和出生日期信息;Courses_8208210915 表包含课程的课程号、课程名、先修课程号、学时和学分信息;Score_8208210915 表包含学生选修课程的成绩信息,其中包括学生的学号、课程的课程号和成绩。表之间通过主键和外键进行关联。
use [StuCou210934] go create table SC210934 ( SC_Sno char(7) not null primary key(SC_Sno,SC_Cno) , SC_Cno char(3) not null , SC_Cname nvarchar(20) not null, SC_PreCno char(3), SC_Credit tinyint )给Sno和Cno添加外键
在 SQL Server 中,可以使用 `ALTER TABLE` 语句添加外键约束。以下是添加 `SC210934` 表中 `SC_Sno` 和 `SC_Cno` 列的外键约束的 SQL 语句:
```
ALTER TABLE SC210934
ADD CONSTRAINT FK_SC210934_Sno
FOREIGN KEY (SC_Sno)
REFERENCES 学生表(Sno);
ALTER TABLE SC210934
ADD CONSTRAINT FK_SC210934_Cno
FOREIGN KEY (SC_Cno)
REFERENCES 课程表(Cno);
```
上面的 SQL 语句中,`FK_SC210934_Sno` 和 `FK_SC210934_Cno` 是外键约束的名称,`SC_Sno` 和 `SC_Cno` 是要添加外键约束的列名。`学生表(Sno)` 和 `课程表(Cno)` 是参考表的名称和列名。在实际使用时,需要将 `学生表` 和 `课程表` 替换为实际的表名和列名。
阅读全文