2013-05-14 10 views
7

Sto provando ad inserire un record nella tabella dim_channel con zero per la chiave primaria (int unsigned).mysql non può inserire record con chiave primaria non firmata pari a zero

comando di MySQL:

INSERT INTO dim_channel 
set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other'; 

Risultati:

select * from dim_channel; 
+------------+-------+-------------------+---------------------+ 
| channel_id | name | parent_channel_id | parent_channel_name | 
+------------+-------+-------------------+---------------------+ 
|   1 | Other |     0 | Other    | 
+------------+-------+-------------------+---------------------+ 

prega di notare che channel_id ha il valore 1, non 0 come mi aspettavo.

Nessuno sa perché questo accade.

A proposito, posso aggiornare il record come: aggiornamento dim_channel set channel_id = 0 dove channel_id = 1;

Voglio solo sapere perché non riesco a inserire il record con channel_id = 0 al primo posto.

Grazie mille.

====== comando MySQL per voi per testare ====

- Crea una tabella

CREATE TABLE `dim_channel` (
    `channel_id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` char(80) DEFAULT NULL, 
    `parent_channel_id` int(10) unsigned NOT NULL DEFAULT '0', 
    `parent_channel_name` varchar(80) DEFAULT NULL, 
    PRIMARY KEY (`channel_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

- inserire record di

INSERT INTO dim_channel set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other'; 

- vedi risultato

select * from dim_channel; 
+0

mysql presuppone che 0 significhi "dammi il prossimo ID" per le colonne auto_increment. Se davvero vuoi uno 0 a cui non appartiene, quindi usa un aggiornamento dopo l'inserimento. –

risposta

6

È perché si dispone di un auto-incrementa la chiave primaria su quel campo. Se assegni NULL o 0 per quel valore su insert, fornirà esplicitamente il numero successivo nella sequenza per la tabella.

+0

Grazie. Sembra che devo usare due comandi mysql per inserire questo record. – user1828513

+0

@ user1828513 Si noti che se si intende poter immettere '0' come valore per più record, non sarà possibile avere una chiave primaria o un indice univoco non null su questo campo. Certamente penserei al motivo per cui lo state facendo in primo luogo e pensate se l'impostazione di un valore del campo chiave primaria a incremento automatico su 0 sia davvero l'approccio migliore per rappresentare qualunque cosa si stia tentando di rappresentare nei dati. –

+0

@MikeBrant spero che non voglia inserire 0 in più righe, facendo così TOTALMENTE spezzerebbe il concetto di 'id' – Felype

25

So che questo è un vecchio post, ma in ogni caso:

Usa:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; 

prima di inserire il valore 0 nelle dimensioni.

+0

Lifesaver! Questa è in realtà la risposta corretta. –

Problemi correlati