Подтвердить что ты не робот

Как передать значение 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 может быть пустым от переднего конца.

university таблица будет задана по ошибке.

В передней части студент будет выбирать имя университета, в соответствии с тем, что university_id перейдет в таблицу user, но если ученик не выберет ни одно университетское имя, тогда он должен передать значение null в user таблицу для поля university_id.

4b9b3361

Ответ 1

Просто разрешите столбцу 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)
)

ОБНОВЛЕНИЕ 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, если значение (значения) переменных было получено извне. Пожалуйста, ознакомьтесь с приведенной ниже статьей, чтобы узнать, как ее предотвратить. Используя PreparedStatements, вы можете избавиться от использования одинарных кавычек вокруг значений.

Ответ 2

Здесь предположим, что у меня есть внешний ключ user_id, и я хочу вставить для него нулевое значение.

enter image description here

Флажок должен быть проверен для вставки нулевого значения для внешнего ключа.

Ответ 3

Я использовал MySQL InnoDB и даже разрешаю NULL в столбце FK и используя NULL по умолчанию, я получал ошибку. Поэтому я использовал синтаксис SET:

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

И я просто не устанавливаю столбец FK.