小编302*_*aya的帖子

外键可以引用其自己表的主键吗?

我正在创建一个用于工作的MySQL雇员数据库,并且希望它存储该雇员的主管。

假设我有一个名为“ employee”的表,其中的字段为“ id”,“ first_name”,“ last_name”和“ supv_id”,其中“ id”是主键,“ supv_id”是一个外键,它引用了员工ID 。

目前,我有“ supv_id”作为外键,它指向一个单独的表“ supervisor”。该表仅由指向员工表的'id'和'empl_id'组成。但是,如果有一种方法可以简单地使“ employee”中的“ supv_id”指向“ employee.id”,则将完全不需要我的“ supervisor”表。这是一个例子:

+----+--------+-----------+---------+
| id | f_name | l_name    | supv_id |
+----+--------+-----------+---------+ 
|  1 | Han    | Solo      |    NULL | //Or 0?
|  2 | Luke   | Skywalker |       1 |
+----+--------+-----------+---------+
Run Code Online (Sandbox Code Playgroud)

简而言之,我希望“ supv_id”指向另一名员工。这有意义吗?我将如何去做呢?

谢谢!

编辑:固定表

mysql database relational-database

5
推荐指数
1
解决办法
1523
查看次数

我可以在两个不同的表中使用相同的外键约束吗?

我正在尝试创建一个工作数据库。我有两种不同类型的用户:内部和外部。每种类型都有不同的属性,因此我为它们创建了两个单独的表。在我的内部表中,我具有以下字段:

f_name VARCHAR(32),
l_name VARCHAR(32),
empl_status_id INT,
admin_grp_id INT,
reliab_status_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)

我的外部表具有以下内容:

f_name VARCHAR(32),
l_name VARCHAR(32),
email VARCHAR(32),
phone VARCHAR(20),
org_id INT,
supv_id INT
Run Code Online (Sandbox Code Playgroud)

我意识到我可以创建一个单独的表,其中包含用户名和指向内部或外部的外键,但是除此之外,我还向我的内部表添加了一个外键约束,该约束引用supv_id了另一个内部用户。我叫它fk_supv_id。当我尝试对外部用户表执行相同操作时,我得到了ERROR 1005 (HY000)

最初我无法弄清楚问题出在哪里,但是当我尝试使用其他名称来解决问题时,它就起作用了(即fk_supv_id,我没有像内部调用那样调用它fk_xtsupv_id)。

所以我的问题是,正确的方法是什么?这是两个不同表中的相同外键。在这两种情况下,它都是指内部用户。没有两个不同的名称,有没有办法做到这一点?或者我应该选择的名称理念的表和添加supv_id约束沿该表f_namel_nameuser_type

建议和建议,

谢谢!:)

mysql database foreign-keys foreign-key-relationship

4
推荐指数
1
解决办法
1万
查看次数

外键选项,ON DELETE CASCADE不起作用?

我正在尝试使用ON DELETE CASCADE我正在处理的数据库.似乎没有工作,所以我在一个简单的例子上测试了它没有成功.

CREATE TABLE foo (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(10),
PRIMARY KEY (id)
)ENGINE=InnoDB;

CREATE TABLE foo2 (
id INT UNSIGNED NOT NULL,
data2 VARCHAR(10),
PRIMARY KEY (id),
CONSTRAINT fk_foo2_id FOREIGN KEY (id) REFERENCES foo(id) ON DELETE CASCADE
)ENGINE=InnoDB;

INSERT INTO foo (data) VALUE ('hello'),('world'),('mysql');
INSERT INTO foo2 (data2) VALUE ('hello2'),('world2'),('mysql2');

SELECT * FROM foo;

+----+-------+
| id | data  |
+----+-------+
|  1 | hello |
|  2 | world |
| …
Run Code Online (Sandbox Code Playgroud)

mysql database cascade

1
推荐指数
1
解决办法
1818
查看次数