MySQL INSERT с псевдонимом таблицы - PullRequest
2 голосов
/ 17 января 2011

У меня два столбца с тем же именем, что и два зарезервированных слова SQL: ключ и значение. При использовании инструкции SELECT я могу создать псевдоним таблицы и решить его таким образом.

Теперь я пытаюсь вставить данные, и кажется, что вы не можете создать псевдоним таблицы в операторе INSERT.

INSERT INTO attributeStrings ats
(ats.ItemID,ats.Key,ats.Value)
VALUES (3,'Categories','TechGUI')

Я получаю ошибку на 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')', указывающую, что псевдоним не может быть создан.

Есть ли способы решить эту проблему без переименования столбцов Ключ и Значение?

Ответы [ 4 ]

4 голосов
/ 17 января 2011

Используйте обратную галочку для экранирования зарезервированных слов.

  INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI')

Похоже, вставка не поддерживает псевдоним. см. Здесь


Редактировать: хорошо, ссылка MySQL говорит, что псевдоним во вставке


Это работает

mysql> INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI');
Query OK, 1 row affected (0.03 sec)

mysql> select * from attributeStrings;
+--------+------------+---------+
| ItemId | Key        | Value   |
+--------+------------+---------+
|      3 | Categories | TechGUI |
+--------+------------+---------+
1 row in set (0.00 sec)
1 голос
/ 17 января 2011

Легко быть мудрым парнем , основываясь на вашем вопросе

INSERT INTO attributeStrings
VALUES (3,'Categories','TechGUI');
/* if the table have more than 3 columns, fill-up every column then */

Другие проблемы

Бессмысленно иметь camelCase, потому что windows пока не поддерживает имя файла с учетом регистра.

Таким образом, у вас практически может быть одна и та же таблица в другом регистре в linux / mac, но не в windows

mysql> create table abc (id int(10));
Query OK, 0 rows affected (0.00 sec)

mysql> create table abC (id int(10));
Query OK, 0 rows affected (0.01 sec)
0 голосов
/ 05 мая 2011

кажется, что вы не можете создать псевдоним таблицы в операторе INSERT

Некоторые продукты SQL (например, SQL Server) допускают это, но я не уверен, что это хорошо,

В соответствии со стандартами SQL, псевдоним должен иметь эффект материализации таблицы, т. Е. INSERT (или любой другой вариант обновления) для таблицы с псевдонимом должен оставлять базовые базовые таблицы неизменными.

В SQL Server такое INSERT действительно влияет на базовые базовые таблицы, но я думаю, что фактический (несовместимый) эффект - это то, что большинство кодировщиков SQL ожидают в этой ситуации.Иными словами, действительный оператор INSERT, который не привел к добавлению строк, я думаю, изначально будет восприниматься как ошибка, даже если именно так должен работать Standard SQL.

Поэтому я считаю, что запретить ситуацию нельзя.возникновение, во-первых, в то же время, будучи технически несовместимым со стандартами, желательно, на мой взгляд.

0 голосов
/ 20 января 2011

Ключ

Зарезервированное слово

В Mysql, поэтому его нужно процитировать

Вы можете проверить все зарезервированные слова здесь

...