16

我正在尝试将一条记录插入到 dim_channel 表中,主键为零(无符号整数)。

mysql命令:

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

结果:

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

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

任何人都知道为什么会发生这种情况。

顺便说一句,我可以将记录更新为: update dim_channel set channel_id=0 where 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

-- 插入记录

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

-- 查看结果

select * from dim_channel;
4

2 回答 2

52

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

采用:

SET sql_mode='NO_AUTO_VALUE_ON_ZERO';

在您的维度中插入 0 值之前。

于 2013-12-02T11:54:48.993 回答
11

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

于 2013-05-14T17:48:20.427 回答