4

我碰巧有两列与两个 SQL 保留字 Key 和 Value 同名。使用 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 回答 4

5

使用反引号来转义保留字。

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

看起来插入不支持别名。看这里


编辑:好的,MySQL ref 在插入中说没有别名


它确实有效

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)
于 2011-01-17T10:34:52.097 回答
1

根据你的问题很容易成为聪明人

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

其他问题

骆驼大小写毫无意义,因为windows还不支持区分大小写的文件名。

因此,您实际上可以在 linux/mac 中使用不同大小写的同一张表,但在 windows 上却不行

mysql> 创建表 abc (id int(10));
查询正常,0 行受影响(0.00 秒)

mysql> 创建表 abC (id int(10));
查询正常,0 行受影响(0.01 秒)
于 2011-01-17T11:48:47.283 回答
0

似乎您无法在 INSERT 语句中创建表别名

一些 SQL 产品(例如 SQL Server)确实允许这样做,但我不确定这是一件好事。

根据 SQL 标准,别名应该具有表被物化的效果,即别名表的INSERT(或任何其他形式的更新)应该使基础基表不受影响。

在 SQL Server 中,这种INSERT情况确实会影响底层基表,但我认为实际(不符合)效果是大多数 SQL 编码人员在这种情况下所期望的。换句话说,一个有效的 INSERT 语句导致没有添加任何行,我认为最初会被怀疑是一个错误,即使这是标准 SQL 应该工作的方式。

因此,我认为首先不允许出现这种情况,同时在技术上再次不符合标准,在我看来是可取的。

于 2011-05-05T07:54:26.030 回答
0

关键是一个

保留字

在Mysql中所以需要引用

您可以在此处查看所有保留字

于 2011-01-20T07:31:00.387 回答