如何将空值传递给外键字段?

时间:2013-02-26 06:36:18

标签: mysql sql database database-design

我有两张桌子:

university

university_id(p.k) | university_name

user

uid | name | university_id(f.k)

如何在用户表中保留university_id NULL

我只写了一个查询,我的查询是:

INSERT INTO user (name, university_id) VALUES ($name, $university_id);

此处$university_id可能在前端为空。

university表将由我设置为默认。

在前端,学生将选择大学名称,根据university_id将传递到user表,但如果学生没有选择任何大学名称,那么应该将空值传递给user字段的university_id表。

3 个答案:

答案 0 :(得分:45)

只需允许表university_id的列user允许NULL值,这样您就可以保存 nulls

CREATE TABLE user
(
   uid INT NOT NULL,
   Name VARCHAR(30) NOT NULL, 
   university_ID INT NULL,    -- <<== this will allow field to accept NULL
   CONSTRAINT user_fk FOREIGN KEY (university_ID)
       REFERENCES university(university_ID)
)

更新1

根据您的评论,您应该插入NULL而不是''

insert into user (name,university_id) values ('harjeet', NULL)

更新2

$university_id = !empty($university_id) ? "'$university_id'" : "NULL";
insert into user (name,university_id) values ('harjeet', $university_id);

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:4)

这里假设我有外键user_id,我想为此插入空值。

enter image description here

必须检查复选框是否为外键插入空值。

答案 2 :(得分:1)

我正在使用MySQL InnoDB,甚至在FK列中允许NULL并使用NULL作为默认值我遇到了错误。 所以我使用了SET语法:

INSERT INTO (table) SET value1=X...

我只是没有设置FK列。