Source: Mehrnaz Bassiri |
Ketika sebuah data telah tersimpan didalam database tentunya akan ada saja perubahan data yang dilakukan entah karena telah melakukan kesalahan saat menambahkan data, atau memang harus melakukan pembaharuan pada data yang tersimpan. MySQL menyediakan perintah UPDATE sebagai cara untuk mengubah data yang tersimpan, berikut format dan contohnya:
Format:
Update nama_tabel set nama_kolom = data_baru where kondisi;
Contoh:
mysql> select id_dosen, nama from dosen;
+----------+-------------------------------------+
| id_dosen | nama |
+----------+-------------------------------------+
| 1 | Angga Sandra Saputra, DR. SKOM., MT |
| 2 | AA Ardiansyah, ST., MT |
| 3 | AA Sumanto, SE., MMSI |
| 4 | Aiman, SE., MM |
| 5 | Aldi Taher, ST., MT |
+----------+-------------------------------------+
5 rows in set (0.00 sec)
mysql> Update dosen set nama = "Adi Nugraha, ST., MT" where id_dosen = 1;
Query OK, 1 row affected (0.28 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select id_dosen, nama from dosen;
+----------+------------------------+
| id_dosen | nama |
+----------+------------------------+
| 1 | Adi Nugraha, ST., MT |
| 2 | AA Ardiansyah, ST., MT |
| 3 | AA Sumanto, SE., MMSI |
| 4 | Aiman, SE., MM |
| 5 | Aldi Taher, ST., MT |
+----------+------------------------+
5 rows in set (0.00 sec)
Pada contoh diatas kita hanya melakukan perubahan data pada satu baris data yakni pada kolom id_dosen yang memiliki nilai id_dosen = 1 dan jika ingin melakukan perubahan data lebih dari satu baris maka diperlukan kondisi pdada data yang akan dirubah, contohnya seperti berikut:
mysql> select id_dosen, nama, kota from dosen;
+----------+------------------------+---------------+
| id_dosen | nama | kota |
+----------+------------------------+---------------+
| 1 | Adi Nugraha, ST., MT | Jakarta Barat |
| 2 | AA Ardiansyah, ST., MT | Jakarta Timur |
| 3 | AA Sumanto, SE., MMSI | Jakarta Utara |
| 4 | Aiman, SE., MM | Jakarta Pusat |
| 5 | Aldi Taher, ST., MT | Jakarta Barat |
+----------+------------------------+---------------+
5 rows in set (0.00 sec)
mysql> Update dosen set kota = "Bogor" where kota = "Jakarta Barat";
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> update dosen set kota = "Bekasi" where id_dosen = 2 or id_dosen = 4;
Query OK, 2 rows affected (0.14 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> Select id_dosen, nama, kota from dosen;
+----------+------------------------+---------------+
| id_dosen | nama | kota |
+----------+------------------------+---------------+
| 1 | Adi Nugraha, ST., MT | Bogor |
| 2 | AA Ardiansyah, ST., MT | Bekasi |
| 3 | AA Sumanto, SE., MMSI | Jakarta Utara |
| 4 | Aiman, SE., MM | Bekasi |
| 5 | Aldi Taher, ST., MT | Bogor |
+----------+------------------------+---------------+
5 rows in set (0.00 sec)
Banyaknya data yang diubah bergantung pada kondisi yang kalian tentukan sehingga perlu berhati-hati terlebih jangan sampai lupa untuk menambah kondisi karena jika tidak, semua data pada kolom akan diganti, contohnya seperti berikut:
mysql> Update dosen set kota = "Bogor";
Query OK, 3 rows affected (0.05 sec)
Rows matched: 5 Changed: 3 Warnings: 0
mysql> select id_dosen, nama, kota from dosen;
+----------+------------------------+-------+
| id_dosen | nama | kota |
+----------+------------------------+-------+
| 1 | Adi Nugraha, ST., MT | Bogor |
| 2 | AA Ardiansyah, ST., MT | Bogor |
| 3 | AA Sumanto, SE., MMSI | Bogor |
| 4 | Aiman, SE., MM | Bogor |
| 5 | Aldi Taher, ST., MT | Bogor |
+----------+------------------------+-------+
5 rows in set (0.00 sec)
Duplikasi data
Jika menambahkan data duplikasi pada kolom dengan primary maupun unique constraint saja tidak bisa, maka kita juga tidak akan bisa mengganti/merubah data dengan nilai yang sudah ada, contohnya seperti berikut:
mysql> desc dosen;
+----------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+----------------+
| id_dosen | int | NO | PRI | NULL | auto_increment |
| nid | char(8) | YES | UNI | NULL | |
| nama | varchar(65) | YES | | NULL | |
| j_kel | enum('L','P') | YES | | NULL | |
| t_lahir | date | YES | | NULL | |
| alamat | varchar(50) | YES | | NULL | |
| kota | varchar(50) | YES | | NULL | |
| telepon | char(12) | YES | | NULL | |
| email | varchar(50) | YES | | NULL | |
+----------+---------------+------+-----+---------+----------------+
9 rows in set (0.23 sec)
mysql> update dosen set nid = 40010001 where nid = 50010001;
ERROR 1062 (23000): Duplicate entry '40010001' for key 'dosen.nid'
mysql> update ignore dosen set nid = 40010001 where nid = 50010001;
Query OK, 0 rows affected, 1 warning (0.10 sec)
Rows matched: 1 Changed: 0 Warnings: 1
mysql> select id_dosen, nid, nama from dosen;
+----------+----------+------------------------+
| id_dosen | nid | nama |
+----------+----------+------------------------+
| 1 | 40010001 | Adi Nugraha, ST., MT |
| 2 | 50010001 | AA Ardiansyah, ST., MT |
| 3 | 60010001 | AA Sumanto, SE., MMSI |
| 4 | 70010006 | Aiman, SE., MM |
| 5 | 80010005 | Aldi Taher, ST., MT |
+----------+----------+------------------------+
5 rows in set (0.00 sec)
Kendati kita dapat menggunakan update ignore untuk menghilangkan pesan error duplicate entry namun hal tersebut juga tidak akan merubah data pada kolom dengan primary maupun unique constraint.
Update data secara berurutan
Seperti yang sudah penulis sampaikan sebelumnya bahwa data yang diubah bergantung pada kondisi yang ditentukan, pada kali ini merubah data menggunakan klausa order by, contohnya seperti berikut:
mysql> select id_dosen, nama, kota from dosen order by kota;
+----------+------------------------+------------+
| id_dosen | nama | kota |
+----------+------------------------+------------+
| 1 | Adi Nugraha, ST., MT | Bali |
| 5 | Aldi Taher, ST., MT | Bogor |
| 2 | AA Ardiansyah, ST., MT | Surabaya |
| 4 | Aiman, SE., MM | Tangerang |
| 3 | AA Sumanto, SE., MMSI | Yogyakarta |
+----------+------------------------+------------+
5 rows in set (0.00 sec)
mysql> update dosen set kota = "Jakarta" order by kota limit 3;
Query OK, 3 rows affected (0.10 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> select id_dosen, nama, kota from dosen order by kota;
+----------+------------------------+------------+
| id_dosen | nama | kota |
+----------+------------------------+------------+
| 1 | Adi Nugraha, ST., MT | Jakarta |
| 2 | AA Ardiansyah, ST., MT | Jakarta |
| 5 | Aldi Taher, ST., MT | Jakarta |
| 4 | Aiman, SE., MM | Tangerang |
| 3 | AA Sumanto, SE., MMSI | Yogyakarta |
+----------+------------------------+------------+
5 rows in set (0.00 sec)
Dari contoh diatas, penulis merubah sejumlah data kota pada tabel dosen berdasarkan urutan kota secara ascending namun dibatasi hanya tiga data saja yang diubah.