mysql无法插入带有无符号主键的记录为零

use*_*513 14 mysql insert

我试图在dim_channel表中插入一条记录,主键为零(unsigned int).

Mysql命令:

INSERT INTO dim_channel 
set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other';
Run Code Online (Sandbox Code Playgroud)

结果:

select * from dim_channel;
+------------+-------+-------------------+---------------------+
| channel_id | name  | parent_channel_id | parent_channel_name |
+------------+-------+-------------------+---------------------+
|          1 | Other |                 0 | Other               |
+------------+-------+-------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

请注意,channel_id得到的值为1,而不是我预期的0.

任何人都知道为什么会这样.

顺便说一下,我可以将记录更新为:update dim_channel set channel_id = 0其中channel_id = 1;

只是想知道为什么我不能在第一个地方插入带有channel_id = 0的记录.

非常感谢.

====== MySQL命令让你测试====

- 创建表格

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
Run Code Online (Sandbox Code Playgroud)

- 插入记录

INSERT INTO dim_channel set channel_id=0,name='Other',parent_channel_id=0,parent_channel_name='Other';
Run Code Online (Sandbox Code Playgroud)

- 看结果

select * from dim_channel;
Run Code Online (Sandbox Code Playgroud)

小智 43

我知道这是一个老帖子,但无论如何:

使用:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO';
Run Code Online (Sandbox Code Playgroud)

在Dimensions中插入0值之前.

  • 救命稻草!这实际上是正确的答案. (3认同)

Mik*_*ant 10

这是因为您在该字段上有一个自动增量主键.如果在插入时为其分配NULL0为该值,它将明确地为您提供表中序列的下一个数字.