⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 foreign_key.sql

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 SQL
📖 第 1 页 / 共 2 页
字号:
---- FOREIGN KEY---- MATCH FULL---- First test, check and cascade--CREATE TABLE PKTABLE ( ptest1 int PRIMARY KEY, ptest2 text );CREATE TABLE FKTABLE ( ftest1 int REFERENCES PKTABLE MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE, ftest2 int );-- Insert test data into PKTABLEINSERT INTO PKTABLE VALUES (1, 'Test1');INSERT INTO PKTABLE VALUES (2, 'Test2');INSERT INTO PKTABLE VALUES (3, 'Test3');INSERT INTO PKTABLE VALUES (4, 'Test4');INSERT INTO PKTABLE VALUES (5, 'Test5');-- Insert successful rows into FK TABLEINSERT INTO FKTABLE VALUES (1, 2);INSERT INTO FKTABLE VALUES (2, 3);INSERT INTO FKTABLE VALUES (3, 4);INSERT INTO FKTABLE VALUES (NULL, 1);-- Insert a failed row into FK TABLEINSERT INTO FKTABLE VALUES (100, 2);-- Check FKTABLESELECT * FROM FKTABLE;-- Delete a row from PK TABLEDELETE FROM PKTABLE WHERE ptest1=1;-- Check FKTABLE for removal of matched rowSELECT * FROM FKTABLE;-- Update a row from PK TABLEUPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;-- Check FKTABLE for update of matched rowSELECT * FROM FKTABLE;DROP TABLE FKTABLE;DROP TABLE PKTABLE;---- check set NULL and table constraint on multiple columns--CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1, ptest2) );CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, CONSTRAINT constrname FOREIGN KEY(ftest1, ftest2)                        REFERENCES PKTABLE MATCH FULL ON DELETE SET NULL ON UPDATE SET NULL);-- Test commentsCOMMENT ON CONSTRAINT constrname_wrong ON FKTABLE IS 'fk constraint comment';COMMENT ON CONSTRAINT constrname ON FKTABLE IS 'fk constraint comment';COMMENT ON CONSTRAINT constrname ON FKTABLE IS NULL;-- Insert test data into PKTABLEINSERT INTO PKTABLE VALUES (1, 2, 'Test1');INSERT INTO PKTABLE VALUES (1, 3, 'Test1-2');INSERT INTO PKTABLE VALUES (2, 4, 'Test2');INSERT INTO PKTABLE VALUES (3, 6, 'Test3');INSERT INTO PKTABLE VALUES (4, 8, 'Test4');INSERT INTO PKTABLE VALUES (5, 10, 'Test5');-- Insert successful rows into FK TABLEINSERT INTO FKTABLE VALUES (1, 2, 4);INSERT INTO FKTABLE VALUES (1, 3, 5);INSERT INTO FKTABLE VALUES (2, 4, 8);INSERT INTO FKTABLE VALUES (3, 6, 12);INSERT INTO FKTABLE VALUES (NULL, NULL, 0);-- Insert failed rows into FK TABLEINSERT INTO FKTABLE VALUES (100, 2, 4);INSERT INTO FKTABLE VALUES (2, 2, 4);INSERT INTO FKTABLE VALUES (NULL, 2, 4);INSERT INTO FKTABLE VALUES (1, NULL, 4);-- Check FKTABLESELECT * FROM FKTABLE;-- Delete a row from PK TABLEDELETE FROM PKTABLE WHERE ptest1=1 and ptest2=2;-- Check FKTABLE for removal of matched rowSELECT * FROM FKTABLE;-- Delete another row from PK TABLEDELETE FROM PKTABLE WHERE ptest1=5 and ptest2=10;-- Check FKTABLE (should be no change)SELECT * FROM FKTABLE;-- Update a row from PK TABLEUPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;-- Check FKTABLE for update of matched rowSELECT * FROM FKTABLE;-- Try altering the column type where foreign keys are involvedALTER TABLE PKTABLE ALTER COLUMN ptest1 TYPE bigint;ALTER TABLE FKTABLE ALTER COLUMN ftest1 TYPE bigint;SELECT * FROM PKTABLE;SELECT * FROM FKTABLE;DROP TABLE PKTABLE CASCADE;DROP TABLE FKTABLE;---- check set default and table constraint on multiple columns--CREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 text, PRIMARY KEY(ptest1, ptest2) );CREATE TABLE FKTABLE ( ftest1 int DEFAULT -1, ftest2 int DEFAULT -2, ftest3 int, CONSTRAINT constrname2 FOREIGN KEY(ftest1, ftest2)                        REFERENCES PKTABLE MATCH FULL ON DELETE SET DEFAULT ON UPDATE SET DEFAULT);-- Insert a value in PKTABLE for defaultINSERT INTO PKTABLE VALUES (-1, -2, 'The Default!');-- Insert test data into PKTABLEINSERT INTO PKTABLE VALUES (1, 2, 'Test1');INSERT INTO PKTABLE VALUES (1, 3, 'Test1-2');INSERT INTO PKTABLE VALUES (2, 4, 'Test2');INSERT INTO PKTABLE VALUES (3, 6, 'Test3');INSERT INTO PKTABLE VALUES (4, 8, 'Test4');INSERT INTO PKTABLE VALUES (5, 10, 'Test5');-- Insert successful rows into FK TABLEINSERT INTO FKTABLE VALUES (1, 2, 4);INSERT INTO FKTABLE VALUES (1, 3, 5);INSERT INTO FKTABLE VALUES (2, 4, 8);INSERT INTO FKTABLE VALUES (3, 6, 12);INSERT INTO FKTABLE VALUES (NULL, NULL, 0);-- Insert failed rows into FK TABLEINSERT INTO FKTABLE VALUES (100, 2, 4);INSERT INTO FKTABLE VALUES (2, 2, 4);INSERT INTO FKTABLE VALUES (NULL, 2, 4);INSERT INTO FKTABLE VALUES (1, NULL, 4);-- Check FKTABLESELECT * FROM FKTABLE;-- Delete a row from PK TABLEDELETE FROM PKTABLE WHERE ptest1=1 and ptest2=2;-- Check FKTABLE to check for removalSELECT * FROM FKTABLE;-- Delete another row from PK TABLEDELETE FROM PKTABLE WHERE ptest1=5 and ptest2=10;-- Check FKTABLE (should be no change)SELECT * FROM FKTABLE;-- Update a row from PK TABLEUPDATE PKTABLE SET ptest1=1 WHERE ptest1=2;-- Check FKTABLE for update of matched rowSELECT * FROM FKTABLE;-- this should fail for lack of CASCADEDROP TABLE PKTABLE;DROP TABLE PKTABLE CASCADE;DROP TABLE FKTABLE;---- First test, check with no on delete or on update--CREATE TABLE PKTABLE ( ptest1 int PRIMARY KEY, ptest2 text );CREATE TABLE FKTABLE ( ftest1 int REFERENCES PKTABLE MATCH FULL, ftest2 int );-- Insert test data into PKTABLEINSERT INTO PKTABLE VALUES (1, 'Test1');INSERT INTO PKTABLE VALUES (2, 'Test2');INSERT INTO PKTABLE VALUES (3, 'Test3');INSERT INTO PKTABLE VALUES (4, 'Test4');INSERT INTO PKTABLE VALUES (5, 'Test5');-- Insert successful rows into FK TABLEINSERT INTO FKTABLE VALUES (1, 2);INSERT INTO FKTABLE VALUES (2, 3);INSERT INTO FKTABLE VALUES (3, 4);INSERT INTO FKTABLE VALUES (NULL, 1);-- Insert a failed row into FK TABLEINSERT INTO FKTABLE VALUES (100, 2);-- Check FKTABLESELECT * FROM FKTABLE;-- Check PKTABLESELECT * FROM PKTABLE;-- Delete a row from PK TABLE (should fail)DELETE FROM PKTABLE WHERE ptest1=1;-- Delete a row from PK TABLE (should succeed)DELETE FROM PKTABLE WHERE ptest1=5;-- Check PKTABLE for deletesSELECT * FROM PKTABLE;-- Update a row from PK TABLE (should fail)UPDATE PKTABLE SET ptest1=0 WHERE ptest1=2;-- Update a row from PK TABLE (should succeed)UPDATE PKTABLE SET ptest1=0 WHERE ptest1=4;-- Check PKTABLE for updatesSELECT * FROM PKTABLE;DROP TABLE FKTABLE;DROP TABLE PKTABLE;-- MATCH unspecified-- Base test restricting update/deleteCREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, ftest4 int,  CONSTRAINT constrname3			FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE);-- Insert Primary Key valuesINSERT INTO PKTABLE VALUES (1, 2, 3, 'test1');INSERT INTO PKTABLE VALUES (1, 3, 3, 'test2');INSERT INTO PKTABLE VALUES (2, 3, 4, 'test3');INSERT INTO PKTABLE VALUES (2, 4, 5, 'test4');-- Insert Foreign Key valuesINSERT INTO FKTABLE VALUES (1, 2, 3, 1); INSERT INTO FKTABLE VALUES (NULL, 2, 3, 2);INSERT INTO FKTABLE VALUES (2, NULL, 3, 3);INSERT INTO FKTABLE VALUES (NULL, 2, 7, 4);INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5);-- Insert a failed valuesINSERT INTO FKTABLE VALUES (1, 2, 7, 6);-- Show FKTABLESELECT * from FKTABLE;-- Try to update something that should failUPDATE PKTABLE set ptest2=5 where ptest2=2;-- Try to update something that should succeedUPDATE PKTABLE set ptest1=1 WHERE ptest2=3;-- Try to delete something that should failDELETE FROM PKTABLE where ptest1=1 and ptest2=2 and ptest3=3;-- Try to delete something that should workDELETE FROM PKTABLE where ptest1=2;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;DROP TABLE FKTABLE;DROP TABLE PKTABLE;-- cascade update/deleteCREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );CREATE TABLE FKTABLE ( ftest1 int, ftest2 int, ftest3 int, ftest4 int,  CONSTRAINT constrname3			FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE			ON DELETE CASCADE ON UPDATE CASCADE);-- Insert Primary Key valuesINSERT INTO PKTABLE VALUES (1, 2, 3, 'test1');INSERT INTO PKTABLE VALUES (1, 3, 3, 'test2');INSERT INTO PKTABLE VALUES (2, 3, 4, 'test3');INSERT INTO PKTABLE VALUES (2, 4, 5, 'test4');-- Insert Foreign Key valuesINSERT INTO FKTABLE VALUES (1, 2, 3, 1); INSERT INTO FKTABLE VALUES (NULL, 2, 3, 2);INSERT INTO FKTABLE VALUES (2, NULL, 3, 3);INSERT INTO FKTABLE VALUES (NULL, 2, 7, 4);INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5);-- Insert a failed valuesINSERT INTO FKTABLE VALUES (1, 2, 7, 6);-- Show FKTABLESELECT * from FKTABLE;-- Try to update something that will cascadeUPDATE PKTABLE set ptest2=5 where ptest2=2;-- Try to update something that should not cascadeUPDATE PKTABLE set ptest1=1 WHERE ptest2=3;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;-- Try to delete something that should cascadeDELETE FROM PKTABLE where ptest1=1 and ptest2=5 and ptest3=3;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;-- Try to delete something that should not have a cascadeDELETE FROM PKTABLE where ptest1=2;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;DROP TABLE FKTABLE;DROP TABLE PKTABLE;-- set null update / set default deleteCREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );CREATE TABLE FKTABLE ( ftest1 int DEFAULT 0, ftest2 int, ftest3 int, ftest4 int,  CONSTRAINT constrname3			FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE			ON DELETE SET DEFAULT ON UPDATE SET NULL);-- Insert Primary Key valuesINSERT INTO PKTABLE VALUES (1, 2, 3, 'test1');INSERT INTO PKTABLE VALUES (1, 3, 3, 'test2');INSERT INTO PKTABLE VALUES (2, 3, 4, 'test3');INSERT INTO PKTABLE VALUES (2, 4, 5, 'test4');-- Insert Foreign Key valuesINSERT INTO FKTABLE VALUES (1, 2, 3, 1); INSERT INTO FKTABLE VALUES (2, 3, 4, 1); INSERT INTO FKTABLE VALUES (NULL, 2, 3, 2);INSERT INTO FKTABLE VALUES (2, NULL, 3, 3);INSERT INTO FKTABLE VALUES (NULL, 2, 7, 4);INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5);-- Insert a failed valuesINSERT INTO FKTABLE VALUES (1, 2, 7, 6);-- Show FKTABLESELECT * from FKTABLE;-- Try to update something that will set nullUPDATE PKTABLE set ptest2=5 where ptest2=2;-- Try to update something that should not set nullUPDATE PKTABLE set ptest2=2 WHERE ptest2=3 and ptest1=1;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;-- Try to delete something that should set defaultDELETE FROM PKTABLE where ptest1=2 and ptest2=3 and ptest3=4;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;-- Try to delete something that should not set defaultDELETE FROM PKTABLE where ptest2=5;-- Show PKTABLE and FKTABLESELECT * from PKTABLE;SELECT * from FKTABLE;DROP TABLE FKTABLE;DROP TABLE PKTABLE;-- set default update / set null deleteCREATE TABLE PKTABLE ( ptest1 int, ptest2 int, ptest3 int, ptest4 text, PRIMARY KEY(ptest1, ptest2, ptest3) );CREATE TABLE FKTABLE ( ftest1 int DEFAULT 0, ftest2 int DEFAULT -1, ftest3 int, ftest4 int,  CONSTRAINT constrname3			FOREIGN KEY(ftest1, ftest2, ftest3) REFERENCES PKTABLE			ON DELETE SET NULL ON UPDATE SET DEFAULT);-- Insert Primary Key valuesINSERT INTO PKTABLE VALUES (1, 2, 3, 'test1');INSERT INTO PKTABLE VALUES (1, 3, 3, 'test2');INSERT INTO PKTABLE VALUES (2, 3, 4, 'test3');INSERT INTO PKTABLE VALUES (2, 4, 5, 'test4');INSERT INTO PKTABLE VALUES (2, -1, 5, 'test5');-- Insert Foreign Key valuesINSERT INTO FKTABLE VALUES (1, 2, 3, 1); INSERT INTO FKTABLE VALUES (2, 3, 4, 1); INSERT INTO FKTABLE VALUES (2, 4, 5, 1);INSERT INTO FKTABLE VALUES (NULL, 2, 3, 2);INSERT INTO FKTABLE VALUES (2, NULL, 3, 3);INSERT INTO FKTABLE VALUES (NULL, 2, 7, 4);INSERT INTO FKTABLE VALUES (NULL, 3, 4, 5);-- Insert a failed valuesINSERT INTO FKTABLE VALUES (1, 2, 7, 6);-- Show FKTABLESELECT * from FKTABLE;-- Try to update something that will failUPDATE PKTABLE set ptest2=5 where ptest2=2;-- Try to update something that will set defaultUPDATE PKTABLE set ptest1=0, ptest2=5, ptest3=10 where ptest2=2;UPDATE PKTABLE set ptest2=10 where ptest2=4;-- Try to update something that should not set defaultUPDATE PKTABLE set ptest2=2 WHERE ptest2=3 and ptest1=1;-- Show PKTABLE and FKTABLE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -