Ошибка
SQL запрос:INSERT INTO `wp_commentmeta` (`meta_id`, `comment_id`, `meta_key`, `meta_value`) VALUES
(1, 2, ‘rating’, ‘5’),
(2, 2, ‘verified’, ‘0’),
(3, 1, ‘_wp_trash_meta_status’, ‘1’),
(4, 1, ‘_wp_trash_meta_time’, ‘1464693386’),
(5, 3, ‘rating’, ‘1’),
(6, 3, ‘verified’, ‘0’)
Ответ MySQL: Документация
#1062 — Дублирующаяся запись ‘1’ по ключу ‘PRIMARY’
при загрузке в базу таблицы пробовали в zip тоже самое
Похожие вопросы
Паркуется домен при установке вп
Добрый день, подскажите почему паркуется домен при установке вордпреса на сайт? Мои действия:
1) создание бд, выставление прав к бд
2) установка вп
3) привязка домена
При переходе по ссылке, выдается страница парковки таймвеб
Подключение к базе данных через c#
Никто не сталкивался с проблемами подключения к базе данных msql на хостинге через c#?
Пробую, не получается!
буду очень рад любой вашей помощи!
Создать опрос на платформе timeweb
Подскажите, пожалуйста, можно ли создать опросник с вариантами ответов, чтобы данные были привязаны к нашему ящику на timeweb и сохранялись там же? Как в googleforms или survey monkey. Спасибо!
Ok I have a very simple mysql database but when i try to run this query via mysql-admin i get weird errors
INSERT INTO customreports (study,
type, mode, select, description)
VALUES (‘1’, ‘2’, ‘3’, ‘4’, ‘5’);
Error:
1064 — 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 ‘select, description) VALUES (‘1’, ‘2’, ‘3’, ‘4’, ‘5’)’ at line 1
JNK
63k15 gold badges121 silver badges138 bronze badges
asked May 26, 2009 at 20:10
You’re having problems because you’re using SQL reserved words as column names and not escaping them. Try like this:
INSERT INTO `customreports`
(`study`, `type`, `mode`, `select`, `description`)
VALUES
('1', '2', '3', '4', '5');
answered May 26, 2009 at 20:12
2
Yeah, I would rewrite as:
INSERT INTO [customreports] ([study], [type], [mode], [select], [description]) VALUES (‘1’, ‘2’, ‘3’, ‘4’, ‘5’);
answered May 26, 2009 at 20:14
alexalex
9435 silver badges7 bronze badges
just a guess, but is reserved word «select» (listed as a column name) causing a problem?
answered May 26, 2009 at 20:13
KM.KM.
101k34 gold badges178 silver badges212 bronze badges
2
«SELECT» is a reserved word in SQL… use a different word than «select»
answered May 26, 2009 at 20:13
JasonJason
51.4k37 gold badges133 silver badges185 bronze badges
The word ‘select’ is reserved in sql. The interpreter thinks you’re trying to use a SELECT statement inside the INSERT INTO statement. You need to enclose the field names so that the interpreter doesn’t read them as commands.
Update for MySQL:
insert into customreports ('study','type','mode','select','description') values...
answered May 26, 2009 at 20:14
Justin NiessnerJustin Niessner
241k40 gold badges407 silver badges536 bronze badges
Correct per Chaos… but the critical thing to remember is you should do your best to NOT use RESERVED words as column names in a table… such as SELECT and TYPE…. not positive of the other three, but that’s where your conflict is. Yes, by being explicit with quotes around the fields will tell the SQL you mean the field within, but its also best to know WHY its failing, and not just a work-around resolution… helps prevent similar issues in the future.
answered May 26, 2009 at 20:15
DRappDRapp
47.5k12 gold badges72 silver badges142 bronze badges
Ditto the above, but I believe you need double quotes around the column names, not single quotes. Perhaps some flavors of SQL will process the single quotes correctly, but I think the standard says double quotes for field names, single quotes for field values.
answered May 26, 2009 at 20:31
JayJay
26.8k10 gold badges60 silver badges112 bronze badges
1
DDim1000 3 / 3 / 0 Регистрация: 17.12.2011 Сообщений: 506 |
||||
1 |
||||
03.01.2017, 13:03. Показов 2204. Ответов 8 Метки нет (Все метки)
Подскажите пожалуйста, что ни так с синтаксисом?
0 |
Модератор 4206 / 3046 / 581 Регистрация: 21.01.2011 Сообщений: 13,190 |
|
03.01.2017, 13:21 |
2 |
‘;., Иванов, Иван, Иванович’ У тебя ругается на значение переменных, а ты показываешь их названия.
0 |
DDim1000 3 / 3 / 0 Регистрация: 17.12.2011 Сообщений: 506 |
||||
03.01.2017, 13:46 [ТС] |
3 |
|||
У тебя ругается на значение переменных, а ты показываешь их названия.
0 |
3 / 3 / 0 Регистрация: 17.12.2011 Сообщений: 506 |
|
03.01.2017, 14:06 [ТС] |
4 |
И так тоже ошибка… Почему?…….: Миниатюры
0 |
Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
03.01.2017, 14:39 |
5 |
DDim1000, почитайте про параметризированные запросы… а еще неплохо бы увидеть текст запроса со значениями… хотя есть некая уверенность, что не хватает кавычек для строк и дат… Подготавливаемые запросы
0 |
3 / 3 / 0 Регистрация: 17.12.2011 Сообщений: 506 |
|
03.01.2017, 15:20 [ТС] |
6 |
а еще неплохо бы увидеть текст запроса со значениями… хотя есть некая уверенность, что не хватает кавычек для строк и дат… Что за текст запроса? Где его брать?……
0 |
Lord_Voodoo Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
||||
03.01.2017, 17:21 |
7 |
|||
DDim1000,
вот этот запрос приводит к упомянутой выше ошибке?
0 |
DDim1000 3 / 3 / 0 Регистрация: 17.12.2011 Сообщений: 506 |
||||
03.01.2017, 17:42 [ТС] |
8 |
|||
Может кому то пригодиться…
1 |
Супер-модератор 8783 / 2536 / 144 Регистрация: 07.03.2007 Сообщений: 11,873 |
|
03.01.2017, 17:54 |
9 |
DDim1000, вы бы все-таки почитали за параметризированные запросы… ну и про особенности формирования запросов в зависимости от различных типов данных…
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
03.01.2017, 17:54 |
Помогаю со студенческими работами здесь Ошибка синтаксиса Вот сам код: Ошибка синтаксиса create table… Ошибка синтаксиса SELECT ‘For the city ‘, city, ‘, the highest rating is ‘, ", Ошибка синтаксиса в триггере UPDATE `journal` SET (`time_end` = NEW.`time_end`) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 9 |
SQL оператор INSERT используется для вставки записей в существующую таблицу.
Синтаксис этого оператора следующий:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... или INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ...
Создадим тестовую таблицу
Давайте создадим таблицу table1 со столбцами a, b, c в нашей MySQL базе данных:
CREATE TABLE `table1` ( `a` INT(11), `b` INT(11), `c` INT(11) );
Запрос на вставку строки
Простой запрос, который вставляет строку со столбцами 111, 222 и 333 выглядит так:
INSERT INTO table1 (a, b, c) VALUES (111, 222, 333);
Еще один способ сделать то же самое:
INSERT INTO table1 SET a=111, b=222, c=333;
Столбцы, которые вы не перечислите заполняются значениями по умолчанию, которые вы предусматриваете при создании таблицы, даже если это просто NULL.
У таблиц обычно есть поле id
с первичным ключом (PRIMARY KEY) таблицы. Если этому полю установлено значение AUTOINCREMENT т.е. оно заполняется автоматически, то в таком случае вы не должны его перечислять в списке столбцов оператора INSERT.
Вставка без перечисления столбцов
Если количество значений, которые мы вставляем = количеству столбцов в таблице, то можно не перечислять столбцы, и наш запрос может выглядеть так:
INSERT INTO table1 VALUES (111, 222, 333);
Этот способ крайне не рекомендуется. Дело в том, что со временем вы можете менять таблицы, например добавлять в них новые столбцы, а это значит, что все запросы записанные таким способом просто перестанут работать и вам придется менять их по всему вашему приложению.
Поэтому, навсегда забываем этот способ. Я его привел, только чтобы вы так не делали.
Если нам нужно вставить несколько строк, то мы просто перечисляем группы значений через запятую выглядит это так:
INSERT INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);
Таким образом мы вставили 3 строки в нашу таблицу table1. Их может быть и больше. В MySQL четкого предела нет, однако он все таки существует и зависит от параметра max_allowed_packet который ограничивает размер запроса. Если вы установите SET GLOBAL max_allowed_packet=524288000;
то размер запроса будет ограничен 500MB но делайте это в очень крайнем случае. Обычно всегда можно найти решение и разделить 1 большой запрос, на несколько более мелких и вставлять например не больше 1000 строк за один цикл.
Как вставить значение из другой таблицы INSERT INTO … SELECT …
Допустим у нас есть еще одна таблица table2
которая по структуре точно такая же как и первая. Нам в таблицу table2 нужно вставить все строки из table1.
Вставляем значения из table1 в таблицу table2:
INSERT INTO table2 (a, b, c) SELECT a, b, c FROM table1;
Вам следует позаботиться об уникальности ключей, если они есть в таблице, в которую мы вставляем. Например при дублировании PRIMARY KEY мы получим следующее сообщение об ошибке:
/* ERROR 1062 (23000): Duplicate entry '100' for key 'PRIMARY' */
Если вы делаете не какую-то единичную вставку при переносе данных, а где-то сохраните этот запрос, например в вашем PHP скрипте, то всегда перечисляйте столбцы.
Как не рекомендуется делать (без перечисления столбцов):
INSERT INTO table2 SELECT * FROM table1;
Если у вас со временем изменится количество столбцов в таблице, то запрос перестанет работать. При выполнении запроса MySQL в лучшем случае просто будет возвращать ошибку:
/* Ошибка SQL (1136): Column count doesn't match value count at row 1 */
Либо еще хуже: значения вставятся не в те столбцы.
Вставка из другой таблицы с условием INSERT INTO … SELECT … WHERE …
А теперь представим, что нам нужно вставить только те строки из table1, у которых столбец «c» равен 333. Тогда наш запрос будет выглядеть так
INSERT INTO table2 (a, b, c) SELECT a, b, c FROM table1 WHERE c = 333;
То есть мы просто вставляем данные в таблицу, которые выбрали из другой таблицы при помощи обычного SELECT запроса
Теперь представим, что у нас в таблице table2 — 4 столбца, а в table1 — 3. При этом четвертый столбец в table2 обязательный. Чтобы выйти из этой ситуации, нужно передать какое-нибудь подходящее значение в этот лишний столбец. У нас чисто абстрактная задача, поэтому давайте передадим туда просто единицу.
INSERT INTO table2 (a, b, c, d) SELECT a, b, c, 1 FROM table1 WHERE c = 333;
Теперь в столбец d у нас записалась единица и проблема решена.
Вставка в определенный раздел INSERT INTO … PARTITION …
Подробнее о разделах: https://dev.mysql.com/doc/refman/5.7/en/partitioning-overview.html
Если вам нужно вставить строки в определенный раздел таблицы, то нужно после таблицы указать PARTITION (название раздела), например так:
INSERT INTO table1 PARTITION (p1) VALUES(1, 2, 3);
Вставка в несколько разделов. Первая строка вставляется в раздел p1, а вторая в p2
INSERT INTO table1 PARTITION (p1, p2) VALUES(1, 2, 3), (4, 5, 6);
Больше примеров для работы с разделами: https://dev.mysql.com/doc/refman/5.6/en/partitioning-selection.html
Вставка строк, некоторые из которых уже существуют в целевой таблице
Существование строк определяется по значению уникальных ключей. В зависимости от ситуации мы можем выбрать разные способы поведения при совпадении значений уникальных столбцов.
Игнорирование INSERT IGNORE INTO
Например если мы вставляем строку с PK = 1, и при этом в таблице уже есть PK = 1 то MySQL выдаст ошибку:
/* ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' */
Выполнение запроса на этом прервется, однако нам в некоторых случаях хотелось бы просто вставить данные, игнорируя ошибки. В этом нам поможет INSERT IGNORE INTO:
INSERT IGNORE INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);
Просто добавляем IGNORE в наш запрос и ошибки будут игнорироваться
Вставка с заменой существующих значений REPLACE INTO
REPLACE работает также INSERT, но если совпадают уникальные ключи, то старая строка (или строки!) удаляется до вставки новой.
В таком случае наш пример выглядит следующим образом:
REPLACE INTO table1 (a, b, c) VALUES (1, 222, 333), (2, 555, 666), (3, 555, 333);
Обновление некоторых полей, при существовании строк ON DUPLICATE KEY UPDATE
При совпадении ключей, мы можем также заменить некоторые или все поля в строке.
Наш запрос будет выглядеть так:
INSERT INTO table1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=VALUES(c);
В данном примере если у нас какой-то уникальный ключ совпадает, то мы не производим вставку, а обновляем существующую строку или строки путем присваивания столбцу «c» значения, которое у нас перечислено в VALUES.
Иными словами, если ключ совпадает, то мы просто обновим данные столбца «с» а остальные столбцы трогать не будем.
Иногда нам нужно при совпадении ключей обновить все значения. Этом можно сделать просто перечислив все столбцы:
INSERT INTO table1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE a=VALUES(a), b=VALUES(b), c=VALUES(c);
При обновлении столбцов мы также можем использовать разные выражения, например:
INSERT INTO table1 (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Подробнее про ON DUPLICATE KEY UPDATE
Выражения для вставляемых значений в VALUES
При вставке значений, мы можем использовать выражения и даже использовать в своих выражениях значения других столбцов.
Пример использования выражений:
INSERT INTO table1 (a, b, c) VALUES (1, 222, 333 + a), (2, 555, 666 + b);
Таким образом мы для формирования столбца «c» использовали столбцы «a» и «b».
Приоритет вставки INSERT LOW_PRIORITY / HIGH_PRIORITY
Установление приоритета нужно для решение проблем с конкурентными вставками. При вставках происходит блокировка строк и если 2 INSERT запроса требуют блокировки одних и тех же строк, для своего выполнения, то иногда может потребоваться повысить или понизить приоритет некоторых запросов, по отношению к другим. Это можно сделать указав приоритет LOW_PRIORITY или HIGH_PRIORITY
Наш запрос будет выглядеть так для LOW_PRIORITY:
INSERT LOW_PRIORITY INTO table1 (a, b, c) VALUES(1, 2, 3);
HIGH_PRIORITY:
INSERT HIGH_PRIORITY INTO table1 (a, b, c) VALUES(1, 2, 3);
Нашли опечатку или ошибку? Выделите её и нажмите Ctrl+Enter
Помогла ли Вам эта статья?
#1 04.02.2010 14:43:43
- tjslash
- Участник
- Зарегистрирован: 04.02.2010
- Сообщений: 2
Ошибка INSERT INTO
Запрос вида:
INSERT INTO ‘products’ (cat, brends, divisions, article, name, quant, balls, price) VALUES (‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’)
Выдает ошибку:
#1064 — 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 »products’ (cat, brends, divisions, article, name, quant, balls, price) VALUES ‘ at line 1
Подскажите, поджалуйста, что я делаю не так?
Неактивен
#2 04.02.2010 14:45:10
- tjslash
- Участник
- Зарегистрирован: 04.02.2010
- Сообщений: 2
Re: Ошибка INSERT INTO
Спасибо, проблему решил)
INSERT INTO products (cat, brends, divisions, article, name, quant, balls, price) VALUES (‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’)
Неактивен
#3 04.02.2010 14:59:50
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Ошибка INSERT INTO
Если вам нужно заключить имя базы, таблицы или столбца в кавычки, то для этой цели используются обратные кавычки.
INSERT INTO `products` (cat, brends, divisions, article, name, quant, balls, price) VALUES (‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’, ‘1’)
Это бывает необходимо, если имя совпадает с ключевым словом или состоит из нескольких слов или включает в себя спец символы.
Неактивен