将数据插入我的表“events”
时遇到小问题 +-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | longtext | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
从我看来old_data:
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| event | text | YES | | NULL | |
+-------+------+------+-----+---------+-------+
我想将来自视图old_data的字段“event”中的数据插入表“events”中的“name”字段来执行此操作我尝试使用命令:
insert into 'events' ('name') select 'event' from 'old_data'
insert into 'events' ('name') select 'event' from 'old_data' group by 'event';
等等每次都是语法错误。为什么?!
答案 0 :(得分:3)
您在标识符周围使用撇号分隔符是不正确的(它们用于分隔字符串)。尝试:
INSERT INTO events (name) SELECT event FROM old_data;
如果要在标识符周围使用分隔符,则应使用反引号(`
):
INSERT INTO `events` (`name`) SELECT `event` FROM `old_data`;
来自MySQL manual:
标识符引号字符是反引号(“
`
”):mysql> SELECT * FROM `select` WHERE `select`.id > 100;如果启用了
ANSI_QUOTES
SQL模式,也允许在双引号内引用标识符:mysql> CREATE TABLE "test" (col INT); ERROR 1064: You have an error in your SQL syntax... mysql> SET sql_mode='ANSI_QUOTES'; mysql> CREATE TABLE "test" (col INT); Query OK, 0 rows affected (0.00 sec)中的描述进行控制
ANSI_QUOTES
模式会导致服务器将双引号字符串解释为标识符。因此,启用此模式时,字符串文字必须包含在单引号内。它们不能用双引号括起来。服务器SQL模式按照Section 5.1.6, “Server SQL Modes”。如果引用标识符,标识符引号字符可以包含在标识符中。如果要包含在标识符中的字符与用于引用标识符本身的字符相同,则需要将该字符加倍。以下语句创建一个名为
a`b
的表,其中包含名为c"d
的列:mysql> CREATE TABLE `a``b` (`c"d` INT);在查询的选择列表中,可以使用标识符或字符串引号来指定带引号的列别名:
mysql> SELECT 1 AS `one`, 2 AS 'two'; +-----+-----+ | one | two | +-----+-----+ | 1 | 2 | +-----+-----+在语句的其他地方,引用别名的引用必须使用标识符引用,或者引用被视为字符串文字。