16

主キー (unsigned int) をゼロにして、dim_channel テーブルに 1 つのレコードを挿入しようとしています。

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 の値が 0 ではなく 1 になっていることに注意してください。

なぜこれが起こるのか誰でも知っています。

ちなみに、レコードは次のように更新できます。 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

これは、そのフィールドに自動インクリメントの主キーがあるためです。NULL挿入時にその値にorを割り当てる0と、テーブルのシーケンスの次の番号が明示的に与えられます。

于 2013-05-14T17:48:20.427 に答える