创建触发器tri_guozilong,当从shop表删除sname:朝阳一店之后,将被删除商店的所有员工信息从员工表中删除:
时间: 2024-03-16 17:43:03 浏览: 72
好的,以下是创建该触发器的SQL语句:
```
CREATE TRIGGER tri_guozilong
AFTER DELETE ON shop
FOR EACH ROW
BEGIN
DELETE FROM employee
WHERE shop_id = OLD.shop_id;
END;
```
需要注意的是,该触发器是在每次从 `shop` 表中删除一行数据之后触发,使用 `OLD` 关键字可以获取到该行数据的信息,包括 `shop_id`,然后根据 `shop_id` 删除 `employee` 表中相应的数据。
相关问题
MYSQL 1、使用SQL语句创建数据库company,创建员工表emp_guozilong, 字段名:uid(编号)、username(姓名)、sex(性别)、age(年龄)、salary(薪水)、post(岗位)、married(是否结婚)、sid(商店编号) 字符集为:gb2312 2、创建表shop,字段名为sid(商店编号)、sname(商店名) 、addr(商店地址)、 sdate(开店时间) 3、查询年龄最小的一位女员工的信息。 4、查询年龄在20-25之间,未婚的女员工信息。 5、分组显示男经理和男店员的平均年龄。 6、查询各个店的店名称、店地址和店经理姓名。 7、使用子查询,将朝阳一店所有经理的工资薪水修改为9000。 8、创建视图view_guizilong ,显示商店所有男员工信息。 9、创建存储过程 proc_guozilong ,根据输入的 sid:2102001 ,查询该商店经理数和员工数,然后显示店内员工的姓名、薪水、职位、和所在的商店的店名。 10、创建触发器tri_guozilong ,当从shop表删除记录之后,将被删除商店的所有员工信息从员工表中删除。 11、创建事件ev_guozilong ,从2023年6月10日开始,每2小时,分组查询次未婚和已婚的员工数量,然后将事件临时关闭后,查看事件。
1. 创建数据库和员工表:
```
CREATE DATABASE company CHARACTER SET gb2312;
USE company;
CREATE TABLE emp_guozilong (
uid INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20),
sex VARCHAR(10),
age INT,
salary DECIMAL(10,2),
post VARCHAR(20),
married VARCHAR(10),
sid INT
);
```
2. 创建商店表:
```
CREATE TABLE shop (
sid INT PRIMARY KEY,
sname VARCHAR(20),
addr VARCHAR(50),
sdate DATE
);
```
3. 查询年龄最小的一位女员工的信息:
```
SELECT * FROM emp_guozilong WHERE sex='女' ORDER BY age LIMIT 1;
```
4. 查询年龄在20-25之间,未婚的女员工信息:
```
SELECT * FROM emp_guozilong WHERE sex='女' AND age BETWEEN 20 AND 25 AND married='否';
```
5. 分组显示男经理和男店员的平均年龄:
```
SELECT sex, post, AVG(age) FROM emp_guozilong WHERE sex='男' AND (post='经理' OR post='店员') GROUP BY post;
```
6. 查询各个店的店名称、店地址和店经理姓名:
```
SELECT s.sname, s.addr, e.username
FROM shop s, emp_guozilong e
WHERE s.sid=e.sid AND e.post='经理';
```
7. 使用子查询,将朝阳一店所有经理的工资薪水修改为9000:
```
UPDATE emp_guozilong SET salary=9000
WHERE sid=(SELECT sid FROM shop WHERE sname='朝阳一店') AND post='经理';
```
8. 创建视图view_guizilong,显示商店所有男员工信息:
```
CREATE VIEW view_guizilong AS
SELECT * FROM emp_guozilong WHERE sex='男';
```
9. 创建存储过程proc_guozilong,根据输入的sid:2102001,查询该商店经理数和员工数,然后显示店内员工的姓名、薪水、职位和所在的商店的店名:
```
CREATE PROCEDURE proc_guozilong(IN sid_in INT)
BEGIN
DECLARE mgr_count INT;
DECLARE emp_count INT;
DECLARE sname VARCHAR(20);
SELECT COUNT(*) INTO mgr_count FROM emp_guozilong WHERE sid=sid_in AND post='经理';
SELECT COUNT(*) INTO emp_count FROM emp_guozilong WHERE sid=sid_in;
SELECT sname INTO sname FROM shop WHERE sid=sid_in;
SELECT username, salary, post, sname
FROM emp_guozilong e, shop s
WHERE e.sid=s.sid AND e.sid=sid_in;
SELECT CONCAT('该商店经理数:', mgr_count, ',员工数:', emp_count, ',所属商店名称:', sname) AS info;
END;
```
10. 创建触发器tri_guozilong,当从shop表删除记录之后,将被删除商店的所有员工信息从员工表中删除:
```
CREATE TRIGGER tri_guozilong AFTER DELETE ON shop
FOR EACH ROW
BEGIN
DELETE FROM emp_guozilong WHERE sid=OLD.sid;
END;
```
11. 创建事件ev_guozilong,从2023年6月10日开始,每2小时,分组查询次未婚和已婚的员工数量,然后将事件临时关闭后,查看事件:
```
CREATE EVENT ev_guozilong
ON SCHEDULE EVERY 2 HOUR STARTS '2023-06-10 00:00:00'
DO
BEGIN
SELECT married, COUNT(*) FROM emp_guozilong GROUP BY married;
END;
ALTER EVENT ev_guozilong ON COMPLETION PRESERVE DISABLE;
SHOW EVENTS;
```
3.建立触发器tri_delete_s2,当删除student表中记录时,将SC表相应记录同时删除。设计用例进行测试。删除触发器tri_delete_s2。
创建触发器:
```
CREATE TRIGGER tri_delete_s2
AFTER DELETE ON student
FOR EACH ROW
DELETE FROM SC WHERE SC.s_id = old.s_id;
```
测试用例:
1. 在student表中删除id为1的记录,检查SC表中是否同时删除了相应记录。
2. 在student表中删除id为2的记录,检查SC表中是否同时删除了相应记录。
3. 在student表中删除id为3的记录,检查SC表中是否同时删除了相应记录。
删除触发器:
```
DROP TRIGGER tri_delete_s2;
```
阅读全文