尝试使用SQL创建表时,我总是收到此错误。
我有这两个表:
我正在使用PHPMyAdmin,并且不允许我使用M_id作为引用Employee Table主键E_id的外键。
任何人都可以看到我的代码有什么问题吗?
谢谢!
答案 0 :(得分:2)
外键定义必须与它们所引用的主键列完全匹配。在这种情况下,您将Department.M_id
定义为可为空的整数列,而EMPLOYEE.E_id
为不可为整数的整数。尝试使M_id
不可为空:
CREATE TABLE Department (
D_name VARCHAR(100) NOT NULL,
D_id INT NOT NULL,
M_id INT NOT NULL DEFAULT 0000,
...
FOREIGN KEY (M_id) REFERENCES EMPLOYEE(E_id)
ON DELETE SET DEFAULT ON UPDATE CASCADE
)
答案 1 :(得分:0)
您的代码有多个错误:
varchar()
的长度太长。SET DEFAULT
确实无效。您想要这样的东西:
CREATE TABLE employees (
employee_id int not null primary key,
Job_type VARCHAR(100),
Ssn INT NOT NULL,
Salary DECIMAL NOT NULL,
Address VARCHAR(500) NOT NULL,
First_name VARCHAR(50) NOT NULL,
M_initial CHAR(1),
Last_name VARCHAR(50) NOT NULL,
E_end_date DATE,
E_start_date DATE NOT NULL,
department_id INT NOT NULL,
Super_id INT,
FOREIGN KEY (Super_id) REFERENCES employees(employee_id) ON DELETE SET NULL ON UPDATE CASCADE,
UNIQUE (Ssn)
);
CREATE TABLE departments (
department_id int primary key,
D_name VARCHAR(100) NOT NULL,
D_id INT NOT NULL,
M_id INT DEFAULT 0000,
Manager_start_date DATE NOT NULL,
Manager_end_date DATE,
Report VARCHAR(8000),
Num_of_employees INT NOT NULL,
FOREIGN KEY (M_id) REFERENCES employees(employee_id) ON DELETE SET NULL ON UPDATE CASCADE,
UNIQUE (D_name)
);
ALTER TABLE employees ADD CONSTRAINT FOREIGN KEY (department_id) REFERENCES departments(department_id)
ON DELETE CASCADE ON UPDATE CASCADE;
我还更改了一些其他内容:
Here是db <>小提琴,表明它可以正常工作。
答案 2 :(得分:0)
尽管看起来有问题,但我不会质疑您的设计。
但是-您无法引用尚不存在的表(REFERENCES Department(D_id)
)。您应该从CREATE语句中删除FOREIGN KEY约束,然后在ALTER TABLE语句中添加它们。
示例:
CREATE TABLE EMPLOYEE (...);
CREATE TABLE Department (...);
ALTER TABLE EMPLOYEE
ADD FOREIGN KEY (D_id)
REFERENCES Department(D_id)
ON DELETE CASCADE
ON UPDATE CASCADE
;
或暂时禁用外键检查:
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE EMPLOYEE (...);
CREATE TABLE Department (...);
SET FOREIGN_KEY_CHECKS = 1;
您也不能使用ON DELETE SET DEFAULT
。 InnoDB不支持它。您需要将其更改为ON DELETE SET NULL
。如果需要这种行为,则需要在应用程序代码或触发器中实现它。
我也将TEXT
用作数据类型,而不是VARCHAR(30000)
。