Trường của họ có phải là trường int trong mysql không cho phép số âm? hoặc cụ thể hơn nếu một số âm được chèn vào trường, nó sẽ chèn một số không. Tôi hỏi điều này bởi vì chúng tôi có một hệ thống tính điểm và chúng tôi không cho phép mọi người có điểm số âm. Vì vậy, nếu điểm số của họ không đạt được dưới 0, nó sẽ chỉ chèn một số không thay thế. Tôi đang cố gắng để làm điều này mà không cần phải truy vấn điểm số của người dùng để kiểm tra xem nó sẽ giảm dưới không.mysql ngăn chặn số âm
Trả lời
Ngoài thay đổi DDL (INT UNSIGNED) mà người khác đã đề xuất, tôi cũng sẽ thay đổi logic ứng dụng của bạn. nói:
tôi đang cố gắng để làm điều này mà không cần phải truy vấn số điểm của người sử dụng để kiểm tra xem nó sẽ rơi dưới zero
Bạn không cần phải kiểm tra một cách rõ ràng trong một riêng biệt. truy vấn:
UPDATE your_table
SET score = GREATEST(score + ?, 0) -- This '?' is the adjustment to the score
WHERE user_id = ?
Hiện tại, ứng dụng của bạn không thể CẬP NHẬT score
để giảm xuống dưới 0, cũng không tạo ra lỗi hoặc cảnh báo tùy thuộc vào chế độ SQL.
Có. Bạn có thể tạo trường int
và đánh dấu nó là UNSIGNED
.
Từ MySQL 5.0 Reference Manual:
INT[(M)] [UNSIGNED] [ZEROFILL]
A normal-size integer. The signed range is -2147483648 to 2147483647.
The unsigned range is 0 to 4294967295.
Nhưng cố gắng chèn số nguyên vào cột int không dấu sẽ không ném lỗi – Raaghu
MySQL có một vòng loại UNSIGNED
với nhiều loại nguyên.
giá trị âm sẽ được kẹp bằng không, nhưng sẽ tạo ra một cảnh báo:
mysql> create table test (id int(5) unsigned not null);
Query OK, 0 rows affected (0.05 sec)
mysql> insert into test values (-1), (5), (10);
Query OK, 3 rows affected, 1 warning (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 1
mysql> select * from test;
+----+
| id |
+----+
| 0 |
| 5 |
| 10 |
+----+
3 rows in set (0.01 sec)
Cảnh báo có gây ra lỗi mysql nếu tôi gặp lỗi không? – user962449
@ user962449 Tôi không biết, tôi chưa bao giờ bật lỗi bắt như vậy. Tại sao bạn không thử nó? – Alnitak
Nếu bạn đang chạy trong chế độ nghiêm ngặt sql này sẽ ném ra một lỗi và chèn/cập nhật sẽ thất bại.
Tôi thường tạo một hàm do người dùng xác định cho loại điều này. (Trong trường hợp này, "if (expr1, expr2, expr3)" sẽ thực hiện thủ thuật
- 1. Mysql tạm thời ngăn chặn chỉ số duy nhất
- 2. Ngăn chặn nhiều âm báo thông báo android
- 3. ngăn chặn autoincrementing số nguyên khóa chính?
- 4. Ngăn chặn CSRF?
- 5. Ngăn chặn DOM XSS
- 6. Ngăn chặn tiêm LDAP
- 7. Haskell hĐóng ngăn chặn
- 8. Ngăn chặn ngoại lệ
- 9. làm thế nào để ngăn chặn array_merge renumber phím số
- 10. Ngăn chặn strace từ viết tắt đối số?
- 11. Tự quét mã để ngăn chặn các số liệu in
- 12. Ngăn chặn ssh phá vỡ các tham số script shell
- 13. Ngăn chặn bỏ phiếu đôi
- 14. ngăn chặn csrf trong php
- 15. Làm thế nào có thể ngăn chặn âm thanh video youtube sau inappbrowser gần
- 16. Ngăn chặn chuỗi chuyển đổi chứa số E và số thành số
- 17. Ngăn chặn menu chọn mở
- 18. Ngăn chặn khóa tuyên truyền
- 19. IOS: ngăn chặn một NSTimer
- 20. Ngăn chặn nút quay lại
- 21. Ngăn chặn giả mạo IP
- 22. Làm thế nào để ngăn chặn bội số của 13 xuất hiện trong một cột IDENTITY
- 23. PHP/MySQL - làm thế nào để ngăn chặn hai yêu cầu * Cập nhật
- 24. C + + ngăn chặn hàng đợi chặn bế tắc (tôi nghĩ)
- 25. brew cài đặt mysql, lỗi khi cố gắng ngăn chặn các máy chủ
- 26. Ngăn chặn MySQL từ chèn giá trị mặc định ngầm vào không cột rỗng
- 27. MySQL-Linux lỗi khi cố gắng ngăn chặn dịch vụ của mình
- 28. Ngăn chặn/Chặn BroadcastReceiver trong một ứng dụng khác
- 29. CScript/WScript Ngăn chặn một lỗi đang bị chặn
- 30. Javascript ngăn chặn chức năng ẩn danh?
Đây là một ý tưởng rất hữu ích. Tôi đã thay đổi một số lĩnh vực để unsigned nhưng họ kích hoạt phương pháp xử lý lỗi hiện có và tôi đã phải loại bỏ chúng. Điều này rất hữu ích để tránh truy vấn/kết nối vô nghĩa để kiểm tra. – M1ke