mysql 创建表的时候想用到保留关键字的做法

2015-04-29 23:57:04 +08:00
 jiaqidianbo

今天在用mysql创建一个新表的时候一直报错:
ERROR 1064 (42000): 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 'INOUT varchar(20))' at line 2

一开始以为是语句代码的问题,检查不出问题才想到可能用到数据库的保留关键字INOUT了,查了一下才知道.

我想问一下,如果非要用这个INOUT 应该怎么办呢?

3697 次点击
所在节点    问与答
8 条回复
sivacohan
2015-04-30 00:20:38 +08:00
推荐你看,MySQL必知必会。
这个问题可以通过加引号解决
raincious
2015-04-30 00:28:31 +08:00
PostgreSQL里可以用双引号(")包裹字段名来使用与关键字冲突的字段名,相信MySQL也应类似,只是似乎应该使用`符号(可不是引号啊:D)。
iyaozhen
2015-04-30 00:34:25 +08:00
字段前后加`(反撇键,不是引号)
yangqi
2015-04-30 00:38:36 +08:00
@raincious
@iyaozhen 这个和'`无关,INOUT是mysql保留字段,不能用作字段名称,目测无解,只能改名字加前缀或者后缀
raincious
2015-04-30 09:13:51 +08:00
@yangqi

你使用的版本?C9.io上的机器是5.5.40的,我做了如下测试:

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed

mysql> create table `INOUT` (`KEY` INT, `IN` INT, `OUT` INT);
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| INOUT |
+----------------+
1 row in set (0.00 sec)

mysql> show columns in `INOUT`;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| KEY | int(11) | YES | | NULL | |
| IN | int(11) | YES | | NULL | |
| OUT | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
yangqi
2015-04-30 09:50:25 +08:00
@raincious 字段名,不是表名。楼主的INOUT varchar(20)是字段名
raincious
2015-04-30 09:58:33 +08:00
@yangqi

你……发帖前自己做过测试么?

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed

mysql> create table `INOUT` (`INOUT` INT);
Query OK, 0 rows affected (0.02 sec)

mysql> show columns in `INOUT`;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| INOUT | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)
iyaozhen
2015-04-30 15:42:26 +08:00
@yangqi 字段名可以用保留字,我上次用的是date,查询时`date`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/187387

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX