Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ป้องกันตัวเลขติดลบใน MySQL?


เพื่อป้องกันตัวเลขติดลบใน MySQL คุณต้องใช้ INT UNSIGNED สมมติว่าคุณสร้างตารางที่มีคอลัมน์เป็น int เช่น UserGameScores ที่นี่

mysql> สร้างตาราง preventNegativeNumberDemo -> ( -> UserId int ไม่ใช่ NULL AUTO_INCREMENT PRIMARY KEY, -> UserName varchar(20), -> UserGameScores int -> );Query OK, 0 แถวได้รับผลกระทบ (1.74 วินาที)

ตอนนี้ ถ้าคุณต้องการป้องกันตัวเลขติดลบ ให้แก้ไขคอลัมน์เดียวกันกับ INT UNSIGNED

mysql> แก้ไขตารางป้องกันNegativeNumberDemo แก้ไขคอลัมน์ UserGameScores INT UNSIGNED NOT NULL ตกลง ตกลง 0 แถวได้รับผลกระทบ (3.32 วินาที) บันทึก:0 รายการซ้ำ:0 คำเตือน:0

ตรวจสอบคำอธิบายตารางอีกครั้ง

แบบสอบถามมีดังนี้

mysql> desc ป้องกันNegativeNumberDemo;

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+----------------+-------------------+------+--- ---+----------------------+----------------+| สนาม | พิมพ์ | Null | คีย์ | ค่าเริ่มต้น | พิเศษ |+----------------+--------------------------------+------+---- ------------------------+----------------+| รหัสผู้ใช้ | int(11) | ไม่ | PRI | NULL | auto_increment || ชื่อผู้ใช้ | varchar(20) | ใช่ | | NULL | || UserGameScores | int(10) ไม่ได้ลงนาม | ไม่ | | NULL | |+---------------------------------------------------------+---- +---------+----------------+3 แถวในชุด (0.00 วินาที)

ตอนนี้ ถ้าคุณพยายามแทรกตัวเลขติดลบสำหรับคอลัมน์ UserGameScores แล้ว MySQL จะแจ้งข้อผิดพลาดเนื่องจากเราได้ตั้งค่าเป็น INT UNSIGNED ให้เราใส่ค่าบางค่ารวมทั้งจำนวนลบ

mysql> แทรกลงในค่า preventNegativeNumberDemo(UserName,UserGameScores) ('Larry',0);การสืบค้นตกลง ได้รับผลกระทบ 1 แถว (1.20 วินาที)mysql> แทรกลงในค่า preventNegativeNumberDemo (ชื่อผู้ใช้ UserGameScores) ('Mike',-1 );ข้อผิดพลาด 1264 (22003):ค่านอกช่วงสำหรับคอลัมน์ 'UserGameScores' ที่แถว 1mysql> แทรกลงในค่าป้องกันNegativeNumberDemo(ชื่อผู้ใช้, UserGameScores) ('Sam', -100);ข้อผิดพลาด 1264 (22003):ค่านอกช่วงสำหรับ คอลัมน์ 'UserGameScores' ที่แถว 1mysql> แทรกลงในค่า preventNegativeNumberDemo (ชื่อผู้ใช้ UserGameScores) ('John', 100) แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.84 วินาที) mysql> แทรกลงในค่า preventNegativeNumberDemo (ชื่อผู้ใช้ UserGameScores) ค่า ('Bob' ,200);แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.48 วินาที)

ดูข้อผิดพลาดด้านบนเมื่อเราพยายามใส่ค่าลบ

ตอนนี้แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select เฉพาะตัวเลขบวกเท่านั้นที่จะแทรก

mysql> เลือก *จาก preventNegativeNumberDemo;

ต่อไปนี้เป็นผลลัพธ์

<ก่อนหน้า>+---------+----------+----------------+| รหัสผู้ใช้ | ชื่อผู้ใช้ | UserGameScores |+-------+----------+----------------+| 1 | แลร์รี่ | 0 || 2 | จอห์น | 100 || 3 | บ๊อบ | 200 |+-------+----------+----------------+3 แถวในชุด (0.00 วินาที)