簡體   English   中英

無法創建表外鍵約束的格式不正確

[英]Can't create table foreign key constraint is incorrectly formed

我已經檢查了其他答案,但沒有解決我的特定問題。 也許我無法理解他們,我對這一切都很陌生。 我將代碼留在這里:

CREATE TABLE ciudades 
(
    IDCIUDAD decimal(11,0) NOT NULL,
    DESCRIPCION varchar(30) DEFAULT NULL,
    PRIMARY KEY (IDCIUDAD)
);

INSERT INTO ciudades VALUES (1,'Alcorcón');
INSERT INTO ciudades VALUES (2,'Getafe');
INSERT INTO ciudades VALUES (3,'Madrid');
INSERT INTO ciudades VALUES (4,'Móstoles');

CREATE TABLE especialidades 
(
    IDESPECIALIDAD decimal(11,0) NOT NULL,
    DESCRIPCION varchar(30) DEFAULT NULL
);

CREATE TABLE citas 
(
    IDCITA decimal(11,0) NOT NULL,
    FECHA datetime DEFAULT NULL,
    IDMEDICO varchar(10) DEFAULT NULL,
    IDPACIENTE decimal(11,0) DEFAULT NULL,
    HABITACION decimal(11,0) DEFAULT NULL,
    CAMA varchar(1) DEFAULT NULL,
    PAGO decimal(10,2) DEFAULT NULL
);

CREATE TABLE medicos 
(
    IDMEDICO varchar(10) NOT NULL,
    APELLIDOS varchar(50) DEFAULT NULL,
    NOMBRE varchar(50) DEFAULT NULL,
    IDESPECIALIDAD decimal(11,0) DEFAULT NULL,
    PRIMARY KEY (IDMEDICO),
    KEY FK_MED_ESP (IDESPECIALIDAD),
    CONSTRAINT FK_MED_ESP 
        FOREIGN KEY (IDESPECIALIDAD) REFERENCES especialidades (IDESPECIALIDAD)
);

CREATE TABLE pacientes 
(
    IDPACIENTE decimal(11,0) NOT NULL,
    APELLIDOS varchar(50) DEFAULT NULL,
    NOMBRE varchar(50) DEFAULT NULL,
    FECHA_NACIMIENTO datetime DEFAULT NULL,
    DIRECCION varchar(50) DEFAULT NULL,
    TELEFONO varchar(10) DEFAULT NULL,
    IDCIUDAD decimal(11,0) DEFAULT NULL,
);

該行:

CONSTRAINT FK_MED_ESP FOREIGN KEY (IDESPECIALIDAD) REFERENCES especialidades (IDESPECIALIDAD)   

是導致“錯誤 1005:無法創建表(錯誤號:150)”的原因。 我已經嘗試將IDESPECIALIDAD更改為NOT NULL 請有人指出我正確的方向。 我已經浪費了很多時間來試圖解決這個問題,我敢打賭這是一個簡單的解決方案,但我對找到它很陌生。

提前致謝!

especialidades沒有主鍵。 而是將其定義為:

CREATE TABLE especialidades (
  IDESPECIALIDAD decimal(11,0) PRIMARY KEY,
  DESCRIPCION varchar(30) DEFAULT NULL
);

PRIMARY KEY表示該值NOT NULL ,因此沒有理由將其也包含在定義中(這將是多余的)。

好的,所以,我終於知道了問題所在。 正如 Gordon Linoff 所提到的,我需要向某些表添加主鍵,以及外鍵。 我還必須更改某些鍵的數據類型,以便它們匹配。 最后,只需重新排序代碼,以便以正確的順序創建表。 這是工作代碼:

CREATE TABLE ciudades (
  IDCIUDAD decimal(11,0) NOT NULL,
  DESCRIPCION varchar(30) DEFAULT NULL,
  PRIMARY KEY (IDCIUDAD)
);

INSERT INTO ciudades VALUES (1,'Alcorcón');
INSERT INTO ciudades VALUES (2,'Getafe');
INSERT INTO ciudades VALUES (3,'Madrid');
INSERT INTO ciudades VALUES (4,'Móstoles');

CREATE TABLE especialidades (
  IDESPECIALIDAD decimal(11,0) NOT NULL,
  DESCRIPCION varchar(30) DEFAULT NULL,
  PRIMARY KEY (IDESPECIALIDAD)
);

CREATE TABLE medicos (
  IDMEDICO varchar(10) NOT NULL,
  APELLIDOS varchar(50) DEFAULT NULL,
  NOMBRE varchar(50) DEFAULT NULL,
  IDESPECIALIDAD decimal(11,0) NOT NULL,
  PRIMARY KEY (IDMEDICO),
  KEY FK_MED_ESP (IDESPECIALIDAD),
  CONSTRAINT FK_MED_ESP FOREIGN KEY (IDESPECIALIDAD) REFERENCES especialidades (IDESPECIALIDAD)
);


CREATE TABLE pacientes (
    IDPACIENTE decimal(11,0) NOT NULL,
    APELLIDOS VARCHAR(50) DEFAULT NULL,
    NOMBRE VARCHAR(50) DEFAULT NULL,
    FECHA_NACIMIENTO DATETIME DEFAULT NULL,
    DIRECCION VARCHAR(50) DEFAULT NULL,
    TELEFONO VARCHAR(10) DEFAULT NULL,
    IDCIUDAD decimal(11,0) NOT NULL,
    PRIMARY KEY (IDPACIENTE),
    KEY FK_PAC_CIU (IDCIUDAD),
    CONSTRAINT FK_PAC_CIU FOREIGN KEY (IDCIUDAD) REFERENCES ciudades (IDCIUDAD)
);


CREATE TABLE citas (
  IDCITA decimal(11,0) NOT NULL,
  FECHA datetime DEFAULT NULL,
  IDMEDICO varchar(10) NOT NULL,
  IDPACIENTE decimal(11,0) NOT NULL,
  HABITACION decimal(11,0) DEFAULT NULL,
  CAMA varchar(1) DEFAULT NULL,
  PAGO decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (IDCITA),
  KEY FK_CIT_MED (IDMEDICO),
  CONSTRAINT FK_CIT_MED FOREIGN KEY (IDMEDICO) REFERENCES medicos (IDMEDICO),
  KEY FK_CIT_PAC (IDPACIENTE),
  CONSTRAINT FK_CIT_PAC FOREIGN KEY (IDPACIENTE) REFERENCES pacientes (IDPACIENTE)
  );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM