在student表中创建一个触发器student-update,该触发器防止用户修改student表的学号。
时间: 2023-06-19 09:09:18 浏览: 130
可以使用如下的SQL语句创建一个名为student-update的触发器:
```
CREATE TRIGGER student-update
BEFORE UPDATE ON student
FOR EACH ROW
BEGIN
IF NEW.id != OLD.id THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '不能修改学号!';
END IF;
END;
```
以上触发器会在每次更新student表的记录时执行。如果用户尝试修改学号,那么触发器会抛出一个错误,并拒绝更新此记录。
相关问题
mysql18. 在student表上创建一个触发器(stud_insert),实现当插入一个学生学生记录的时候,保证学生的年龄只能是16~40岁,性别只能是男或女。 19. 在student表上创建一个触发器(stud_update),实现当更新一个学生的学号的时候,为了保证数据完整性,同时更新score表中该学生的学号。 20. 在student表上创建一个触发器(stud_delete),实现当删除一个学生记录的时候,为了保证数据完整性,同时删除该学生的所有课程成绩。
触发器的创建可以使用以下语句:
18. 创建stud_insert触发器:
```
CREATE TRIGGER stud_insert
BEFORE INSERT ON student
FOR EACH ROW
BEGIN
IF NEW.age NOT BETWEEN 16 AND 40 OR NEW.gender NOT IN ('男', '女') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄只能是16~40岁,性别只能是男或女';
END IF;
END;
```
19. 创建stud_update触发器:
```
CREATE TRIGGER stud_update
AFTER UPDATE ON student
FOR EACH ROW
BEGIN
UPDATE score
SET student_id = NEW.id
WHERE student_id = OLD.id;
END;
```
20. 创建stud_delete触发器:
```
CREATE TRIGGER stud_delete
BEFORE DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE student_id = OLD.id;
END;
```
以上触发器可以保证在插入、更新、删除记录时,保证数据完整性。
18. 在student表上创建一个触发器(stud_insert),实现当插入一个学生学生记录的时候,保证学生的年龄只能是16~40岁(生日s_bir),性别s_sex只能是男或女。 19. 在student表上创建一个触发器(stud_update),实现当更新一个学生的学号s_no的时候,为了保证数据完整性,同时更新score表中该学生的学号。 20. 在student表上创建一个触发器(stud_delete),实现当删除一个学生记录的时候,为了保证数据完整性,同时删除该学生的所有课程成绩(score表中)。
好的,您的问题是关于数据库的三个触发器的创建。下面是对应的 SQL 语句:
创建触发器stud_insert:
```
CREATE TRIGGER stud_insert
BEFORE INSERT ON student
FOR EACH ROW
BEGIN
IF NEW.s_bir < DATE_SUB(NOW(), INTERVAL 40 YEAR) OR NEW.s_bir > DATE_SUB(NOW(), INTERVAL 16 YEAR) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '年龄必须在16~40岁之间';
END IF;
IF NEW.s_sex != '男' AND NEW.s_sex != '女' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '性别必须是男或女';
END IF;
END
```
创建触发器stud_update:
```
CREATE TRIGGER stud_update
AFTER UPDATE ON student
FOR EACH ROW
BEGIN
IF OLD.s_no != NEW.s_no THEN
UPDATE score SET s_no = NEW.s_no WHERE s_no = OLD.s_no;
END IF;
END
```
创建触发器stud_delete:
```
CREATE TRIGGER stud_delete
AFTER DELETE ON student
FOR EACH ROW
BEGIN
DELETE FROM score WHERE s_no = OLD.s_no;
END
```
请注意,这些触发器的语法可能因数据库类型而异。以上语句是基于 MySQL 数据库的语法。
阅读全文