none
Bagaimana cara menghapus record di Parent tanpa mempengaruhi record di Child ? RRS feed

  • Pertanyaan

  • Hallo semua,

    Saya mau bertanya apakah mungkin menghapus record di Parent tanpa mempengaruhi record di Child ?

    Misal :

    Saya punya table Transaksi yang memiliki foreign key dari table Truk.

    Saya ingin menghapus record yang ada d table Truk tapi tidak mempengaruhi record yang sudah tersimpan d table Transaksi. Apakah memungkinkan ?

    Berikut code untuk table Transaksi

    CREATE TABLE TrPengirimanBarang
    (
    NoPengirimanBarang            char(6)            NOT NULL,
    constraint cek9 check (NoPengirimanBarang like 'PB[0-9][0-9][0-9][0-9]'),
    IDPelanggan                         char(4)                 NOT NULL,
    IDRekanan                            char(4),
    NamaSupirRekanan              varchar(20),
    PembayaranRekanan            int,
    StatusPembayaranRekanan  varchar(20),
    PlatKendaraanRekanan        varchar(10),
    IDTruk                                  char(4),
    IDSupir                                 char(4),
    IDRute                                 char(4)                 NOT NULL,
    IDKaryawan                         char(4)                 NOT NULL,
    NoPermintaanPengiriman     varchar(20)         NOT NULL,
    TanggalTransaksi                 Date                    NOT NULL,
    NamaPenerima                    varchar(20)        NOT NULL,
    UnitBarang                           int                     NOT NULL,
    KVABarang                           int                      NOT NULL,
    StatusBuktiPenyerahan       varchar(20)        NOT NULL,
    KeteranganTransaksi           varchar(100),
    Potongan                             int                     NOT NULL,
    BiayaTambahan                   int                    NOT NULL,
    NominalPembayaran            int                    NOT NULL,

    Primary Key (NoPengirimanBarang),
    Foreign Key (IDPelanggan) references MsPelanggan ON UPDATE CASCADE ON DELETE NO ACTION,
    Foreign Key (IDRekanan) references MsRekanan ON UPDATE CASCADE ON DELETE NO ACTION,
    Foreign Key (IDTruk) references MsTruk ON UPDATE CASCADE ON DELETE NO ACTION,
    Foreign Key (IDSupir) references MsSupir ON UPDATE CASCADE ON DELETE NO ACTION,
    Foreign Key (IDRute) references MsRutePerjalanan ON UPDATE CASCADE ON DELETE NO ACTION,
    Foreign Key (IDKaryawan) references MsKaryawan ON UPDATE CASCADE ON DELETE NO ACTION

    )

    Jumat, 21 Maret 2014 18.16

Jawaban

  • Hi

    Selamat datang di Forum MSDN

    Cara ini tidak dianjurkan dari sisi keamanan data, karena menyebabkan data yang terdapat di child akan hilang dan mungkin akan berpengaruh pada aplikasi yang sedang kamu buat. Hanya untuk sebagai referensi saja 

    1. Cascading DELETE dengan menggunakan SET NULL atau SET DEFAULT
    Jadi jika ada foreign key, declare sebagai on-delete-cascade dan delete parent row. Semua child row akan terdelete otomatis
    http://support.microsoft.com/kb/142480

    2. Gunakan syntax seperti berikut

    delete from child_table
          where parent_id in (
               select parent_id from parent_table
                    where ID_truk = *****

    kemudian delete record di parent table

    delete from parent_table
    where ID_truk = ***** ;
    Terima kasih

    Andy Nugraha

    TechNet Community Support

    Selasa, 25 Maret 2014 01.56
    Moderator