我在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
时,我想仍然保留tb_master_perhitungan中与此NIK_KARYAWAN = 2
甚至NIK_KARYAWAN = 2
有关系的记录。在tb_karyawan中删除。
这是错误:
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'
我应该更改设计还是有其他解决方案? 任何解决方案都非常受欢迎。
答案 0 :(得分:1)
在第二个表中,您必须创建外键约束,ON DELETE CASCADE ON UPDATE CASCADE。 就像假设我有两个表jobseeker和job_status以及它们之间的一个外键所以外键设置将是这样的: -
CONSTRAINT `job_status_ibfk_1` FOREIGN KEY (`jobseeker_id`)
REFERENCES `jobseeker` (`jobseeker_id`) ON DELETE CASCADE ON UPDATE CASCADE
答案 1 :(得分:0)
mysql中没有任何操作关系将操作限制为与限制相同,因此当您想要使用主表中的主键删除记录时,必须先删除外键表中的所有相关记录。
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html