Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menambahkan batasan bilangan bulat positif ke kolom bilangan bulat di MySQL?

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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana menemukan nomor seri tanpa celah di mysql?

  2. Batas ukuran MySQL VARCHAR

  3. Apa yang setara dengan REF CURSOR Oracle di MySQL?

  4. MySql.Data.MySqlClient.MySqlException:Batas waktu kedaluwarsa

  5. Cara termudah untuk membangun pohon dari daftar Leluhur