2013-02-26 19 views
24

Ho 2 tabelle:come passare un valore nullo in un campo chiave esterna?

university:

university_id(p.k) | university_name 

e user:

uid | name | university_id(f.k) 

come mantenere university_idNULL nella tabella degli utenti?

Sto Scrivendo solo 1 domanda, la mia domanda è:

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

Qui $university_id può essere nulla da front-end.

university tabella verrà impostato da default da me.

Alla estremità anteriore, studente selezionerà il nome universitaria, secondo che il university_id passerà a user tavolo, ma se studente non sta selezionando un nome università è allora dovrebbe passare valore nullo al tavolo user per university_id campo.

+0

è possibile modificare il campo del database e consentire l'inserimento del valore nullo. –

+0

Dire che un campo è una [chiave esterna] (http://www.w3schools.com/sql/sql_foreignkey.asp) significa che è vincolato ad abbinare una chiave primaria nella tabella specificata. Quindi non può essere Nullo in quel caso (poiché la corrispondenza non ha senso con i valori Null). Forse dovresti eseguire il backup e spiegare lo scopo della tua domanda. – hardmath

+1

@hardmath * .. Quindi non può essere Null in quel caso (poiché la corrispondenza non ha senso con i valori Null) .. * - questo non è sempre vero. Le chiavi esterne possono essere annullabili. –

risposta

35

Proprio permettono colonna university_id del tavolo user per consentire NULL valore in modo è possibile salvare i valori nulli .

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

, sulla base di commento, si dovrebbe essere l'inserimento NULL e 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); 

Come sidenote, la query è vulnerabile con SQL Injection se il valore (s ) delle variabili è venuto dall'esterno. Si prega di dare un'occhiata all'articolo qui sotto per imparare come prevenirlo. Utilizzando PreparedStatements è possibile eliminare le virgolette singole attorno ai valori.

+0

ho permesso il valore nullo ma quando sto scrivendo questa domanda il suo errore di visualizzazione: 'inserisci nei valori dell'utente (nome, università_id) ('harjeet', '')' –

+0

Vedere il mio commento sulla domanda. Un valore Null non può soddisfare il vincolo di chiave esterna. – hardmath

+1

no, una stringa vuota non è la stessa cosa con null come stringa vuota ha valore ma è vuota mentre null non contiene nulla. dovresti specificarlo come 'NULL' ad esempio,' inserisci nei valori utente (name, university_id) ('harjeet', NULL) ' –

4

Qui Supponiamo che io sono straniero chiave user_id e voglio inserire valore nullo per questo.

enter image description here

Casella deve verificare l'inserto valore nullo per chiave esterna.

+0

Non è chiaro quale sia il software, la risposta è specifica per un particolare software client MySQL (gestione del database) e non generico per il database stesso. – ADTC

+0

Questo è phpMyAdmin. –

1

Stavo usando MySQL InnoDB e persino consentendo il NULL nella colonna FK e l'utilizzo di NULL come impostazione predefinita, ricevevo un errore. così ho usato la sintassi SET:

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

E io non impostare la colonna FK.

Problemi correlati