在我的数据库中创建这个表时,我一直遇到问题。问题是:
错误:1215无法添加外键约束。
这是我要做的桌子:
创建表客户( customer_reference int UNIQUE AUTO_INCREMENT,主键(customer_reference),forename VARCHAR(20),姓氏VARCHAR(20),联系人VARCHAR(15),电子邮件VARCHAR(50),建筑物VARCHAR(5),公路VARCHAR(40),城市VARCHAR(30),邮政编码VARCHAR(7),县VARCHAR(30));
创建表发票( invoice_reference int唯一AUTO_INCREMENT,customer_reference int唯一,主键(invoice_reference),外键(customer_reference)引用客户(Customer_reference),invoice_cost十进制(20,2),支付位,order_date日期时间,delivery_date日期);
创建表库存(容器VARCHAR(10)唯一的非空默认值0,主键(容器),SBADNLon INT(4),SBADNFel INT(4),SBADNSou INT(4),CHECK (容器=“SBADNLon”> 0,“SBADNFel”> 0,“SBADNSou”>0));/* --这只是显示了每个属性可能包含的容器变量的3个值,其中包含了清单*/ /中可用的模型数量。
创建表Items_Purchased ( container_ordered VARCHAR(10) NOT NULL,invoice_reference int,容器VARCHAR(10)非空默认值"None",container_cost十进制(20,2) NULL,container_size VARCHAR(6) NOT NULL,彩色VARCHAR(5) NULL,档次CHAR(1) NULL,仓库VARCHAR(15) NULL,container_type VARCHAR(20) NULL,条件VARCHAR(4) NULL,主键(container_ordered,container_size,颜色,等级,depot,container_type,conditionn),外键(invoice_reference)引用发票(invoice_reference)、外键(容器)引用库存(容器)、外键( Container_Size )引用Container_Size (container_size)、外键(颜色)引用颜色(颜色)、外键(级别)引用(等级)、外键(仓库)引用仓库(仓库)、外键( Container_Type )引用Container_Type (container_type)、外键(Container_type)引用条件(条件);
创建表库(仓库VARCHAR(15) NOT NULL,container_ordered VARCHAR(10) NOT NULL,主键(仓库),外键(container_ordered)引用Items_Purchased(container_ordered),CHECK (仓库=“伦敦”,"felixstowe",“southampton”));
创建表container_type (container_type VARCHAR(20) NOT NULL、container_ordered VARCHAR(10) NOT
创建表Container_Size (container_size VARCHAR(6) NULL,container_ordered VARCHAR(10) NOT NULL,container_ordered VARCHAR(10) NOT NULL,container_ordered
创建表颜色(颜色VARCHAR(5) NULL,container_ordered VARCHAR(10) NULL,主键(颜色),外键(container_ordered)引用Items_Purchased(container_ordered),CHECK (CHECK=(“黑色”,“绿色”);
创建表条件n (conditionn (4) NOT NULL,container_ordered VARCHAR(10) NOT NULL,主键(条件),外键(container_ordered)引用Items_Purchased(container_ordered),CHECK (条件n= ("new",“used”);
创建表级别(等级CHAR(1) NULL,container_ordered VARCHAR(10) NULL,主键( CREATE ),外键(container_ordered)引用Items_Purchased(container_ordered),校验(CREATE= ("a","b",“c”);
提前感谢
发布于 2018-04-02 13:19:34
首先,我认为最好为您的桌子使用另一个主键。
所有外键约束的数据类型应该与原始表中将字段定义为主键的方式完全相同。例如,如果容器是Stock表中的varchar(20),那么它必须是Items_Purchased表中的varchar(20)。
此外,定义的排序规则(如果有的话)将是相同的,类似于这些列的utf-8。请注意,您的表可能位于相同的排序规则中,但列可能有不同,请正确检查。
最后,确保外键值的值是唯一的,并且外键列的定义包括not null
。
发布于 2018-04-02 13:48:57
以下2条规则可能导致错误:
invoice_reference int UNIQUE auto_increment
foreign key (invoice_reference) references Invoice (invoice_reference)
auto_increment属性应该在发票表(invoice_reference)中指定。
发布于 2018-04-06 11:33:21
我尝试使用ALTER命令分别插入每个外键定义,它很好地解决了--也许是某种形式的引用问题?
https://stackoverflow.com/questions/49611946
复制相似问题