[英]Delete one record between two tables in 1: n design
我在MySql数据库中有两个表。 我很确定那些关系是否为1:n这是那些表:名为tb_karyawan的第一个表(英语中的karyawan是雇员)
MariaDB [db_egi]> select * from tb_karyawan where NIK_KARYAWAN = 2;
+--------------+------------------+---------------+-------+-------------+-------+
| NIK_KARYAWAN | NAMA | TGL_BERGABUNG | LEVEL | DEPARTEMENT | KELAS |
+--------------+------------------+---------------+-------+-------------+-------+
| 2 | Nurrahmi Massere | 2016-02-02 | 5 | 6 | 3 |
+--------------+------------------+---------------+-------+-------------+-------+
1 row in set (0.00 sec)
第二个表名为:tb_master_perhitungan:
MariaDB [db_egi]> select * from tb_master_perhitungan;
+----+---------------------+--------------+-------+-------+-------+-------+-------+------------+
| ID | PERIODE | NIK_KARYAWAN | ID_C1 | ID_C2 | ID_C3 | ID_C4 | ID_C5 | STATUS |
+----+---------------------+--------------+-------+-------+-------+-------+-------+------------+
| 13 | 2016-02-07 12:07:00 | 2 | 1 | 3 | 3 | 2 | 3 | UNAPPROVED |
| 13 | 2016-01-07 09:00:28 | 2 | 2 | 3 | 3 | 2 | 3 | APPROVED |
| 13 | 2015-12-07 15:47:18 | 2 | 3 | 3 | 3 | 2 | 3 | APPROVED |
+----+---------------------+--------------+-------+-------+-------+-------+-------+------------+
3 rows in set (0.00 sec)
请查看以下字段:NIK_KARYAWAN。 关系是:tb_karyawan中有一条记录与tb_master_perhitungan中的许多记录相关。 我在HeidiSQL中这样设置关系:
| KEY NAME | COLUMN | REFERENCE | FOREIGN COLUMN | ON UPDATE | ON DELETE |
+--------------------------------------------------------------------------------------------------------------------+
| FK_tb_master_perhitungan_tb_karyawan | NIK_KARYAWAN | tb_karyawan | NIK_KARYAWAN | CASCADE | NO ACTION |
+--------------------------------------------------------------------------------------------------------------------+
在UPDATE上很好,但是在删除时我遇到了问题。 问题是,当我决定删除tb_karyawan中的一行(即NIK_KARYAWAN = 2
,我仍然希望保留与该NIK_KARYAWAN = 2
有关系的记录在tb_master_perhitungan中,即使已在tb_karyawan中删除了NIK_KARYAWAN NIK_KARYAWAN = 2
。 这是错误:
Error Number: 1451
Cannot delete or update a parent row: a foreign key constraint fails (`db_egi`.`tb_master_perhitungan`, CONSTRAINT `FK_tb_master_perhitungan_tb_karyawan` FOREIGN KEY (`NIK_KARYAWAN`) REFERENCES `tb_karyawan` (`NIK_KARYAWAN`) ON DELETE NO ACTION ON UPDATE CASCADE)
DELETE FROM `tb_karyawan` WHERE `NIK_KARYAWAN` = '2'
我应该更改设计还是有其他解决方案? 任何解决方案都是如此。
在第二个表中,您必须进行外键约束,即ON DELETE CASCADE ON UPDATE CASCADE。 就像假设我有两个表jobeeker和job_status以及它们之间的一个外键,因此外键设置将像:-
CONSTRAINT `job_status_ibfk_1` FOREIGN KEY (`jobseeker_id`)
REFERENCES `jobseeker` (`jobseeker_id`) ON DELETE CASCADE ON UPDATE CASCADE
mysql中没有动作关系与限制动作相同,因此,要从主表中删除具有主键的记录时,必须先删除外键表中的所有相关记录。
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.