当我尝试执行此代码时出现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
感谢您的帮助!
答案 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 //