34

我有 2 张桌子:

university

university_id(p.k) | university_name

user

uid | name | university_id(f.k)

如何在用户表中保留university_id NULL ?

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

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

这里$university_id可以从前端为空。

university表将由我默认设置。

在前端,学生将选择大学名称,据此university_id将传递到user表中,但如果学生没有选择任何大学名称,则应将空值传递给useruniversity_id字段。

4

3 回答 3

53

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

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);

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

于 2013-02-26T06:38:59.467 回答
4

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

在此处输入图像描述

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

于 2013-02-26T06:47:28.337 回答
1

我使用的是 MySQL InnoDB,甚至允许在 FK 列中使用 NULL,并且默认使用 NULL,但我遇到了错误。所以我使用了 SET 语法:

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

而且我只是不设置 FK 列。

于 2015-09-20T01:02:03.083 回答