CREATE TABLE的SQL语法错误

时间:2015-06-05 10:51:38

标签: java mysql sql jdbc

当我尝试执行此代码时出现SQL Sytax错误:

CREATE TABLE ? (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`UUID` VARCHAR(36) NOT NULL
);

我用PreparedStatement代替?用字符串

错误讯息:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an errorin your SQL syntax; check the manual that corresponds to your MySQL serverversion for the right syntax to use near ''95f7ed55-ab3d-46f9-bffe-72bf5780a1ec' (ID INT(255) UNSIGNED AUTO_INCREMENT PRIM' at line 1

感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

将表名放入反引号中,它包含必须转义的-

您使用单引号('),这在SQL中很糟糕。

答案 1 :(得分:1)

不使用引号时不允许使用符号( - )字符。 http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

  

标识符可以引用或不引用。如果标识符包含   特殊字符或是保留字,必须随时引用   你指的是它。 (例外:在一段时间后的保留字   限定名称必须是标识符,因此不需要引用。)

现在执行:

CREATE TABLE 95f7ed55-ab3d-46f9-bffe-72bf5780a1ec (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`UUID` VARCHAR(36) NOT NULL
);

但需要引用第一行的标识符:

CREATE TABLE `95f7ed55-ab3d-46f9-bffe-72bf5780a1ec` (

也许这样的事情可以解决问题? (编辑:在Anil Kumar的回答中添加“IF NOT EXISTS”)

CREATE TABLE IF NOT EXISTS `?` (
ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`UUID` VARCHAR(36) NOT NULL
);

答案 2 :(得分:1)

请尝试以下查询语法:

CREATE TABLE table_name (ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,UUID VARCHAR(36) NOT NULL);

答案 3 :(得分:0)

pls try this code.

        CREATE TABLE `table_name`(
       `ID` INT( 255 ) UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
       `UUID` VARCHAR( 36 ) NOT NULL
        );

注意:table_name使用此符号。

答案 4 :(得分:0)

-- DROP PROCEDURE IF EXISTS createTblDynamically;
DELIMITER //
CREATE PROCEDURE createTblDynamically(tblName VARCHAR(255))
BEGIN
    SET @tableName = tblName;
    SET @q = CONCAT('
        CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
            ID INT(255) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`UUID` VARCHAR(36) NOT NULL
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    ');
    PREPARE stmt FROM @q;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

END //