我是SQL的新手,但是我的SQL代码有一些问题。我一直在搜索有关这种错误的很多信息,但是找不到适合我问题的答案。这是代码示例。
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”。
<BR> 1005无法创建表格
practicaer
。banco
(错误号:150“外键约束格式不正确”)
您试图引用Cuenta
表中不是UNIQUE或该表的PRIMARY KEY的列。如果您向该表上的列添加索引(如Giorgos Betsos的回答),MySQL允许这样做,但建议不要这样做:
另外,出于性能原因,MySQL要求对引用的列进行索引。但是,系统不强制要求引用的列为UNIQUE或声明为NOT NULL。对于诸如UPDATE或DELETE CASCADE之类的操作,未很好地定义对非唯一键或包含NULL值的键的外键引用的处理。建议您使用仅引用UNIQUE(包括PRIMARY)和NOT NULL键的外键。
使表CIF_Banco
的PKCuenta
或使其成为UNIQUE索引,以执行CREATE TABLE语句,并使约束本身以可预测的方式工作。
将此行添加到Cuenta
表的CREATE语句中:
UNIQUE INDEX IDX_CIF(CIF_Banco)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句