2013-10-26 73 views
2

我正在为作业创建MySQL数据库,并在phpmyadmin中运行语法错误#1005。我认为这与外键有关,但如果w3schools是对的,我的语法应该是好的。SQL创建表主键和外键语法

这里是SQL语句;

create table if not exists customers 
(
    id int not null auto_increment, 
    cust_gname varchar(20) not null, 
    cust_fname varchar(30) not null, 
    cust_street varchar(30) not null, 
    cust_suburb varchar(30) not null, 
    cust_state varchar(6) not null, 
    cust_postcode varchar(4) not null, 
    cust_email varchar(50) not null, 
    cust_phone varchar(12), 
    cust_mobile varchar(12), 
    cust_user_id int, 
    foreign key (cust_user_id) references users(id), 
    primary key (id) 
); 

create table if not exists ingredients 
(
    id int, 
    name varchar(30) not null, 
    primary key (id) 
); 

create table if not exists recipes 
(
    id int, 
    name varchar(30) not null, 
    recipes_menu_id int, 
    foreign key (recipes_menu_id) references menus(id) 
    image varchar(30), 
    primary key (id) 
); 

create table if not exists ingredients_recipes 
(
    id int, 
    ingredients_recipes_ingredient_id int, 
    foreign key (ingredients_recipes_ingredient_id) references ingredients(id), 
    ingredients_recipes_recipe_id int, 
    foreign key (ingredients_recipes_recipe_id) references recipes(id), 
    primary key (id) 
); 

create table if not exists menus 
(
    id int, 
    description varchar(30) not null, 
    menus_restaurant_id int, 
    foreign key (menus_restaurant_id) references restaurants(id), 
    primary key (id) 
); 

create table if not exists restaurants 
(
    id int, 
    name varchar(30) not null, 
    address1 varchar(30) not null, 
    address 2 varchar(30), 
    suburb varchar(30) not null, 
    state varchar(10) not null, 
    postcode varchar(4) not null, 
    primary key (id) 
); 

create table if not exists customers_ingredients 
(
    id int, 
    customers_ingredients_customer_id int, 
    foreign key (customers_ingredients_customer_id) references customers(id), 
    customers_ingredients_ingredient_id int, 
    foreign key (customers_ingredients_ingredient_id) references ingredients(id), 
    primary key (id) 
); 

create table if not exists users 
(
    id int, 
    username varchar(40) not null, 
    password varchar(50) not null, 
    group_id int, 
    created DATETIME, 
    modified DATETIME, 
    primary key (id) 
); 

create table if not exists groups 
(
    id int, 
    name varchar(10) not null, 
    created DATETIME, 
    modified DATETIME, 
    primary key (id) 
); 
+0

“食谱”表不正确,缺少','... –

+3

w3schools不是学习SQL的好地方。他们的网站充满了错误。 DBMS手册是一个更好的地方来找到正确的语法 –

回答

3

如果您使用外键引用创建表,那么它引用的表必须已经存在。您正在脚本的开始处创建一个customers表,该表引用users表,该表只在接近结束时才创建。脚本中还有其他例子。

您需要按照正确的顺序创建表格,或者使用顶部的set foreign_key_checks = 0;来禁用此要求。一旦创建了所有表格,请确保您的set foreign_key_checks = 1结束。

注意:脚本中可能存在其他语法错误 - 我没有全部检查。

+0

辉煌,我不知道这一点。你会认为他们会在外键页面上的w3schools上提及... – pjmil