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

Kirim email ke