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

Har*_*eja 31 mysql sql database database-design

我有2张桌子:

university:

university_id(p.k) | university_name
Run Code Online (Sandbox Code Playgroud)

并且user:

uid | name | university_id(f.k)
Run Code Online (Sandbox Code Playgroud)

如何在用户表中保留university_id NULL

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

INSERT INTO user (name, university_id) VALUES ($name, $university_id);
Run Code Online (Sandbox Code Playgroud)

这里$university_id可以从前端空.

university 桌子将由我设置为默认.

在前端,学生将根据university_id将要传递到user表格的大学名称进行选择,但如果学生没有选择任何大学名称,则应将空值传递给user表格中的university_id字段.

Joh*_*Woo 47

只允许university_id表的列user允许NULL值,以便您可以保存空值.

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)
)
Run Code Online (Sandbox Code Playgroud)

更新1

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

insert into user (name,university_id) values ('harjeet', NULL)
Run Code Online (Sandbox Code Playgroud)

更新2

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

作为一个旁注,查询是脆弱的SQL Injection,如果值(小号变量)从外面走了进来.请查看下面的文章,了解如何防止它.通过使用,PreparedStatements您可以摆脱使用值周围的单引号.