Hii all...
Saya mempunyai masalah pada pembuatan foreign key di MySQL (saya memakai MySQL
versi 4.0.23a). Saya mempunyai 4 table sebagai berikut :
mysql> select * from t_supplier;
+-----------------+-------------+
| kd_supplier(PK) | nm_supplier |
+-----------------+-------------+
| CN | CANON |
| PNSC | PANASONIC |
| SMB | SIMBADA |
| SN | SONY |
+-----------------+-------------+
4 rows in set (0.00 sec)
mysql> select * from t_satuan;
+---------------+-----------+
| kd_satuan(PK) | nm_satuan |
+---------------+-----------+
| BH | BUAH |
| ST | SET |
| UN | UNIT |
+---------------+-----------+
3 rows in set (0.01 sec)
mysql> select * from t_kategori;
+-----------------+------------------+
| kd_kategori(PK) | nm_kategori |
+-----------------+------------------+
| AUD | AUDIO |
| DLL | LAIN LAIN |
| HAPP | HOME APPLICATION |
| VID | VIDEO |
+-----------------+------------------+
4 rows in set (0.00 sec)
mysql> select kd_barang, kd_kategori, kd_satuan, nm_barang, kd_supplier from
t_barang;
+-----------+-------------+-----------+---------------------------------+-------------+
| kd_barang | kd_kategori | kd_satuan | nm_barang |
kd_supplier |
+-----------+-------------+-----------+---------------------------------+-------------+
| CNPRINT | DLL | ST | CANON PRINTER IP PIXMA IP 1200 | CN
|
| MNTR | AUD | UN | MONITOR 17" | SN
|
| RCKR | HAPP | UN | RICE COOKER | PNSC
|
| TT | DLL | BH | TINTA PRINTER WARNA HITAM 30 CC | CN
|
| TVW | AUD | UN | TELEVISI 21" | PNSC
|
| VCDP | AUD | ST | VCD PLAYER | SN
|
+-----------+-------------+-----------+---------------------------------+-------------+
6 rows in set (0.00 sec)
Nah masalah yang sedang saya hadapi adalah sebagai berikut :
1. Kenapa saya tidak bisa menghapus data lama pada tabel barang, padahal kan
tabel t_barang
adalah child table dari table t_kategori, t_satuan dan t_supplier ?
Saya menghapus dengan cara seperti ini:
mysql> delete from t_barang where kd_barang = 'RCKR';
ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails
mysql>
2. Tapi anehnya, ketika saya mencoba menambahkan data baru pada table t_barang
kemudian
menghapusnya saya tidak mendapatkan error apapun.
Ini langkah-langkah yang saya lakukan:
mysql> insert into t_barang(kd_barang, kd_kategori, kd_satuan, nm_barang, kd_supplier)
-> values('tes', 'DLL', 'ST', 'tes', 'CN');
Query OK, 1 row affected (0.06 sec)
mysql> select kd_barang, kd_kategori, kd_satuan, nm_barang, kd_supplier from t_barang;
+-----------+-------------+-----------+---------------------------------+-------------+
| kd_barang | kd_kategori | kd_satuan | nm_barang |
kd_supplier |
+-----------+-------------+-----------+---------------------------------+-------------+
| CNPRINT | DLL | ST | CANON PRINTER IP PIXMA IP 1200 | CN
|
| MNTR | AUD | UN | MONITOR 17" | SN
|
| RCKR | HAPP | UN | RICE COOKER | PNSC
|
| tes | DLL | ST | tes | CN
|
| TT | DLL | BH | TINTA PRINTER WARNA HITAM 30 CC | CN
|
| TVW | AUD | UN | TELEVISI 21" | PNSC
|
| VCDP | AUD | ST | VCD PLAYER | SN
|
+-----------+-------------+-----------+---------------------------------+-------------+
7 rows in set (0.00 sec)
// Mencoba menghapus data yang baru dimasukkan, sukses.
mysql> delete from t_barang where kd_barang = 'tes';
Query OK, 1 row affected (0.04 sec)
mysql> select kd_barang, kd_kategori, kd_satuan, nm_barang, kd_supplier from
t_barang;
+-----------+-------------+-----------+---------------------------------+-------------+
| kd_barang | kd_kategori | kd_satuan | nm_barang |
kd_supplier |
+-----------+-------------+-----------+---------------------------------+-------------+
| CNPRINT | DLL | ST | CANON PRINTER IP PIXMA IP 1200 | CN
|
| MNTR | AUD | UN | MONITOR 17" | SN
|
| RCKR | HAPP | UN | RICE COOKER | PNSC
|
| TT | DLL | BH | TINTA PRINTER WARNA HITAM 30 CC | CN
|
| TVW | AUD | UN | TELEVISI 21" | PNSC
|
| VCDP | AUD | ST | VCD PLAYER | SN
|
+-----------+-------------+-----------+---------------------------------+-------------+
6 rows in set (0.00 sec)
mysql>
// Mencoba menghapus data lama yang telah ada, error.
mysql> delete from t_barang where kd_barang = 'CNPRINT';
ERROR 1217: Cannot delete or update a parent row: a foreign key constraint fails
mysql>
Sedangkan ini konfigurasi foreign key pada table t_barang saya:
PRIMARY KEY (`kd_barang`),
KEY `kd_kategori` (`kd_kategori`),
KEY `kd_satuan` (`kd_satuan`),
KEY `kd_supplier` (`kd_supplier`),
CONSTRAINT `t_barang_ibfk_1` FOREIGN KEY (`kd_kategori`) REFERENCES
`t_kategori` (`kd_kategori`) ON UPDATE CASCADE,
CONSTRAINT `t_barang_ibfk_2` FOREIGN KEY (`kd_satuan`) REFERENCES `t_satuan`
(`kd_satuan`) ON UPDATE CASCADE,
CONSTRAINT `t_barang_ibfk_3` FOREIGN KEY (`kd_supplier`) REFERENCES
`t_supplier` (`kd_supplier`) ON UPDATE CASCADE
Koq aneh yach ???
Seharusnya kan tidak bermasalah ?
Tetapi kenapa saya tidak bisa melakukan penghapusan pada table t_barang ??
Kira-kira teman-teman tahu apakah kesalahan yg saya lakukan ??
Martinus Ady H.
--
Berhenti langganan: [EMAIL PROTECTED]
Arsip dan info: http://linux.or.id/milis