这是我的第一个问题,我试图创建这个新数据库但是当我运行脚本时,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)
) ;
感谢您的帮助!
答案 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;