it-swarm.com.de

wie kann ich einem Fremdschlüsselfeld einen Nullwert übergeben?

Ich habe 2 Tische:

university:

university_id(p.k) | university_name

und user:

uid | name | university_id(f.k)

Wie kann university_idNULLin der Benutzertabelle bleiben?

Ich schreibe nur eine Abfrage, meine Abfrage lautet:

INSERT INTO user (name, university_id) VALUES ($name, $university_id);

Hier kann $university_id vom Frontend aus null sein.

university table wird von mir standardmäßig gesetzt. 

Im Frontend wählt der Student den Namen der Universität aus. Danach wird university_id an user-Tabelle übergeben. Wenn der Student jedoch keinen Universitätsnamen auswählt, sollte der Wert user für das university_id-Feld einen Nullwert übergeben. 

28
Harjeet Jadeja

Erlauben Sie der Spalte university_id der Tabelle user nur den NULL-Wert, damit Sie nulls speichern können.

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

basierend auf Ihrem Kommentar sollten Sie NULL und nicht '' einfügen.

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);

Als Nebenbemerkung ist die Abfrage mit SQL Injection anfällig, wenn der Wert (s) der Variablen von außen stammt. Bitte lesen Sie den Artikel unten, um zu erfahren, wie Sie dies verhindern können. Mit PreparedStatements können Sie die Verwendung von einfachen Anführungszeichen um Werte beseitigen.

44
John Woo

Angenommen, ich habe einen Fremdschlüssel user_id und ich möchte einen Nullwert dafür einfügen.

enter image description here

Das Kontrollkästchen muss aktiviert sein, um einen Nullwert für den Fremdschlüssel einzufügen.

4
Devang Rathod

Ich benutzte MySQL InnoDB und erlaubte sogar NULL in der FK-Spalte und verwendete NULL als Standard. Ich erhielt eine Fehlermeldung ..__ Also verwendete ich die SET-Syntax:

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

Und ich setze die FK-Säule einfach nicht ein.

1
G_comp