求助,sql外键的创建问题
发布网友
发布时间:2022-04-28 18:32
我来回答
共2个回答
热心网友
时间:2022-04-13 17:39
-- 创建外键(默认选项)
ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;
-- 删除 外键约束
ALTER TABLE test_sub DROP CONSTRAINT main_id_cons;
不知道楼主明白了么?
那个 constraint id_fk 中的 id_fk
是为了 方便你 删除外键
当然了。某些数据库, 是 允许 暂时 禁用外键约束.
禁用的时候, 也是要给一个名字的。
下面是一段 Oracle 的例子
SQL> -- 创建外键(默认选项)
SQL> ALTER TABLE test_sub ADD CONSTRAINT main_id_cons FOREIGN KEY (main_id) REFERENCES test_main;
表已更改。
SQL> -- 测试插入子表数据. 将出错 ORA-02291: 违反完整约束条件
SQL> INSERT INTO test_sub (ID, MAIN_ID, VALUE) VALUES (3, 3, 'THREETHREE');
INSERT INTO test_sub (ID, MAIN_ID, VALUE) VALUES (3, 3, 'THREETHREE')
*
ERROR 位于第 1 行:
ORA-02291: 违反完整约束条件 (TEST.MAIN_ID_CONS) - 未找到父项关键字
-- 尝试禁用外键约束.
SQL> ALTER TABLE test_sub MODIFY CONSTRAINT main_id_cons DISABLE;
表已更改。
SQL> INSERT INTO test_sub (ID, MAIN_ID, VALUE) VALUES (3, 3, 'THREETHREE');
已创建 1 行。
SQL> INSERT INTO test_main(id, value) VALUES (3, 'THREE');
已创建 1 行。
SQL> commit;
提交完成。
-- 恢复启用外键约束.
SQL> ALTER TABLE test_sub MODIFY CONSTRAINT main_id_cons ENABLE;
表已更改。
SQL> DELETE test_main WHERE ID = 1;
DELETE test_main WHERE ID = 1
*
ERROR 位于第 1 行:
ORA-02292: 违反完整约束条件 (TEST.MAIN_ID_CONS) - 已找到子记录
热心网友
时间:2022-04-13 18:57
alter table gradeadd constraint id_fk foreign key (id) references student (id)
这条语句中
id_fk 是你创建的这个外键的名称
foreign key (id) 这里的id表示本表,也就是gradeadd表你要建立外键的字段名
references student (id) 这一句是指定你参照的表和列名