我有两张桌子:
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
表。
答案 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
,我想为此插入空值。
必须检查复选框是否为外键插入空值。
答案 2 :(得分:1)
我正在使用MySQL InnoDB,甚至在FK列中允许NULL并使用NULL作为默认值我遇到了错误。 所以我使用了SET语法:
INSERT INTO (table) SET value1=X...
我只是没有设置FK列。