Vấn đề của bạn có liên quan đến giá trị dấu phẩy động của bạn lớn như thế nào nhưng tôi không chắc 100% lý do tại sao. Tôi đã thử nghiệm cập nhật một hàng tương tự với số lượng nhỏ hơn và nó hoạt động tốt. Bạn cũng nên hạn chế sử dụng dấu ngoặc kép bất cứ khi nào có thể vì nó đòi hỏi phải xử lý thêm. Xem câu hỏi SO này: cập nhật cột bằng cách trừ đi một giá trị
Đây là công việc dễ dàng của tôi giống như Tim Biegeleisen đã đề xuất:
CREATE TABLE `xxx` (
`uid` int(11) NOT NULL,
`money` decimal(10,2) NOT NULL DEFAULT '0.00' ,
`real_money` float(10,2) NOT NULL ,
`available_invoice` float(10,2) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
Chèn:
USE dbname;
insert into xxx Values(1234, 99959040.00, 0.00, 99999.00);
Cập nhật không có chuỗi:
update xxx set money = money - 20 where uid = 1234;
Có một số điều kỳ quặc khi tính toán với các giá trị dấu phẩy động lớn. Một số vấn đề này phụ thuộc vào máy và liên quan đến loại bộ xử lý bạn có. Đọc thêm tại đây: http://dev.mysql .com / doc / refman / 5.7 / en / problem-with-float.html
Ngoài ra, theo một câu hỏi SO khác, giá trị dấu chấm động KHÔNG phải là cách tốt để lưu trữ giá trị tiền. Sự khác biệt giữa kiểu dữ liệu float và decimal (xem câu trả lời thứ hai).
Có vẻ như đang sử dụng decimal
và numeric
kiểu dữ liệu tốt nhất cho cột tiền trong mysql.