Pertanyaan mysql tidak dapat menyisipkan catatan dengan kunci utama unsigned menjadi nol


Saya mencoba memasukkan satu catatan ke dalam tabel dim_channel dengan nol untuk kunci primer (int unsigned).

Perintah Mysql:

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

Hasil:

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

Harap dicatat bahwa channel_id mendapat nilai 1, bukan 0 seperti yang saya harapkan.

Ada yang tahu mengapa ini terjadi.

By the way, saya dapat memperbarui catatan sebagai: perbarui dim_channel setel saluran_id = 0 di mana channel_id = 1;

Hanya ingin tahu mengapa saya tidak bisa memasukkan catatan dengan channel_id = 0 di tempat pertama.

Terima kasih banyak.

====== Perintah MySQL bagi Anda untuk menguji ====

-- Buat tabel

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

- masukkan catatan

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

- lihat hasilnya

select * from dim_channel;

8
2018-05-14 17:44


asal


Jawaban:


Itu karena Anda memiliki kunci primer peningkatan otomatis di bidang itu. Jika Anda menetapkan NULL atau 0 untuk itu nilai pada sisipan itu secara eksplisit akan memberi Anda nomor berikutnya dalam urutan untuk tabel.


6
2018-05-14 17:48



Saya tahu ini adalah posting lama tetapi bagaimanapun:

Menggunakan:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO';

sebelum memasukkan nilai 0 dalam Dimensi Anda.


31
2017-12-02 11:54