2012-05-24 39 views
5

Tôi cố gắng để sử dụng nhiều chèn (trong một tuyên bố) và tôi có cấu trúc bảng nàyNgăn chặn MySQL từ chèn giá trị mặc định ngầm vào không cột rỗng

CREATE TABLE Scores 
(
    studentID varchar(50) not null, 
    score int 
) 
ENGINE = InnoDB 

Query của tôi:

INSERT INTO Scores Values 
('Barry', 45), 
(NULL, 41), 
('Jones', 53) 

này tuyên bố (tôi dự kiến) nên thất bại vì [StudentID] cột không chấp nhận NULL. Vấn đề là MySQL chèn chuỗi rỗng ('') vào hàng 2 ... và cho phép phần còn lại tiếp tục.

Trả lời

11

Vấn đề:

SET SQL_MODE='STRICT_ALL_TABLES' 

hoặc đặt

SQL_MODE='STRICT_ALL_TABLES' 

dưới [mysqld] vào my.cnf (sau đó khởi động MySQL).

+0

nếu tôi không có đặc quyền đó trên MySQL thì sao ?? Có thể làm điều đó từ PHP của tôi không? Ngoài ra, tài liệu MySQL cho biết việc thay đổi SQL_MODE có thể ảnh hưởng đến các phần khác của DB (ví dụ: Phân vùng, Master + Slave ...) – codingbiz

+1

@tunmisefasipe: tất cả người dùng đều có đặc quyền đó (cho phiên hiện tại của họ). Để làm điều đó từ 'PHP', chỉ cần phát hành' mysql_query ("SET SQL_MODE = 'STRICT_ALL_TABLES'") 'hoặc tương tự của nó trong thư viện bạn đang sử dụng. Có, nó có thể ảnh hưởng đến các phần khác của cơ sở dữ liệu. – Quassnoi

+0

Cảm ơn bạn @Quassnoi Tôi sẽ thử điều này và xem mọi thứ diễn ra như thế nào – codingbiz

Các vấn đề liên quan