使用sqlyog创建了三个数据库并且进行了数据的插入如下(无错误)
CREATE DATABASE liu;
USE liu;
CREATE TABLE student
(Sno VARCHAR(50) NOT NULL PRIMARY KEY,
Sname VARCHAR(50),
Age INT,
Sex VARCHAR(50),
Place VARCHAR(50));
CREATE TABLE Course
(Cno VARCHAR(50) PRIMARY KEY,
Cname VARCHAR(50),
Credit INT
)
CREATE TABLE Study
(
Sno VARCHAR(50) NOT NULL,
Cno VARCHAR(50) NOT NULL,
Grage INT ,
PRIMARY KEY(Sno,Cno)
)
INSERT INTO student
VALUES('201215121','李勇',20,'男','广东'),
('201215122','刘晨',19,'女','湖北'),
('201215123','王敏',18,'女','江西'),
('201215125','张立',19,'男','湖北'),
('201215126','汪明',18,'男','湖北');
INSERT INTO Course
VALUES('C01','数据库',3),
('C02','C语言',4),
('C03','操作系统',4),
('C04','数据结构',4),
('C05','软件工程',2);
INSERT INTO Study
VALUES('201215121','C01',92),
('201215121','C05',85),
('201215122','C01',90),
('201215122','C03',80),
('201215123','C02',87),
('201215123','C04',79);
对(1)和(2)进行了创建(无错误),如何求解(3),以及对存储器创建完成后,且0error,如何验证其功能符合要求
DROP PROCEDURE IF EXISTS student_info;
DELIMITER $$
CREATE PROCEDURE student_info()
BEGIN
SELECT a.Sno,Sname,Cname,Grage,Credit
FROM Student a INNER JOIN Study b ON a.Sno=b.Sno INNER JOIN Course t ON b.Cno=t.Cno;
SELECT AVG(Grage)AS average,SUM(Credit) AS sumcredit
FROM Study INNER JOIN Course ON Study.Cno=Course.Cno
GROUP BY Sno;
END $$
DELIMITER ;
CALL student_info;
DROP TRIGGER IF EXISTS delete_trig;
DELIMITER $$
CREATE TRIGGER delete_trig
AFTER DELETE
ON Course FOR EACH ROW
BEGIN
DECLARE xh CHAR(9);
SET xh=old.Cno;
DELETE FROM Study
WHERE Cno=xh;
END $$
DELIMITER ;
DROP TRIGGER IF EXISTS insert_trig;
DELIMITER $$
CREATE TRIGGER insert_trig
before insert
ON study FOR EACH ROW
BEGIN
if new.Grage <0 or new.Grage >100 then
signal sqlstate 'HY000' set message_text = '得分需要大于等于0,小于等于100';
end if;
END $$
DELIMITER ;
验证就是插入分数不合格的,比如小于0或者大于100的分数,会抛出错误
INSERT INTO Study
VALUES('201215121','C01',150)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!SQLyog 是业界著名的 Webyog 公司出品的一款简洁高效、功能强大的图形化 MySQL 数据库管理工具。使用 SQLyog 可以快速直观地让您从世界的任何角落通过网络来维护远端的 MySQL 数据库
使用 SQLyog 登录数据库
答案:
创建验证成绩合法性的触发器:
步骤1:打开SQLyog,选择要创建触发器的数据库。
步骤2:在“对象管理器”中,右击数据表“study”,选择“设计表”,打开“设计表窗口”。
步骤3:在“设计表窗口”中,选择“触发器”标签页,点击“新建触发器”。
步骤4:在“新建触发器窗口”中,输入触发器名称“check_score”,选择“Before insert”(在插入之前)。在“触发器程序”文本栏中输入以下SQL语句(代码中的限制为成绩不能大于100):
IF NEW.score > 100 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = '成绩不合法';
END IF;
步骤5:保存触发器并关闭“设计表窗口”。
验证触发器是否工作:
步骤1:在SQLyog中,打开“query”标签页。
步骤2:输入以下SQL语句来插入一条不合法的记录:
INSERT INTO study (id, name, score) VALUES (1, 'Jack', 110);
步骤3:查看输出,应该会出现 “#1644 - 成绩不合法” 的错误信息,说明触发器生效了。
步骤4:输入以下SQL语句来插入一条合法的记录:
INSERT INTO study (id, name, score) VALUES (2, 'Lucy', 80);
步骤5:查看输出,应该会显示成功插入 1 条记录。
至此,我们验证了触发器已经生效,并能够拦截插入不合法的记录。
如果你是第一次使用SQLyog,需要在“SQLyog连接MySQL数据库”之前按照段落1中的方法设置密码,确保能够连接数据库。
参考资料: 1. SQL 触发器相关知识:https://www.runoob.com/sql/sql-trigger.html 2. SQLyog 常用操作:https://blog.csdn.net/weixin_44212920/article/details/86732192