new_example.sql
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. --Column ID of table A is primary key:
  2. CREATE TABLE A (
  3. ID int4 not null,
  4. id1 int4 not null,
  5. primary key (ID,ID1)
  6. );
  7. --Columns REFB of table B and REFC of C are foreign keys referenting ID of A:
  8. CREATE TABLE B (
  9. REFB int4,
  10. REFB1 INT4
  11. );
  12. CREATE INDEX BI ON B (REFB);
  13. CREATE TABLE C (
  14. REFC int4,
  15. REFC1 int4
  16. );
  17. CREATE INDEX CI ON C (REFC);
  18. --Trigger for table A:
  19. CREATE TRIGGER AT BEFORE DELETE  ON A FOR EACH ROW
  20. EXECUTE PROCEDURE 
  21. check_foreign_key (2, 'cascade', 'ID','id1', 'B', 'REFB','REFB1', 'C', 'REFC','REFC1');
  22. CREATE TRIGGER AT1  AFTER UPDATE  ON A FOR EACH ROW
  23. EXECUTE PROCEDURE 
  24. check_foreign_key (2, 'cascade', 'ID','id1', 'B', 'REFB','REFB1', 'C', 'REFC','REFC1');
  25. CREATE TRIGGER BT BEFORE INSERT OR UPDATE ON B FOR EACH ROW
  26. EXECUTE PROCEDURE 
  27. check_primary_key ('REFB','REFB1', 'A', 'ID','ID1');
  28. CREATE TRIGGER CT BEFORE INSERT OR UPDATE ON C FOR EACH ROW
  29. EXECUTE PROCEDURE 
  30. check_primary_key ('REFC','REFC1', 'A', 'ID','ID1');
  31. -- Now try
  32. INSERT INTO A VALUES (10,10);
  33. INSERT INTO A VALUES (20,20);
  34. INSERT INTO A VALUES (30,30);
  35. INSERT INTO A VALUES (40,41);
  36. INSERT INTO A VALUES (50,50);
  37. INSERT INTO B VALUES (1); -- invalid reference
  38. INSERT INTO B VALUES (10,10);
  39. INSERT INTO B VALUES (30,30);
  40. INSERT INTO B VALUES (30,30);
  41. INSERT INTO C VALUES (11); -- invalid reference
  42. INSERT INTO C VALUES (20,20);
  43. INSERT INTO C VALUES (20,21);
  44. INSERT INTO C VALUES (30,30);
  45. -- now update work well 
  46. update  A set ID = 100 , ID1 = 199 where ID=30 ;
  47. SELECT * FROM A;
  48. SELECT * FROM B;
  49. SELECT * FROM C;