在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息
时间: 2024-03-17 20:43:36 浏览: 147
好的,可以使用以下 SQL 语句在 STUDENTS 表上创建触发器:
```
CREATE TRIGGER student_id_trigger
BEFORE UPDATE ON STUDENTS
FOR EACH ROW
BEGIN
IF NEW.STUDENT_ID != OLD.STUDENT_ID THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '提示信息:禁止修改学生的学号!';
END IF;
END;
```
这个触发器的作用是在每次对 STUDENTS 表进行修改之前,检查新的学生学号是否与旧的学号相同。如果不同,将会抛出一个 SQLSTATE 为 '45000' 的异常,并且提示信息为“提示信息:禁止修改学生的学号!”。这样就可以避免用户在修改学生信息时误操作修改学号了。
相关问题
练习创建下面约束: 主键(PRIMARY KEY)约束; 唯一性(UNIQUE)约束; 将STUDENTS表中的SNAME列设为唯一键约束、COURSES表中的CNAME 列设为唯一键约束; 检查(CHECK)约束等; 外键(FOREIGN KEY)约束:外键约束是为了强制实现表之间的参照完整性。级联参照完整性约束就是为了保证外键数据的关联性。 2. 创建触发器 触发器是一种特殊类型的存储过程,通常用于实现强制业务规则和数据完整性。创建UPDATE触发器检查修改操作的业务规则,如:在STUDENTS表上建立触发器,当用户修改学生的学号时给出提示信息。在完成上面的实验时,我可能会遇到什么问题,又该如何解决?
在创建约束时可能会遇到以下问题:
1. 主键约束和唯一约束重复:如果表中已经有主键约束,再添加唯一约束会报错。解决方法是删除主键约束或者将唯一约束设置为主键约束。
2. 约束名重复:如果在同一表中添加约束时约束名重复,会报错。解决方法是修改约束名或者删除已有的约束。
3. CHECK约束条件错误:在设置CHECK约束时,需要确保约束条件正确。如果条件错误会导致数据插入失败。解决方法是修改约束条件。
在创建触发器时可能会遇到以下问题:
1. 触发器语法错误:在编写触发器时,需要确保语法正确。如果语法错误会导致触发器创建失败。解决方法是修改语法错误。
2. 触发器逻辑错误:在编写触发器时,需要确保触发器逻辑正确。如果逻辑错误会导致触发器无法实现业务规则和数据完整性。解决方法是修改触发器逻辑。
1. 创建名为reminder的触发器,当用户向specialty表中插入一条专业信息记录时, 向客户端发送一条提示消息“插入一条记录!” 2. 触发触发器reminder 3. 查看触发器reminder执行效果 4. 创建名为reminder的触发器,当用户向specialty表中插入一条专业信息记录时, 向客户端发送一条提示消息“插入一条记录!”(使用SET) 5.在students表上,创建一个名为deleted的触发器, 其功能为:当对students表进行删除操作时,显示无法删除的信息。 6. 触发触发器deleted 7. 查看触发器deleted执行效果 8.创建了一个修改触发器updated,防止用户修改students表的学号。 9. 触发触发器updated 10. 查看触发器updated执行效果 11. 查看 updated 触发器的信息。 12.删除触发器updated。 13.禁用触发器updated。使用数据库语句写出上述语句
1.
```
CREATE TRIGGER reminder
AFTER INSERT ON specialty
FOR EACH ROW
BEGIN
SELECT '插入一条记录!' INTO @msg;
SELECT @msg;
END;
```
2. `INSERT INTO specialty (name) VALUES ('Computer Science');`
3. 触发器执行效果会在客户端中显示提示消息“插入一条记录!”
4.
```
CREATE TRIGGER reminder
AFTER INSERT ON specialty
FOR EACH ROW
SET @msg = '插入一条记录!';
```
5.
```
CREATE TRIGGER deleted
BEFORE DELETE ON students
FOR EACH ROW
BEGIN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该行无法删除!';
END;
```
6. `DELETE FROM students WHERE id = 1;` (假设 id 为 1 的行存在)
7. 触发器执行效果会提示“该行无法删除!”
8.
```
CREATE TRIGGER updated
BEFORE UPDATE ON students
FOR EACH ROW
BEGIN
IF NEW.id <> OLD.id THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '禁止修改学号!';
END IF;
END;
```
9. `UPDATE students SET id = 2 WHERE id = 1;` (假设 id 为 1 的行存在)
10. 触发器执行效果会提示“禁止修改学号!”
11. `SHOW CREATE TRIGGER updated;`
12. `DROP TRIGGER updated;`
13. `DISABLE TRIGGER updated ON students;` (具体语句根据数据库类型可能会有差异)
阅读全文