Как передать значение 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
.
Ответы
Ответ 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.