#第十七章、练习题

USE dbtest17;

#练习1
#0、准备工作
CREATE TABLE emps
AS
SELECT employee_id,last_name,salary
FROM atguigudb.employees;

SELECT * FROM emps;

#1、复制一张emps表的空表emps_back，只有表结构，不包含任何数据
CREATE TABLE emps_back
AS
SELECT * FROM emps
WHERE FALSE;

#老师讲的
CREATE TABLE emps_back
AS
SELECT * FROM emps
WHERE 1 = 2;

#2、查询emps_back表中的数据
SELECT * FROM emps_back;

#3、创建触发器emps_insert_trigger，每当向emps表中添加一条记录时，同步将这条记录添加到emps_back表中
DELIMITER //

CREATE TRIGGER emps_insert_trigger
AFTER INSERT ON emps
FOR EACH ROW
BEGIN
		#将新添加到emps表中的记录添加到emps_back表中
		INSERT INTO emps_back(employee_id,last_name,salary)
		VALUES(NEW.employee_id,NEW.last_name,NEW.salary);
END //

DELIMITER ;

SHOW TRIGGERS;

#4、验证触发器是否起作用
INSERT INTO emps(employee_id,last_name,salary)
VALUES(300,'Tom',3400);

SELECT * FROM emps;

SELECT * FROM emps_back;


#练习2
#0、准备工作：使用练习1中的emps表

#1、复制一张emps表的空表emps_back1，只有表结构，不包含任何数据
CREATE TABLE emps_back1
AS
SELECT * FROM emps
WHERE 1 = 2;

#2、查询emps_back1表中的数据
SELECT * FROM emps_back1;

#3、创建触发器emps_del_trigger，每当向emps表中删除一条记录时，同步将删除的这条记录添加到emps_back1表中
DELIMITER //

CREATE TRIGGER emps_del_trigger
BEFORE DELETE ON emps
FOR EACH ROW
BEGIN
		#将emps表中删除的记录，添加到emps_back1表中
		INSERT INTO emps_back1(employee_id,last_name,salary)
		VALUES(OLD.employee_id,OLD.last_name,OLD.salary);
END //

DELIMITER ;

#4、验证触发器是否起作用
DELETE FROM emps
WHERE employee_id = 101;

SELECT * FROM emps;

SELECT * FROM emps_back1;

#补充，如果要把emps表的数据全部删除，并把数据全部添加到emps_back1表中，只需要将WHERE语句去掉就可以了。











