SQL创建表语法

时间:2013-10-19 18:44:31

标签: mysql sql

我不明白这有什么问题:

CREATE TABLE 'posts' (
  'IdPost' int(11) NOT NULL AUTO_INCREMENT,
  'IdUser' int(11) NOT NULL,
  'name' varchar(45) CHARACTER SET latin1 NOT NULL,
  'title' varchar(100) CHARACTER SET latin1 NOT NULL,
  'type' tinyint(4) NOT NULL,
  'address' varchar(30) CHARACTER SET latin1 NOT NULL,
  'lat' varchar(10) NOT NULL,
  'lon' varchar(10) NOT NULL,
  'url' varchar(30) NOT NULL,
  PRIMARY KEY ('IdPost')
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

我在服务器上收到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''posts' ( 'IdPost' int(11) NOT NULL AUTO_INCREMENT, 'IdUser' int(11) NOT NUL' at line 1

有什么问题?

3 个答案:

答案 0 :(得分:2)

不要将表名或列名放在引号中。您必须使用reserved words的反引号,而不是此表的情况。

CREATE TABLE posts 
(
  IdPost int(11) NOT NULL AUTO_INCREMENT,
  IdUser int(11) NOT NULL,
  name varchar(45) CHARACTER SET latin1 NOT NULL,
  title varchar(100) CHARACTER SET latin1 NOT NULL,
  type tinyint(4) NOT NULL,
  address varchar(30) CHARACTER SET latin1 NOT NULL,
  lat varchar(10) NOT NULL,
  lon varchar(10) NOT NULL,
  url varchar(30) NOT NULL,
  PRIMARY KEY (IdPost)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

答案 1 :(得分:2)

请勿对表名使用引号。同时删除列名称中的所有引号。

<强> DEMO SQL FIDDLE

旁注: -

来自here: -

  

当标识符是SQL保留字或时,引用很有用   包含空格或其他特殊字符。引用标识符   也可以使它完全是数字的,不是不引用的   身份标识。在引用中包含标识符引号字符   标识符,加倍。

答案 2 :(得分:0)

这可以是另一种选择:

CREATE TABLE `posts` (
`IdPost` int(11) NOT NULL AUTO_INCREMENT,
`IdUser` int(11) NOT NULL,
`name` varchar(45) CHARACTER SET latin1 NOT NULL,
`title` varchar(100) CHARACTER SET latin1 NOT NULL,
`type` tinyint(4) NOT NULL,
`address` varchar(30) CHARACTER SET latin1 NOT NULL,
`lat` varchar(10) NOT NULL,
`lon` varchar(10) NOT NULL,
`url` varchar(30) NOT NULL,
 PRIMARY KEY (`IdPost`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

我建议使用back tilts代替quotes