2009年7月 6日

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

サン)奥野様

再現確認、および、バグ登録ありがとうございました。

とりあえずは、先日のメールにも書きましたが、load後に一旦、
MySQLを再起動することで対処します。

また、

>ちなみに、LOAD DATAの文法では、NULL値は「\N」と表記しなければいけませんので
>ご注意ください。この点も疑いましたが違ったようです。
ですが、ちゃんとマニュアル見ないといけませんね。。。
商用環境の移行時には、\Nでloadするようにいたします。

ご対応、ありがとうございました。

以上です。よろしくお願いいたします。

--------------------
Mon, 06 Jul 2009 16:12:32 +0900
>岡田様
>
>再現しました。バグのようです。最小のテストケースは以下のものです。
>
>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:26
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/86414
トラックバック
コメント
コメントする




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