Untuk pembuatan sebuah tabel dalam MySQL, selain mendefinisikan tipe data, kita juga dapat mendefinisikan atribut dari tipe data tersebut. Dalam tutorial belajar MySQL kali ini kita akan membahas tentang pengertian serta cara penggunaan atribut tipe data dalam MySQL.
Pengertian Atribut tipe data MySQL
Atribut tipe data adalah aturan yang kita terapkan untuk sebuah kolom. MySQL memiliki banyak atribut tipe data, namun dalam tutorial ini kita hanya membahas atribut tipe data yang paling umum digunakan, yakni: AUTO_INCREMENT, BINARY, DEFAULT, NOT NULL, NULL, SIGNED, UNSIGNED, dan ZEROFILL.
Atribut AUTO_INCREMENT
Atribut AUTO_INCREMENT digunakan untuk tipe data numerik (biasanya tipe data INT), dimana jika kita menetapkan sebuah kolom dengan atribut AUTO_INCREMENT, maka setiap kali kita menginputkan data, nilai pada kolom ini akan bertambah 1. Nilai pada kolom tersebut juga akan bertambah jika kita input dengan NULL Â atau nilai 0.
Pada sebuah tabel, hanya 1 kolom yang dapat dikenai atribut AUTO_INCREMENT. Setiap kolom AUTO_INCREMENT juga akan dikenakan atribut NOT NULL secara otomatis. Kolom AUTO_INCREMENT juga harus digunakan sebagai KEY (biasanya PRIMARY KEY)
Atribut BINARY
Atribut BINARY digunakan untuk tipe data huruf, seperti CHAR dan VARCHAR. Tipe data CHAR, VARCHAR dan TEXT tidak membedakan antara huruf besar dan kecil (case-insensitive), namun jika diberikan atribut BINARY, maka kolom tersebut akan membedakan antara huruf besar dan kecil (case-sensitive)
Atribut DEFAULT
Atribut DEFAULT dapat digunakan pada hampir semua tipe data. Fungsinya untuk menyediakan nilai bawaan untuk kolom seandainya tidak ada data yang diinput kepada kolom tersebut.
Atribut NOT NULL
Atribut NOT NULL dapat digunakan pada hampir semua tipe data, Fungsinya untuk memastikan bahwa nilai pada kolom tersebut tidak boleh kosong. Jika kita menginput data, namun tidak memberikan nilai untuk kolom tersebut, akan menghasilkan error pada MySQL.
Atribut NULL
Atribut NULL berkebalikan dengan NOT NULL, dimana jika sebuah kolom didefinisikan dengan NULL, maka kolom tersebut tidak harus berisi nilai.
Atribut SIGNED
Atribut SIGNED digunakan untuk tipe data numerik. Berlawanan dengan atribut UNSIGNED, dimana atribut ini berfungsi agar kolom dapat menampung nilai negatif. Atribut SIGNED biasanya dicantumkan hanya untuk menegaskan bahwa kolom tersebut mendukung nilai negatif, karena MySQL sendiri telah menyediakan nilai negatif secara default untuk seluruh tipe numerik.
Atribut UNSIGNED
Atribut UNSIGNED digunakan untuk tipe data numerik, namun berbeda sifatnya untuk tipe data INT,DECIMAL dan FLOAT. Untuk tipe data INT, atribut UNSIGNED berfungsi mengorbankan nilai negatif, untuk mendapatkan jangkauan nilai positif yang lebih tinggi. Namun untuk tipe data DECIMAL dan FLOAT, atribut UNSIGNED hanya akan menhilangkan nilai negatif, tanpa menambah jangkauan data.
Atribut ZEROFILL
Atribut ZEROFILL digunakan untuk tipe data numerik, dimana berfungsi untuk tampilan format data yang akan mengisi nilai 0 di sebelah kanan dari data. Jika kita menggunakan atribut ZEROFILL untuk suatu kolom, secara otomatis kolom tersebut juga dikenakan attribut UNSIGNED.
Contoh query untuk penggunaan attribut :
mysql> CREATE TABLE contoh_att (no int AUTO_INCREMENT, nama VARCHAR(30) NOT NULL,umur TINYINT UNSIGNED DEFAULT '10', kodepos CHAR(5) NULL,PRIMARY KEY(no)); Query OK, 0 rows affected (0.13 sec) mysql> DESCRIBE contoh_att; +---------+---------------------+------+-----+---------+----------------+ | Field  | Type               | Null | Key | Default | Extra         | +---------+---------------------+------+-----+---------+----------------+ | no     | int(11)            | NO  | PRI | NULL   | auto_increment | | nama   | varchar(30)        | NO  |    | NULL   |               | | umur   | tinyint(3) unsigned | YES |    | 10     |               | | kodepos | char(5)            | YES |    | NULL   |               | +---------+---------------------+------+-----+---------+----------------+ 4 rows in set (0.01 sec) mysql> INSERT INTO contoh_att VALUES (NULL,'Joko',NULL,20155); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO contoh_att VALUES (0,'Amir',23,27118); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO contoh_att VALUES (6,'Thasya',24,30012); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO contoh_att VALUES (9,NULL,32,10099); ERROR 1048 (23000): Column 'nama' cannot be null mysql> INSERT INTO contoh_att VALUES (NULL,'Rina',21,10889); Query OK, 1 row affected (0.05 sec) mysql> SELECT * FROM contoh_att; +----+--------+------+---------+ | no | nama  | umur | kodepos | +----+--------+------+---------+ | 1 | Joko  | NULL | 20155  | | 2 | Amir  |  23 | 27118  | | 6 | Thasya |  24 | 30012  | | 7 | Rina  |  21 | 10889  | +----+--------+------+---------+ 4 rows in set (0.00 sec)
Dapat kita lihat bahwa jika kita memberikan nilai NULL kepada kolom nama yang telah diberikan atribut NOT NULL, MySQL akan memberikan error. Juga pada kolom no, dimana kita lompat dengan memberikan nilai 6, namun untuk kolom selanjutnya, akan tetap ditambah sebanyak 1, karena dikenai atribut AUTO_INCREMENT.
Setelah membahas atribut tipe data, dalam tutorial berikutnya kita akan membahas cara mengubah tabel dengan query ALTER TABLE.
kalo query NOT IN gimana bos?
Saya berencana akan membahas query NOT IN dalam tutorial MySQL query lanjutan, karena fungsinya akan sedikit advanced, ditunggu saja y, Fauzi…
terima kasih om, ijin boorkmark.
Dengan senang hati dedy… semoga bisa bermanfaat…
ASK
Pak, kalo cara untuk menampilkan pesan ‘error’ yg terjadi jika input kan Data ‘kosong’ pada kolom yg memiliki Atribut ‘NOT NUll’
di Form yg kita buat di WEB (php), bagaimana pak??
ya walopun bisa kita akali dgn munggunakan fitur html5 pada kolom Field dgn mnambahakn *required ,..
Kalau ingin menampilkan pesan error, biasanya dilakukan pada saat proses validasi form, yaitu ketika form dikirim ke halaman pemrosesan, namun sebelum diinput ke database.
Saya berencana akan membuat tutorial lengkap mengenai ini. Semoga berkenan menunggu :)
Mas, Kalau kita ingin membuat kolom auto increment jadi dimulai dari 0 lagi bagaimana?
Kalau boleh tau tujuannya untuk apa ya? soalnya kolom auto_increment biasanya digunakan sebagai primary key, sehingga kalau di reset kemungkinan besar akan error karena ada baris berisi angka yang sama.
untuk MySQL versi lama (table engine=MyISAM), bisa menggunakan query berikut:
ALTER TABLE nama_tabel AUTO_INCREMENT = 1
Tetapi untuk MySQL versi terbaru (table engine=InnoDB), query diatas hanya bisa digunakan untuk membuat kolom auto_increment yang angkanya lebih tinggi dari nilai maksimum yang sudah ada di dalam tabel, misalnya:
ALTER TABLE nama_tabel AUTO_INCREMENT = 10000
maka, baris berikutnya akan menggunakan nilai 10001.
Tapi kalau ingin menghapus seluruh tabel, sekaligus mereset auto_increment, bisa menggunakan perintah:
TRUNCATE TABLE nama_tabel
Query diatas akan MENGHAPUS seluruh isi tabel, sekaligus me-reset kolom auto increment kembali menjadi 0.
Selamat sore gan, saya mau nanya kalo misalnya saya mau mau bikin data autoincrement tapi mulainya tidak dari 1, misalnya angka 5 digit 11130 dan seterusnya, querynya gimana ya gan? Terimakasih sebelumnya.
Setelah pembuatan tabel, bisa menggunakan query berikut gan:
ALTER TABLE nama_tabel AUTO_INCREMENT = 11130
Maka untuk kolom auto increment berikutnya akan menggunakan nomor 11131, 11132, 11133, dst.
Semoga bisa membantu :)
Mas saya mau nanya, apa memang atribut auto increment akan reset data otomatis ketika database kosong (tidak di truncate sebelumnya) dan xampp dimatikan? Terima kasih sebelumnya.
G sis, atribut auto increment akan tetap ada 'selamanya', kecuali tabel di hapus dan dibuat ulang (query truncate). Juga g pengaruh ketika XAMPPnya dimatikan, kolom auto increment akan selalu bertambah selama tabel tersebut ada.
Gan, mau sedikit nanya nih,
Di contoh yang agan tulis, untuk field umur khan default-nya 10. Menurut penjelasan agan kalau di input sama NULL, harus-nya field umur diisi dengan nilai default yang sudah kita define, yaitu 10. Tapi di contoh yang agan sajikan kok tetap jadi NULL ya di keluaran tabel-nya? Saya sudah coba juga sama tetap NULL. Apa saya ada yang miss disini atau gimana ya gan?
Nice artikel BTW, saya udah khatam HTML sama PHP dari duniailkom, lagi lanjut MYSQL, sama mungkin nanti JavaScript-nya. Keep posting ya. :)
Sepertinya saya yang salah ngasih penjelasan nih gan, seharusnya nilai default baru dicantumkan jika kolom tersebut tidak ditambahkan nilai apa2, atau sengaja tidak ditulis, misalnya dengan query:
INSERT INTO contoh_att (no,nama,kodepos) VALUES (10,'Alex',14002);
Sedangkan jika diinput dengan NULL, nilai NULL-lah yang akan digunakan (akan menimpa nilai default), karena NULL juga adalah sebuah 'data'.
Terimakasih koreksinya gan, penjelasan di bagian tersebut juga sudah saya update :)
INSERT INTO contoh_att VALUES (10,'Alex',14002);
itu ngga bisa gan error.
ERROR 1136 (21S01): Column count doesn't match value count at row 1
gmn caranya biar nilai default 10 nya muncul? selain menambahkan nilai defaultnya:
INSERT INTO contoh_att VALUES (NULL,'Joko',DEFAULT,20155);
INSERT INTO contoh_att VALUES (NULL,'Joko',,20155);
begitu jg ngga bisa, di spasi kosong jg ngga bisa. bisa ngga ya diinput kosong biar dpt nilai defaultnya 10? makasiih
Kak, Primary key & foreign key itu termasuk atribut bukan kak?
cara penggunaannya bagaimana?
oh iya kalau mau lihat atribut apa aja yang ada di mysql lihatnya dmn ya kak? ada referensi nya gak?
Bisa dibilang seperti itu, karena cara penulisannya mirip seperti atribut tabel.
Teori untuk Primary key % Foreign key cukup panjang. Kalau mau lebih lengkap bisa coba beli buku pengantar teori database :)
Singkatnya, Primary Key ini kolom yang menjadi patokan dari setiap baris data di dalam tabel. Kolom ini mesti unik (tidak boleh ada yang sama). Contonya seperti No KTP, NIM (Nomor Induk Mahasiswa), NIK (Nomor Induk Karyawan), Kode Barang, dll. Nama tidak bisa dijadikan Primary key, karena sangat mungkin ada nama yang sama.
Kalau Foreign key digunakan sebagai penghubung sebuah tabel dengan tabel lain. Kolom Foreign key berisi data yang berasal dari primary key tabel lain.
Mudah2an nanti akan ada artikel lengkapnya di duniailkom :)
Bagaimana cara membetulkan mysql yang eror yang bertuliskan colums cannot be null
Error "colums cannot be null" berarti nilai kolomnya g boleh kosong. Solusinya tinggal input data ke kolom tersebut gan (g boleh di kosongkan)
Gan, mau tanya dlu nih boleh gan
gan kenapa autoincremenya error ya kaya ga disimpen tiap countnya tiap di matin xamppnya auto incremenya 0 lagi kalo diinsert lewat sql database dengan nila tertentu baru bisa lagi di form phpnya ? kira-kira apanya ya gan
Saya kurang tau juga kok bisa seperti itu gan. Mungkin di kode PHPnya ada perintah untuk reset kembali auto increment, atau ada perintah untuk insert ulang data ke tabel menggunakan angka yang sama.
Soalnya seperti yang agan bilang, kalau di insert langsung g ada masalah, berarti yang buat itu dari kode PHPnya. Juga biasanya ketika sebuah kolom di set sebagai auto-increment, akan error jika terdapat angka yang sama.
mas jika saya input nilainya NULL dengan type data FLOAT maka hasil inputan menjadi 0, bagaimana cara inputan saya tetap NULL? terimakasih.
Terimakasih Mas, Akhirnya saya dapat memahami apa itu NOT NULL.
Mas yang default itu kenapa umurnya tidak menjadi 10? Bagaimana cara insertnya supaya umur menjadi 10. Terimakasih
Caranya bisa dengan tidak memberikan nilai apapun kepada kolom 'umur' pada saat query INSERT, seperti perintah berikut:
INSERT INTO contoh_att (no,nama,kodepos) VALUES (NULL,'Joko',20155);
Oke mas, akan saya coba dulu ya, terimakasih
permisi saya mau bertanya, pada contoh diatas sebenarnya apa fungsi dari default '10'. dia berpengaruh pada saat apa? ketika saya mengisi tabel kolom umur dengan null hasilnya juga null, ketika saya tidak mengisi kolom umur, maka hasilnya error. jadi dampaknya apa? boleh dijelaskan.