アプリ版:「スタンプのみでお礼する」機能のリリースについて

mailのテーブルは下記の様に定義をしています。
1. mail text
2. id int

この状態でload data infileで、idに連番を付加したいのですが。
出来る方法は無いのでしょうか。

質問者からの補足コメント

  • うーん・・・

    済みません、さっきのはカラムを指定していませんでした。今回再度カ
    ラムを指定してやりましたが今度は別のエラーが出ました。

    ERROR 1064 (42000): You have an error in your SQL
    syntax; check the manual that corresponds to your MySQL server
    version for the right syntax to use near 'lines terminated by
    '\r\n'' at line 1

    下記を投入しました。
    load data infile ... into table mail(mail);

    これは、mailがテーブルとフィールドの名前でぶつかっているのが原因
    でしょうか。

    宜しくお願いします。

      補足日時:2016/01/14 12:09
  • うーん・・・

    load data infileでは、入力のデータが先頭にタブがあると読んでくれません。これは、データの型に問題があるのでしょうか。

    先頭がタブであってもそれ以降にはきちんとデータはあります。そのデータを読んではくれません。何が問題なのでしょうか。

    追加で申し訳ありませんが。宜しくお願いします。

      補足日時:2016/01/14 14:23

A 回答 (5件)

>先頭がタブであっても



先頭と末尾にダブルクォーテーションは付けてますか?
またタブがないというのは何で確認しているのしょうか?
見えていないだけであるのかもしれません。
    • good
    • 0
この回答へのお礼

有難う御座います。

auto_incrementの値のセットは上手く行きました。また、タブの件に付
いては通常は有り得ないパターンをセットして正常になりました。例え
ば、fields terminated by '|||'の様にセットして良くなりました。

これで終わります。有難う御座いました。

お礼日時:2016/01/14 15:21

>この値を最初の1から始まる様に値をセットし直すと言う事は出来るの


>でしょうか。あるいは、自分でそれなりの変数をセットするしか方法は

auto_incrementを指定したカラムの初期値は1です
運用によってauto_incrementのカウンタがずれてしまった場合は
初期値を再指示してやればよいです

alter table テーブル auto_increment=1;

なお抜け番ができてしまったときにそれを詰めるような処理は
できないことはないですが、やめた方がいいです
オススメしないSQL
update hoge set id=(select @count:=@count+1 from (select @count:=0) as dummy) order by id;
    • good
    • 0

あ、ごめんなさい、例示したlinesの位置が変



load data infile 'mail.txt' into table mail
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
lines terminated by '\r\n' (mail);
    • good
    • 0
この回答へのお礼

有難う御座います。

正常に動きました。後一つ質問をしたいのですが。と言うのは、これは
mailのテーブルのデータを全削除して新たにload data infileを実行し
た場合は、auto_incrementの値は直前の値から連番をすると思います。

この値を最初の1から始まる様に値をセットし直すと言う事は出来るの
でしょうか。あるいは、自分でそれなりの変数をセットするしか方法は
無いのでしょうか。

済みません。宜しくお願いします。

お礼日時:2016/01/14 13:41

>ERROR 1261 (01000) at line 2: Row 1 doesn't contain data for all columns



いや、だから「カラムを指定してLoad」するように書きましたよね?
同じ環境はつくれないのでなんとも言えませんが

load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\mail.txt' into table mail lines terminated by '\r\n' (mail);

のようにカラム名を最後に付けるとよいでしょう。
とりえあえずテーブル名とカラム名に同じmailを指定しているのでエラーメッセージの
可読性がわるいとおもいます。
もしエラー対応に自信がないなら、DB名、テーブル名、カラム名などは別名をつけるよう
心がけるとよいかと

また、今回のmail.txtが複数行をまとめて1つのメールとして管理したのであれば
//mail.txt

"テストデータ・・・・
テストデータ・・・・
テストデータ・・・・"
"テストデータ・・・・
テストデータ・・・・
テストデータ・・・・"
"テストデータ・・・・
テストデータ・・・・
テストデータ・・・・"
のようにダブルクォーテーションでくくって

load data infile 'mail.txt' into table mail lines
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
terminated by '\r\n' (mail);

的な、クォーテーション内の改行でデータがわかれないようにしないといけないでしょう
    • good
    • 0

たとえばidにuniqueのnot nullでautoincrementの設定をしてあれば


カラムを指定してloadすればidは連番(のように感じ)になる
厳密にいえば「連番」は難しい、オートインクリメントは連番を作る仕組みではなく
ユニークな数字を設定するものだから、任意に抜け番が発生する

LOAD DATA INFILE 'test.csv' INTO TABLE テーブル(mail)

ただし、textのデータをcsvで流し込むということは複数行を想定している?
場合によってはトラブルのもとかも・・・
    • good
    • 0
この回答へのお礼

有難う御座います。
入力を下記の様に定義しました。
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| mail | text | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+---------+------+-----+---------+----------------+

ここで、
load data infile 'C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Uploads\\mail.txt' into table mail lines terminated by '\r\n'
をした所、下記のエラーが出ます。
ERROR 1261 (01000) at line 2: Row 1 doesn't contain data for all columns

このエラーは、入力にデータが無いと言う事でしょうか。最初から、入
力としてidを用意をしないといけないのでしょうか。

と言う事はload data infileでは連番を作れないと言う事でしょうか。
益々分からなくなって来ました。

テーブル定義に問題があるのでしょうか。宜しくお願いします。

お礼日時:2016/01/14 11:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す