Anda akan menggunakan kata kunci unsigned
untuk menandakan bahwa bilangan bulat tidak mengizinkan "tanda" (yaitu - hanya bisa positif):
CREATE TABLE test (
test_column int(11) unsigned
);
Anda dapat membaca lebih lanjut tentang tipe data numerik (ditandatangani &tidak ditandatangani) disini .
Sejauh batasan yang sebenarnya untuk mencegah penyisipan-nilai negatif, MySQL memiliki CHECK
klausa yang dapat digunakan dalam CREATE TABLE
pernyataan, bagaimanapun, menurut dokumentasi:
Untuk referensi, inilah cara Anda menggunakannya (dan meskipun itu akan berjalan dengan baik, itu tidak melakukan apa-apa - seperti yang dinyatakan manual):
CREATE TABLE test (
test_column int(11) unsigned CHECK (test_column > 0)
);
PERBARUI (menolak sepenuhnya nilai negatif)
Saya melihat dari beberapa komentar Anda bahwa Anda ingin kueri dengan nilai negatif ditolak sepenuhnya dan tidak disetel ke 0
(sebagai transaksi normal menjadi unsigned
kolom akan dilakukan). Tidak ada batasan yang dapat melakukan ini secara umum (setidaknya saya tahu), jika Anda mengaktifkan mode ketat (dengan STRICT_TRANS_TABLES
) kueri apa pun yang memasukkan nilai negatif ke dalam kolom yang tidak ditandatangani akan gagal dengan kesalahan (bersama dengan kesalahan penyisipan data lainnya, seperti enum
yang tidak valid) nilai).
Anda dapat mengujinya dengan menjalankan perintah berikut sebelum memasukkan perintah:
SET @@SESSION.sql_mode = 'STRICT_TRANS_TABLES';
Dan jika berhasil, Anda dapat memperbarui konfigurasi MySQL dengan sql-mode="STRICT_TRANS_TABLES"
atau gunakan SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES';
(Saya tidak yakin apakah SET
perintah akan mempengaruhi konfigurasi mysql global, jadi mungkin lebih baik untuk memperbarui file konfigurasi yang sebenarnya).