在PostgreSQL中,外键约束用于确保在一个表中的数据与另一个表中的数据之间的引用完整性,外键约束可以启用、禁用和验证,本文将通过实例介绍如何在PostgreSQL中启用、禁用和验证外键约束。
启用外键约束
1、创建两个表:students和courses。
CREATE TABLE students ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL ); CREATE TABLE courses ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, student_id INT REFERENCES students(id) );
2、在创建表时启用外键约束。
CREATE TABLE students ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT NOT NULL, FOREIGN KEY (id) REFERENCES courses(student_id) );
禁用外键约束
1、禁用students表中的外键约束。
ALTER TABLE students NO FOREIGN KEY;
2、禁用courses表中的外键约束。
ALTER TABLE courses NO FOREIGN KEY;
验证外键约束
1、插入一条违反外键约束的数据。
INSERT INTO courses (id, name, student_id) VALUES (1, 'Math', 3);
2、尝试提交这条数据,如果外键约束有效,数据将被拒绝;如果外键约束无效,数据将被提交。
如果外键约束有效,执行以下命令将报错并回滚事务: BEGIN; INSERT INTO courses (id, name, student_id) VALUES (1, 'Math', 3); COMMIT; 如果外键约束无效,执行以下命令将成功插入数据: INSERT INTO courses (id, name, student_id) VALUES (1, 'Math', 3); COMMIT;
恢复外键约束
1、删除违反外键约束的数据。
DELETE FROM courses WHERE id = 1;
2、恢复students表中的外键约束。
ALTER TABLE students READD FOREIGN KEY (id) REFERENCES courses(student_id);
3、恢复courses表中的外键约束。
ALTER TABLE courses READD FOREIGN KEY (student_id) REFERENCES students(id);
问题与解答:
1、Q:如何在PostgreSQL中创建具有外键约束的表?
A:在创建表时,使用FOREIGN KEY关键字指定外键列及其引用的主表列。CREATE TABLE orders (id SERIAL PRIMARY KEY, customer_id INT REFERENCES customers(id));
,或者在创建表后,使用ALTER TABLE语句添加外键约束:ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers(id);
。
2、Q:如何在PostgreSQL中禁用和启用外键约束?
A:可以使用ALTER TABLE语句的NO FOREIGN KEY子句来禁用外键约束,如ALTER TABLE table_name NO FOREIGN KEY;
,要启用外键约束,可以使用READD FOREIGN KEY子句,如ALTER TABLE table_name READD FOREIGN KEY column_name;
,table_name是要修改的表名,column_name是外键列名,注意,要同时对主表和从表进行操作,本例中使用了READD关键字,但在较新版本的PostgreSQL中,可以直接使用REFERENCES关键字来启用外键约束。ALTER TABLE students ALTER COLUMN student_id REFERENCES courses(id);
。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/505661.html