次のテーブルを作成してINSERTを行うと、見た目の構文が間違っていないのにエラーになる。
CREATE TABLE `test` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`row_number` int unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_bin;
mysql> INSERT INTO `bulk_point_accept`
-> (id, row_number)
-> VALUES
-> (1, 10);
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 'row_number) VALUES (1, 10)'
原因
row_numberがMySQLの予約言だったのが原因。
これになかなか気づかず、普通の構文エラーかと思って特定に時間が掛かった。
なので、row_number
ではなくline_number
などに名前を変えればINSERTが通るようになる。
MySQLの予約言についてはこちらを参照。
https://dev.mysql.com/doc/refman/8.0/ja/keywords.html