如何为 mysql 中的外键列设置默认值
How do I set default value for a foreign key column in mysql
table1
bookid bookname author
0 No book no author
1 Engg Maths Greiwal
2 Java Basics James Gosling
3 Mahabharata Ved Vyasa
4 Ramayana Valmiki
5 Harry Potter JK Rowling
table2
userid name bookid
1 Arjun 2
2 Charles 2
3 Babbage 3
我有 table1 和 table2。 table1 中的 bookid 是主键,table2 中的 bookid 是外键。我想将 table2 bookid 默认值设置为 0.
有没有可能?
我们尝试使用默认值为零。
它抛出异常"Cannot add or update child row: a foreign key constaint fails"
我只是 运行 这个 mysql...
create table table1 (
bookid int not null primary key,
bookname varchar(100) not null,
author varchar(100) not null
);
create table table2 (
userid int not null,
username varchar(100) not null,
bookid int not null default 0
);
alter table table2 add constraint fk1 foreign key (bookid) references table1(bookid);
insert into table1(bookid,bookname,author) values (0,'None','none');
insert into table2(userid, username) values (1,'bob');
select * from table2;
结果
1 bob 0
您还可以使 fk 列 table2.bookid 可为空 (bookid int null,)。如果您要构建大量代码,那么允许外键为空或使用 'sentinel values' 的选择是最好有意识地做出的设计选择。
为什么你有一行叫做 "no book"?在 table 中你需要的只是书,而不是 "no book"
首先从 table1 中删除无用的行,然后在 table2 中:
允许外键为空,如果外键为空则表示 "no book"
基本上,现在 "null" 是默认值,null 表示 "no book"
这就是你想要的
如果我理解你的问题,可能有两种解决方案
要么 table1 应该有默认行,table 2 的默认值将引用它
允许 NULL 值作为外键
table1
bookid bookname author
0 No book no author
1 Engg Maths Greiwal
2 Java Basics James Gosling
3 Mahabharata Ved Vyasa
4 Ramayana Valmiki
5 Harry Potter JK Rowling
table2
userid name bookid
1 Arjun 2
2 Charles 2
3 Babbage 3
我有 table1 和 table2。 table1 中的 bookid 是主键,table2 中的 bookid 是外键。我想将 table2 bookid 默认值设置为 0.
有没有可能? 我们尝试使用默认值为零。
它抛出异常"Cannot add or update child row: a foreign key constaint fails"
我只是 运行 这个 mysql...
create table table1 (
bookid int not null primary key,
bookname varchar(100) not null,
author varchar(100) not null
);
create table table2 (
userid int not null,
username varchar(100) not null,
bookid int not null default 0
);
alter table table2 add constraint fk1 foreign key (bookid) references table1(bookid);
insert into table1(bookid,bookname,author) values (0,'None','none');
insert into table2(userid, username) values (1,'bob');
select * from table2;
结果
1 bob 0
您还可以使 fk 列 table2.bookid 可为空 (bookid int null,)。如果您要构建大量代码,那么允许外键为空或使用 'sentinel values' 的选择是最好有意识地做出的设计选择。
为什么你有一行叫做 "no book"?在 table 中你需要的只是书,而不是 "no book" 首先从 table1 中删除无用的行,然后在 table2 中: 允许外键为空,如果外键为空则表示 "no book" 基本上,现在 "null" 是默认值,null 表示 "no book" 这就是你想要的
如果我理解你的问题,可能有两种解决方案
要么 table1 应该有默认行,table 2 的默认值将引用它
允许 NULL 值作为外键