首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法创建表“外键约束格式不正确”SQL

无法创建表“外键约束格式不正确”SQL
EN

Stack Overflow用户
提问于 2016-04-10 15:01:13
回答 3查看 2.6K关注 0票数 1

我刚开始使用SQL,我的SQL代码有点问题。我一直在寻找关于这种错误的很多答案,但我找不到适合我的问题的答案。下面是代码示例。

代码语言:javascript
复制
CREATE DATABASE IF NOT EXISTS `PracticaER`;
USE `PracticaER`;

DROP TABLE IF EXISTS Banco;
DROP TABLE IF EXISTS Cuenta;
DROP TABLE IF EXISTS Usuario;

CREATE TABLE Usuario (
id_usuario INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(10) NOT NULL,
DNI VARCHAR(9) NOT NULL UNIQUE,
usuario VARCHAR(10) NOT NULL,
Contrasena VARCHAR(15) NOT NULL,
PRIMARY KEY (id_usuario)
);

CREATE TABLE Cuenta (
CIF_Banco VARCHAR(20) NOT NULL,
num_cuenta INT NOT NULL,
balance FLOAT NOT NULL DEFAULT 0.0,
fecha_apertura VARCHAR(20) NOT NULL,
DNI VARCHAR(9) NOT NULL,
PRIMARY KEY (num_cuenta),
FOREIGN KEY (DNI) REFERENCES Usuario(DNI)
);

CREATE TABLE Banco (
CIF VARCHAR(20) NOT NULL,
nombre VARCHAR(9) NOT NULL,
cod_oficial INT NOT NULL,
pais VARCHAR(15) NOT NULL,
PRIMARY KEY (CIF),
FOREIGN KEY (CIF) REFERENCES Cuenta(CIF_Banco)
);

当我执行MySQL时,这就是错误。基本上它不能创建"Banco“表。

错误代码: 1005。无法创建表practicaer.banco (errno: 150“外键约束格式不正确”)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-10 15:31:31

您正在尝试引用Cuenta表中不唯一的列或该表的主键。如果将索引添加到表中的列(如Giorgos Betsos的答案中),MySQL允许这样做,但建议不要这样做:

此外,由于性能原因,MySQL要求对引用的列进行索引。但是,系统不强制要求引用的列是唯一的或声明为NULL。对非唯一键或包含空值的键的外键引用的处理对于诸如UPDATE或DELETE级联之类的操作没有很好的定义。建议您使用只引用唯一(包括主键)和非空键的外键。

要么使CIF_Banco成为Cuenta表的PK,要么使其成为唯一的索引,使predictable语句执行,并使约束本身以可预测的方式工作。

将这一行添加到Cuenta表的CREATE语句:

代码语言:javascript
复制
UNIQUE INDEX IDX_CIF(CIF_Banco)
票数 0
EN

Stack Overflow用户

发布于 2016-04-10 15:20:04

根据manual

MySQL需要对外键和引用键进行索引,这样外键检查就可以快速而不需要表扫描。

因此,为了能够创建外键,您必须将这一行添加到表CuentaCuenta语句中

代码语言:javascript
复制
INDEX IDX_CIF(CIF_Banco)

Working Demo here

票数 0
EN

Stack Overflow用户

发布于 2016-04-10 15:13:34

这是因为banco表中的约束。仔细看看这条线:

代码语言:javascript
复制
FOREIGN KEY (CIF) REFERENCES Cuenta(CIF_Banco)

你指的是同样的到岸价。

注意,所有外键约束必须始终由所有PK列组成。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36531354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档