mysql错误1215:无法添加外键约束//创建此表

时间:2017-04-12 17:52:17

标签: mysql sql foreign-keys

这是我的第一个问题,我试图创建这个新数据库但是当我运行脚本时,MySQL发送错误1215:无法添加外键约束。

对不起,我的英语很糟糕,即苏丹美国人。 这是代码

CREATE TABLE mae_comuna(
comu_id          int PRIMARY KEY AUTO_INCREMENT,
comu_descripcion VARCHAR (20) NOT NULL,
comu_vigencia    CHAR (1) NOT NULL
);

CREATE TABLE mae_region(
reg_id int   AUTO_INCREMENT PRIMARY KEY,
reg_region   VARCHAR (20) NOT NULL ,
reg_vigencia CHAR (1) NOT NULL
) ;

CREATE TABLE mae_tipo_direccion(
tipo_direc_id          INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
tipo_direc_descripcion VARCHAR (20) NOT NULL ,
tipo_direc_vigencia    CHAR (1) NOT NULL
) ;

CREATE TABLE mae_tipo_persona(
tipo_per_id          INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
tipo_per_descripcion VARCHAR (50) NOT NULL ,
tipo_per_vigencia    CHAR (1) NOT NULL
);

CREATE TABLE zs_usuario(
usu_id             INT PRIMARY KEY AUTO_INCREMENT ,
usu_nombre_usuario VARCHAR (50) NOT NULL ,
usu_contraseña     VARCHAR (15) NOT NULL ,
usu_vigencia       CHAR (1) NOT NULL
) ;

CREATE TABLE zs_camionero(
cami_id             INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
cami_tipo_camionero VARCHAR (10) NOT NULL,
cami_vigencia       CHAR (1) NOT NULL
) ;

CREATE TABLE zs_cliente(
cli_rut            INT NOT NULL  PRIMARY KEY,
cli_dv             CHAR (1) NOT NULL ,
cli_tarifa_peso    FLOAT NOT NULL,
cli_tarifa_volumen FLOAT NOT NULL,
cli_vigencia       CHAR (1) NOT NULL
) ;

CREATE TABLE zs_persona(
per_id                       INT PRIMARY KEY AUTO_INCREMENT ,
per_rut                      INT NOT NULL ,
per_dv                       CHAR (1) NOT NULL,
per_nombres                  VARCHAR (30) NOT NULL ,
per_apellido_aterno          VARCHAR (15) NOT NULL ,
per_apellido_materno         VARCHAR (15) NOT NULL ,
per_nombre_completo          VARCHAR (70) NOT NULL ,    
per_fecha_nacimiento         DATE,
per_fecha_registro           DATE,
per_sexo                     CHAR (1) NOT NULL ,
per_telefono                 INT NOT NULL,
per_email                    VARCHAR(50) NOT NULL,
per_vigencia                 CHAR (1) NOT NULL ,
tipo_per_id                  INT NOT NULL,
usu_id                       INT,
cli_id                       INT,
per_id                       INT,
cami_id                      INT,    
FOREIGN KEY (tipo_per_id) REFERENCES mae_tipo_persona(per_id),
FOREIGN KEY (usu_id) REFERENCES zs_usuario(usu_id),
FOREIGN KEY (cli_id) REFERENCES zs_cliente(per_id),
FOREIGN KEY (cami_id) REFERENCES zs_camionero(cami_id)    
) ;

CREATE TABLE zs_direccion(
dir_id        INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
dir_direccion VARCHAR (50) NOT NULL ,
dir_numero         INT,
dir_vigencia       CHAR (1) NOT NULL,      
comu_id INT,
per_id  INT,
reg_id  INT,
FOREIGN KEY (comu_id) REFERENCES mae_comuna(comu_id),
FOREIGN KEY (per_id) REFERENCES zs_persona(per_id),
FOREIGN KEY (reg_id) REFERENCES mae_region(reg_id)
) ;

CREATE TABLE zs_manifiesto_carga(
mc_numero_manifiesto INT PRIMARY KEY AUTO_INCREMENT,
mc_fecha_salida      DATE NOT NULL,
mc_fecha_embarque    DATE NOT NULL,
mc_patente_camion    VARCHAR (7) NOT NULL,
mc_patente_rampla    VARCHAR (7) NOT NULL,
mc_tramo             VARCHAR (30) NOT NULL,
mc_fecha_llegada     DATE NOT NULL ,
mc_total_neto        FLOAT NOT NULL ,
mc_iva               FLOAT NOT NULL ,
mc_total_con_iva     FLOAT NOT NULL ,
mc_factura_interna   INT NOT NULL,
mc_observaciones     VARCHAR (100) NOT NULL ,
mc_vigente           CHAR (1) NOT NULL
) ;

CREATE TABLE zs_orden_retiro(
or_numero_orden          INT PRIMARY KEY AUTO_INCREMENT,
or_numero_factura_flete  BIGINT NOT NULL,
or_fecha_actual          DATE NOT NULL,
or_rampla                VARCHAR (10),
or_hora_llegada          DATE NOT NULL,
or_retiro                CHAR (1) NOT NULL,
or_estado_pago           CHAR (1) NOT NULL,
or_factura_cliente       BIGINT NOT NULL,
or_guia_despacho_cliente BIGINT NOT NULL,
or_cantidad_bultos       INT NOT NULL,
or_contenido_sin_revisar CHAR (1) NOT NULL ,
or_peso                  FLOAT NOT NULL ,
or_volumen               FLOAT NOT NULL ,
or_descripcion_carga     VARCHAR (100),
or_notas                 VARCHAR (100),
or_vigencia              CHAR (1) NOT NULL,      
per_id                   INT NOT NULL,
mc_numero_manifiesto     INT NOT NULL,
FOREIGN KEY (per_id) REFERENCES zs_persona(per_id),
FOREIGN KEY (mc_numero_manifiesto) REFERENCES 
zs_manifiesto_carga(mc_numero_manifiesto)
) ;

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

考虑到CREATE TABLE语句的执行顺序,您在创建引用的表之前尝试添加一些外键。

解决方案是在执行CREATE TABLE语句之前运行这些命令:

set @foreign_key_checks = @@foreign_key_checks;
set foreign_key_checks = 0;

然后您可以在创建表格后恢复该设置:

set foreign_key_checks = @foreign_key_checks;