第十七章、练习题.sql 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #第十七章、练习题
  2. USE dbtest17;
  3. #练习1
  4. #0、准备工作
  5. CREATE TABLE emps
  6. AS
  7. SELECT employee_id,last_name,salary
  8. FROM atguigudb.employees;
  9. SELECT * FROM emps;
  10. #1、复制一张emps表的空表emps_back,只有表结构,不包含任何数据
  11. CREATE TABLE emps_back
  12. AS
  13. SELECT * FROM emps
  14. WHERE FALSE;
  15. #老师讲的
  16. CREATE TABLE emps_back
  17. AS
  18. SELECT * FROM emps
  19. WHERE 1 = 2;
  20. #2、查询emps_back表中的数据
  21. SELECT * FROM emps_back;
  22. #3、创建触发器emps_insert_trigger,每当向emps表中添加一条记录时,同步将这条记录添加到emps_back表中
  23. DELIMITER //
  24. CREATE TRIGGER emps_insert_trigger
  25. AFTER INSERT ON emps
  26. FOR EACH ROW
  27. BEGIN
  28. #将新添加到emps表中的记录添加到emps_back表中
  29. INSERT INTO emps_back(employee_id,last_name,salary)
  30. VALUES(NEW.employee_id,NEW.last_name,NEW.salary);
  31. END //
  32. DELIMITER ;
  33. SHOW TRIGGERS;
  34. #4、验证触发器是否起作用
  35. INSERT INTO emps(employee_id,last_name,salary)
  36. VALUES(300,'Tom',3400);
  37. SELECT * FROM emps;
  38. SELECT * FROM emps_back;
  39. #练习2
  40. #0、准备工作:使用练习1中的emps表
  41. #1、复制一张emps表的空表emps_back1,只有表结构,不包含任何数据
  42. CREATE TABLE emps_back1
  43. AS
  44. SELECT * FROM emps
  45. WHERE 1 = 2;
  46. #2、查询emps_back1表中的数据
  47. SELECT * FROM emps_back1;
  48. #3、创建触发器emps_del_trigger,每当向emps表中删除一条记录时,同步将删除的这条记录添加到emps_back1表中
  49. DELIMITER //
  50. CREATE TRIGGER emps_del_trigger
  51. BEFORE DELETE ON emps
  52. FOR EACH ROW
  53. BEGIN
  54. #将emps表中删除的记录,添加到emps_back1表中
  55. INSERT INTO emps_back1(employee_id,last_name,salary)
  56. VALUES(OLD.employee_id,OLD.last_name,OLD.salary);
  57. END //
  58. DELIMITER ;
  59. #4、验证触发器是否起作用
  60. DELETE FROM emps
  61. WHERE employee_id = 101;
  62. SELECT * FROM emps;
  63. SELECT * FROM emps_back1;
  64. #补充,如果要把emps表的数据全部删除,并把数据全部添加到emps_back1表中,只需要将WHERE语句去掉就可以了。