Пропускать строки при появлении предупреждения или ошибки в LOAD DATA INTOFILE в Mysql - PullRequest
1 голос
/ 03 октября 2019

Как пропустить вставку строки при возникновении ошибки или предупреждения при использовании команды LOAD DATA INFILE mysql?

Я создал таблицу с помощью приведенной ниже команды в mysql

CREATE TABLE `student` (
  `id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `dob` date NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  `timing` datetime NOT NULL DEFAULT '2018-04-09 16:36:43',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

У меня есть CSV-файл, как показано ниже

id,    name,    dob,        email,    timing
1,     giri,    2013-10-22, a@g.com,  asdljadf
2,     alex,    2012-08-30, a@f.com
abc,   yasir,   2013-10-22, b@c.com,  2012-08-30 12:47:04
def,   karan,   2012-08-30, c@d.com,  2012-08-30 12:47:04
LOAD DATA LOCAL INFILE '/home/giri/Desktop/student_201910031118.csv' IGNORE INTO TABLE giri.student FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY ''LINES TERMINATED BY '\n' IGNORE 1 ROWS;

После выполнения вышеупомянутой команды sql ниже приведено содержимое таблицы ученика,

id     name     dob         email      timing
0      yasir    2013-10-22   b@c.com   2012-08-30 12:47:04
1      giri     2013-10-22   a@g.com   [null]
2      alex     2012-08-30   a@f.com   [null]
  1. «синхронизация»Столбец первой строки, хотя он не имеет нулевого ограничения, он вставляется как нулевой с предупреждающим сообщением.
  2. 2-я строка столбца csv не имеет значения для столбца «хронометраж», но вставляется какnull вместо значения по умолчанию.
  3. 3-я строка имеет недопустимое значение для столбца "id", но mysql автоматически преобразует значение в "0" и вставляет строку с предупреждением.
  4. 4-я строка также имеетнедопустимое значение для столбца «id», так же как и выше, оно преобразует значение в «0», поскольку столбец «id» является первичным ключом, в котором отображается предупреждение в виде повторяющейся записи.

Ниже приведено предупреждениесообщение.

+---------+------+---------------------------------------------------------+
| Level   | Code | Message                                                 |
+---------+------+---------------------------------------------------------+
| Warning | 1265 | Data truncated for column 'timing' at row 1             |
| Warning | 1261 | Row 2 doesn't contain data for all columns              |
| Warning | 1366 | Incorrect integer value: 'abc' for column 'id' at row 3 |
| Warning | 1366 | Incorrect integer value: 'def' for column 'id' at row 4 |
| Warning | 1062 | Duplicate entry '0' for key 'PRIMARY'                   |
+---------+------+---------------------------------------------------------+

Мне нужно пропустить строку, когда произошла ошибка или предупреждение, как это сделать?

...