web-dev-qa-db-ja.com

null値を外部キーフィールドに渡す方法は?

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_iduserテーブルに渡すことに応じて、学生は大学名を選択しますが、学生が大学名を選択していない場合は、university_idフィールドのuserテーブルにnull値を渡す必要があります。

31
Harjeet Jadeja

テーブル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を使用すると、値を単一引用符で囲む必要がなくなります。

47
John Woo

ここで、外部キーuser_idがあり、そのためにnull値を挿入するとします。

enter image description here

外部キーにヌル値を挿入するには、チェックボックスをオンにする必要があります。

4
Devang Rathod

MySQL InnoDBを使用し、FKカラムでNULLを許可し、デフォルトとしてNULLを使用していても、エラーが発生していました。そこで、SET構文を使用しました。

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

そして、私はFK列を設定していません。

1
G_comp