2009年7月 6日

[mysql 14952] Re: auto_increment属性について

岡田様

再現しました。バグのようです。最小のテストケースは以下のものです。

shell> cat data.txt
\N
\N

mysql> create table inctest (inc_col bigint not null primary key auto_increment) engine innodb;
Query OK, 0 rows affected (0.07 sec)

mysql> load data infile 'data.txt' into table okatest;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Deleted: 0 Skipped: 0 Warnings: 0

mysql> show create table inctest\G
*************************** 1. row ***************************
Table: inctest
Create Table: CREATE TABLE `inctest` (
`inc_col` bigint(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`inc_col`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

2行挿入しただけなのにAUTO_INCREMENT=4になっています。

MyISAMでも試して見ましたが、MyISAMではAUTO_INCREMENTの値は正常なようです。

というわけでバグ登録しておきました。
http://bugs.mysql.com/45960

ちなみに、LOAD DATAの文法では、NULL値は「\N」と表記しなければいけませんので
ご注意ください。この点も疑いましたが違ったようです。

よろしくお願いします。
--
Mikiya Okuno, MySQL Support Engineer
Sun Microsystems KK, Tokyo, Japan
http://www-jp.mysql.com/

On 06/07/2009, at 3:20 PM, Takayuki Okada wrote:

> サン)奥野様
>
> 下記のDDL文でテーブルを作成しました。
>
> ---
> CREATE TABLE okatest (
> incremental_col BIGINT AUTO_INCREMENT NOT NULL
> ,system_id CHAR(4) BINARY NOT NULL
> ,terminal_id CHAR(12) BINARY NOT NULL
> ,file_id varchar(4) BINARY NOT NULL
> ,download_date timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
> ,PRIMARY KEY (
> incremental_col
> )
> )
> AUTO_INCREMENT = 0
> ,ENGINE = InnoDB;
>
> ---
> ■csvのフォーマット(サンプル)
> NULL,"0012","0180390 ","001","2009-03-07 10:06:36"
> NULL,"0012","0180390 ","002","2009-03-07 10:12:38"
> NULL,"0030","0014 ","0100","2009-03-07 10:25:01"
> :
> ---
> ■loadのコマンド
> load data infile "okatest.csv" into table okatest fields terminated by ',' enclosed by '"' escaped by '';
> ---
> ■バージョン(いまさらですが)
> OS:Solaris10
> MySQL:MySQL Community Server (GPL) 5.1.34
>
> 以上です。よろしくお願いいたします。
>
> --------------------
> Mon, 06 Jul 2009 14:27:10 +0900
>> 岡田様
>>
>> 返事が遅くなりすみません。
>>
>> 手元のマシンで試して見ましたが、特にAUTO_INCREMENTの値が
>> LOAD DATAによっておかしくなることはありませんでした。
>> 追加でテストしてみますのでテーブル定義を見せて頂けませんか?
>>
>> よろしくお願いします。
>> --
>> Mikiya Okuno, MySQL Support Engineer
>> Sun Microsystems KK, Tokyo, Japan
>> http://www-jp.mysql.com/
>>
>> On 02/07/2009, at 8:56 AM, Takayuki Okada wrote:
>>
>>> サン)奥野様
>>>
>>> ご返信ありがとうございます。
>>>
>>> load結果は、
>>> Records: 14087 Deleted: 0 Skipped: 0 Warnings: 0
>>> と表示されますので、また、CSVファイルの行数もこれに等しく、
>>> ロールバックはされていないものと思ってます。
>>>
>>> load後に一度、MySQLを再起動すれば、問題なく、
>>> 連番となってくれることは確認済みですので(*)、
>>> 移行手順にしちゃいえばいいんですけど、気になります。
>>>
>>> (*)loadで挿入後は、insertのみの運用を想定しています
>>>
>>> 以上です。よろしくお願いいたします。
>>>
>>> --------------------
>>> Wed, 01 Jul 2009 18:47:28 +0900
>>>> 岡田様
>>>>
>>>> 他に考えられる可能性としては、ロールバックによるものです。
>>>> AUTO_INCREMENTカウンタはロールバックが発生しても元には戻りません。
>>>> 例えば次のような処理をすると、AUTO_INCREMENTカウンタの値は増えてしまいます。
>>>>
>>>> mysql> BEGIN;
>>>> mysql> INSERT INTO tbl (cols) VALUES(vals);
>>>> :
>>>> mysql> ROLLBACK;
>>>>
>>>>
>>>> LOADの処理中にトランザクションがロールバックしたということはございませんでしょうか?
>>>>
>>>> --
>>>> Mikiya Okuno, MySQL Support Engineer
>>>> Sun Microsystems KK, Tokyo, Japan
>>>> http://www-jp.mysql.com/
>>>>
>>>> On 01/07/2009, at 6:05 PM, Takayuki Okada wrote:
>>>>
>>>>> サン)奥野様
>>>>>
>>>>> ご回答ありがとうございます。
>>>>>
>>>>> 手順ですが、1.の直前で、drop table⇒create table
>>>>> しております。
>>>>>
>>>>> 再度、前後で、show table status を実行したところ、
>>>>>
>>>>> load直前の Auto_increment の値は、1で、
>>>>> load直後は、16384 となっておりました。
>>>>>
>>>>> 以上です。よろしくお願いいたします。
>>>>>
>>>>>
>>>
>
>

投稿者 xml-rpc : 2009年7月 6日 16:12
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86413
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。