J'ai 2 tables:
university
:
university_id(p.k) | university_name
et user
:
uid | name | university_id(f.k)
Comment conserver university_id
NULLdans la table utilisateur?
J'écris seulement 1 requête, ma requête est:
INSERT INTO user (name, university_id) VALUES ($name, $university_id);
Ici, $university_id
peut être nul du début à la fin.
La table university
sera définie par défaut par moi.
Au début, l’étudiant sélectionnera le nom de l’université, en fonction du fait que le university_id
passera à la table user
, mais si l’étudiant ne sélectionne aucun nom d’université, il doit passer null à la table user
pour le champ university_id
.
Autorisez simplement la colonne university_id
de la table user
à autoriser la valeur NULL
afin de pouvoir enregistrer 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)
)
UPDATE 1
en fonction de votre commentaire, vous devriez insérer NULL
et non ''
.
insert into user (name,university_id) values ('harjeet', NULL)
UPDATE 2
$university_id = !empty($university_id) ? "'$university_id'" : "NULL";
insert into user (name,university_id) values ('harjeet', $university_id);
Sidenote, la requête est vulnérable avec SQL Injection
si la valeur (s) des variables est venue de l'extérieur. S'il vous plaît jetez un oeil à l'article ci-dessous pour savoir comment en prévenir. En utilisant PreparedStatements
, vous pouvez vous passer de guillemets simples autour des valeurs.
Ici, supposons que j'ai la clé étrangère user_id
et que je veuille insérer une valeur nulle pour cela.
La case à cocher doit être cochée pour la valeur d'insertion null pour la clé étrangère.
J'utilisais MySQL InnoDB et même en autorisant NULL dans la colonne FK et en utilisant NULL comme valeur par défaut, je recevais une erreur . J'ai donc utilisé la syntaxe SET:
INSERT INTO (table) SET value1=X...
Et je ne définit tout simplement pas la colonne FK.