我正在尝试使用Java JDBC在MySql中创建2个表,第一个运行正常,但是当我执行第二个create table命令时出现错误。外键定义中的问题看起来不确定缺少什么?
错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
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 'FOREIGN KEY(UniqueBusID)
REFERENCES BUS_3_CLEARBROOK_UFV_GOLINE_TO_UFV_BusDetai' at line 1
代码
String table_UniqueBusNameTimings = BusDetails+"_BusTimings";
String timings= "Timings";
String dayofweek = "DayOfWeek";
String FuniqueBusID = "UniqueBusID";
String table_UniqueBusNameDetails = BusDetails+"_BusDetails";
String PuniqueBusID = "UniqueBusID";
String StopNames = "StopNames" ;
String sql1 = "CREATE TABLE "+table_UniqueBusNameDetails+
"(UniqueBusID VARCHAR(255) not NULL, " +
" StopNames VARCHAR(1000), " +
" PRIMARY KEY ( UniqueBusID ))";
String sql2 = "CREATE TABLE "+table_UniqueBusNameTimings+
"(Timings VARCHAR(255) , " +
" DayOfWeek VARCHAR(25), " +
" UniqueBusID VARCHAR(255) "+
" FOREIGN KEY(UniqueBusID) REFERENCES "+table_UniqueBusNameDetails+"(UniqueBusID))";
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
答案 0 :(得分:1)
UniqueBusID VARCHAR(255)
后您的逗号丢失了。只需将其更改为UniqueBusID VARCHAR(255),
,您的代码即可。
有关与FOREIGN KEY的CREATE TABLE相关的语法的详细信息,您可以浏览此页面:http://www.w3schools.com/sql/sql_foreignkey.asp
答案 1 :(得分:1)
我们应该使用CREATE TABLE IF NOT EXISTS...
然后如果我们有外键关系那么我们应该使用SET FOREIGN_KEY_CHECKS=0;
最后我们将执行具有所有语句然后提交的批处理。
答案 2 :(得分:1)
列,索引,外键等每个属性都应该在表创建语法中用逗号','分隔。所以这里在UniqueBusID VARCHAR(255)之后缺少一个逗号。在这里添加逗号后会很好。
@Suzon:我们不应该在创建表时特别设置foreign_key_checks = 0或在其中添加任何约束将跳过mysql的任何约束检查并在数据库中创建主要问题。我们可以使用它只有我们确定它的影响,例如我们想要从主表中删除一些行,即使子表包含相应的行,我们也可以使用它等。