Pernyat aan ut am a yang digunakan unt uk m em odifikasi dat a dalam dat abase MySQL adalah pernyat aan UPDATE. Sint aksnya adalah sebagai berikut :
<pernyataan update>::=
UPDATE [LOW_PRIORITY] [IGNORE] <single table update> | <joined table update> <single table update>::=
<nama tabel>
SET <nama kolom>=<ekspresi> [{, <nama kolom>=<ekspresi>}...] [WHERE <definisi where>]
[ORDER BY <nama kolom> [ASC | DESC] [{, <nama kolom> [ASC | DESC]}...]] [LIMIT <jumlah baris>]
<joined table update>::=
<nama tabel> [{, <nama tabel>}...]
SET <nama kolom>=<ekspresi> [{, <nama kolom>=<ekspresi>}...] [WHERE <definisi where>]
Baris pert am a dari sint aks berisi kat a kunci perint ah UPDATE bersam aan dengan opsi LOW_PRI ORI TY dan I GNORE, keduanya sepert i yang Anda lihat pada pernyat aan I NSERT. Anda sebaiknya m enggunakan opsi LOW_PRI ORI TY ket ika Anda ingin m enunda eksekusi pernyat aan UPDATE sam pai t idak ada lagi koneksi klien yang sedang m engakses t abel t arget . Anda sebaiknya m enggunakan opsi I GNORE j ika Anda ingin updat e dilanj ut kan m eskipun dit em ukan nilai duplikat pada prim ary key dan indeks unique. ( Baris dengan nilai duplikat t idak diupdat e) .
M EN GUPD ATE TABEL TUN GGAL (SI N GLE TABLE)
Unt uk m engupdat e t abel t unggal dalam dat abase MySQL, dim ana t idak ada kondisi j oin yang diam bil ke dalam akun unt uk m elakukan peng- updat e- an, Anda sebaiknya m em buat pernyat aan UPDATE yang m enggunakan alt ernat if <single t able updat e> , dim ana dit unj ukkan sint aks berikut ini :
<single table update>::= <nama tabel>
SET <nama kolom>=<ekspresi> [{, <nama kolom>=<ekspresi>}...] [WHERE <definisi where>]
[ORDER BY <nama kolom> [ASC | DESC] [{, <nama kolom> [ASC | DESC]}...]] [LIMIT <jumlah baris>]
Sebagaim ana t erlihat pada sint aks, Anda harus m enspesifikasikan nam a t abel dan klausa SET. Klausa SET m eliput i, m inim al, sebuah nam a kolom dan ekspresi yang berhubungan, dihubungkan dengan t anda sam a dengan ( = ) . I nform asi m engeset sebuah nilai unt uk sat u kolom t ert ent u. Jika Anda ingin m enyert akan lebih dari sat u kolom , Anda harus m em isahkan pasangan kolom / ekspresi dengan kom a.
Con t oh .
Mem buat t abel Buku. CREATE TABLE Buku (
IDBuku SMALLINT NOT NULL PRIMARY KEY, NamaBuku VARCHAR(40) NOT NULL,
Stok SMALLINT NOT NULL )
ENGINE=INNODB;
Mem asukkan dat a ke dalam t abel Buku. INSERT INTO Buku
VALUES (101, ‘Noncomformity: Writing on Writing’, 12), (102, ‘The Shipping News’, 17),
(103, ‘Hell\’s Angels’, 23),
(104, ‘Letters to a Young Poet’, 32), (105, ‘A Confederacy of Dunces’, 6), (106, ‘One Hundred Years of Solitude’, 28);
Diktat Laboratorium Sistem Basis Data – MySQL
De p a rtm e nt o f Info rm a tic s Eng ine e ring – UNIKO M G a lih He rm a w a n, S.Ko m
33
Tabel ber ikut adalah t abel Pem belian, yang m enyert akan foreign key yang m ereferensi ke t abel Buku.
CREATE TABLE Pembelian (
IDPembelian SMALLINT NOT NULL PRIMARY KEY, IDBuku SMALLINT NOT NULL,
Kuantitas TINYINT (40) NOT NULL DEFAULT 1, TanggalBeli TIMESTAMP,
FOREIGN KEY (IDBuku) REFERENCES Buku (IDBuku) )
ENGINE=INNODB;
Mem asukkan dat a ke dalam t abel Pem belian. INSERT INTO Pembelian
VALUES (1001, 103, 1, ‘2006-10-12 12:30:00’), (1002, 101, 1, ‘2006-10-12 12:31:00’), (1003, 103, 2, ‘2006-10-12 12:34:00’), (1004, 104, 3, ‘2006-10-12 12:36:00’), (1005, 102, 1, ‘2006-10-12 12:41:00’), (1006, 103, 2, ‘2006-10-12 12:59:00’), (1007, 101, 1, ‘2006-10-12 13:01:00’), (1008, 103, 1, ‘2006-10-12 13:02:00’), (1009, 102, 4, ‘2006-10-12 13:22:00’), (1010, 101, 2, ‘2006-10-12 13:30:00’), (1011, 103, 1, ‘2006-10-12 13:32:00’), (1012, 105, 1, ‘2006-10-12 13:40:00’), (1013, 106, 2, ‘2006-10-12 13:44:00’), (1014, 103, 1, ‘2006-10-12 14:01:00’), (1015, 106, 1, ‘2006-10-12 14:05:00’), (1016, 104, 2, ‘2006-10-12 14:28:00’), (1017, 105, 1, ‘2006-10-12 14:31:00’), (1018, 102, 1, ‘2006-10-12 14:32:00’), (1019, 106, 3, ‘2006-10-12 14:49:00’), (1020, 103, 1, ‘2006-10-12 14:51:00’);
Perhat ikan bahw a nilai- nilai yang dit am bahkan ke kolom I DBuku m eliput i hanya nilai- nilai y ang t erdapat dalam k olom I DBuku pada t abel Buku. Kolom I DBuku di Pem belian m erupakan kolom yang m ereferensi/ m engkait , dan kolom I DBuku di t abel Buku m erupakan kolom yang direferensi/ dikait .
Set elah m em buat t abel dan m enam bahkan dat a pada t abel- t abel t ersebut , Anda dapat m em odifikasi dat anya. Cont oh:
UPDATE Buku SET Stok=Stok+10;
Dalam pernyat aan ini karena t idak kondisi khusus yang harus dipenuhi, berart i akan m engubah seluruh nilai dari kolom St ok dit am bahkan dengan 10.
Sedangkan unt uk m em odifikasi dat a dengan m em nuhi kondisi t ert ent u, Anda bisa m enam bahkannya dengan klausa WHERE.
UPDATE Pembelian SET Kuantitas=2
WHERE IDPembelian=1001;
Dalam per nyat aan di at as berart i akan m engupdat e kolom Kuant it as m enj adi 2 dim ana I DPem belian = 1001.
UPDATE Pembelian SET Kuantitas=Kuantitas+1 WHERE IDPembelian=1001;
Sedangkan dalam pernyat aan di at as, baris dengan I DPem belian = 1001, nilai dari kuant it asnya yang lam a akan dit am bahkan dengan 1.
UPDATE LOW_PRIORITY Buku SET Stok=Stok+10
WHERE Stok<30;
Set iap rekod/ baris pada t abel Buku yang m em punyai St ok lebih kecil dar i 30 akan dit am bah dengan 10.
Diktat Laboratorium Sistem Basis Data – MySQL
De p a rtm e nt o f Info rm a tic s Eng ine e ring – UNIKO M G a lih He rm a w a n, S.Ko m
34
UPDATE Pembelian SET Kuantitas=Kuantitas+1 WHERE IDBuku=103
ORDER BY TanggalBeli DESC LIMIT 5;
Mengupdat e t abel Pem belian yang m em punyai I DBuku = 103, dim ana nilai Kuant it as dit am bah 1. Diurut kan berdasarkan TanggalPem belian secara DESCENDI NG pada 5 baris pert am a.
M EN GUPD ATE TABEL JOI N (JOI N ED TABLE)
Dalam cont oh pernyat aan UPDATE sebelum nya Anda t elah m elihat bahw a updat e hanya dilakukan pada t abel- t abel secara individual t anpa m enj oinkannya dengan t abel lain. Meskipun t abel- t abel berisi foreign key yang direferensi/ dikait oeh t abel lain, Anda t idak m enspesifikasikan kondisi no j oin dalam pernyat aan UPDATE.
Sint aksnya adalah sebagai berikut : <joined table update>::=
<nama tabel> [{, <nama tabel>}...]
SET <nama kolom>=<ekspresi> [{, <nama kolom>=<ekspresi>}...] [WHERE <definisi where>]
Cont oh.
UPDATE Buku, Pembelian
SET Buku.Stok = Buku.Stok - Pembelian.Kuantitas WHERE Buku.IDBuku= Pembelian.IDBuku
AND Pembelian.IDPembelian=1002;
Dalam pernyat aan di at as berart i, m engupdat e t abel Buku, dim ana kolom St ok y ang baru m erupakan hasil pengurangan kolom St ok yang lam a dengan kolom Kuant it as pada t abel Pem belian dengan syarat I DBuku di t abel Buku sam a dengan I DBuku di t abel Pem belian dan I DPem belian di t abel Pem belian = 1002.
Lihat lah pada pernyat aan di at as. Dalam klausa UPDATE disert akan nam a dari k edua t abel yait u Buku dan Pem belian. Meskipun Anda hanya m elakukan peng- updat e- an pada t abel Buku, Anda harus m enspesifikasik an kedua t abel karena keduanya Anda sert akan dalam t abel y ang saling j oin (j oined t ables) . Perhat ikan bahwa nam a- nam a t abel dipisahkan oleh kom a.
Klausa SET pada pernyat aan ini m enggunakan nam a kolom qualified unt uk m em berikan ekspresi pada kolom St ok. Sebuah nam a kolom qualified adalah didahului oleh nam a t abel dan sebuah t anda t it ik. Hal ini m engij inkan MySQL ( dan Anda) unt uk m em bedakan ant ara kolom - kolom pada t abel yang berbeda- beda yang m em punyai nam a yang sam a. Misal, kolom pert am a ( Buku.St ok) m enunj uk pada kolom St ok pada t abel Buku.
Berikut ini cont oh m engupdat e t abel j oin dengan banyak nilai sekaligus: UPDATE Buku, Pembelian
SET Pembelian.Kuantitas = Pembelian.Kuantitas + 2, Buku.Stok= Buku.Stok - 2
WHERE Buku.IDBuku= Pembelian. IDBuku AND Pembelian.IDPembelian = 1002;
Diktat Laboratorium Sistem Basis Data – MySQL
De p a rtm e nt o f Info rm a tic s Eng ine e ring – UNIKO M G a lih He rm a w a n, S.Ko m