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
はフロントエンドからnullにできます。
university
テーブルはデフォルトで設定されます。
フロントエンドでは、university_id
がuser
テーブルに渡すことに応じて、学生は大学名を選択しますが、学生が大学名を選択していない場合は、university_id
フィールドのuser
テーブルにnull値を渡す必要があります。
テーブルuser
の列university_id
を許可して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
を使用すると、値を単一引用符で囲む必要がなくなります。
ここで、外部キーuser_id
があり、そのためにnull値を挿入するとします。
外部キーにヌル値を挿入するには、チェックボックスをオンにする必要があります。
MySQL InnoDBを使用し、FKカラムでNULLを許可し、デフォルトとしてNULLを使用していても、エラーが発生していました。そこで、SET構文を使用しました。
INSERT INTO (table) SET value1=X...
そして、私はFK列を設定していません。