web-dev-qa-db-fra.com

comment passer une valeur nulle à un champion de clé étrangère?

J'ai 2 tables:

university:

university_id(p.k) | university_name

et user:

uid | name | university_id(f.k)

Comment conserver university_idNULLdans 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

28
Harjeet Jadeja

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.

44
John Woo

Ici, supposons que j'ai la clé étrangère user_id et que je veuille insérer une valeur nulle pour cela.

enter image description here

La case à cocher doit être cochée pour la valeur d'insertion null pour la clé étrangère.

4
Devang Rathod

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.

1
G_comp