如何为 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" 这就是你想要的

如果我理解你的问题,可能有两种解决方案

  1. 要么 table1 应该有默认行,table 2 的默认值将引用它

  2. 允许 NULL 值作为外键

Allowing null values or default values-SQL fiddle