我有一张表 USER
CREATE TABLE "USER"
(
USER_ID INTEGER NOT NULL ,
CREATED_BY INTEGER NOT NULL ,
) ;
ALTER TABLE "USER" ADD CONSTRAINT USER_PK PRIMARY KEY ( USER_ID ) ;
对于这个特定的数据库,我需要CREATED_BY表作为同一个表中USER_ID的外键。
ALTER TABLE "USER" ADD CONSTRAINT USER_USER_FK FOREIGN KEY ( CREATED_BY ) REFERENCES "USER" ( USER_ID ) ;
由于此约束,我的insert语句将始终在第一个用户上失败。
是否有最好的解决方法?我可以为添加的第一个用户禁用约束,然后重新启用约束吗?
答案 0 :(得分:1)
您可以修改create table脚本,以便它接受created_by列的空值。然后你可以插入你的第一条记录(对于created_by有一个user_id和一个null)。逻辑上,该用户表中的某个人必须是根记录(换句话说,管理员或第一用户,其记录不是由其他人创建的)。
答案 1 :(得分:0)
CREATE TABLE "USER"
(
USER_ID INTEGER NOT NULL ,
CREATED_BY INTEGER ,
) ;
ALTER TABLE "USER" ADD CONSTRAINT USER_PK PRIMARY KEY ( USER_ID ) ;
如果表存在,则该行使列NOT NULL或不可为空。
ALTER TABLE USER MODIFY CREATED_BY INTEGER NOT NULL;
How to add not null constraint to existing column in MySQL5.1