2011-12-19 94 views
12

Tôi hy vọng đây không phải là một câu hỏi ngớ ngẩn. Bạn có thể đặt giá trị mặc định cho tất cả các biến hoặc hàm cho khi được chèn. nhưng nếu trường không bắt buộc phải chèn và bạn không cho phép giá trị null, giá trị "trống" mà bạn thấy trong phpMyAdmin là gì? trong một truy vấn là nó trở lại như chuỗi rỗng, vv?Giá trị mặc định cho một trường nếu không có giá trị mặc định nào được cung cấp?

chỉ cố gắng tìm ra, tôi muốn truy vấn tất cả các bản ghi sao cho giá trị cho một cột cụ thể trong bản ghi đó không phải là "trống" hoặc trống hoặc bất kỳ thứ gì.

cảm ơn.

Trả lời

22

Nhắc đến manual ,

Để nhập dữ liệu cho cột NOT NULL không rõ ràng DEFAULT khoản, nếu một INSERT hoặc REPLACE tuyên bố bao gồm không có giá trị cho cột , hoặc một câu lệnh UPDATE đặt cột để NULL, MySQL xử lý cột theo phương thức SQL có hiệu lực vào thời điểm đó:

  • Nếu nghiêm ngặt Chế độ SQL không được bật, MySQL đặt cột thành giá trị mặc định ngầm cho loại dữ liệu cột.
  • Nếu chế độ nghiêm ngặt được bật, lỗi xảy ra đối với bảng giao dịch và câu lệnh được cuộn lại. Đối với các bảng không biên dịch, một lỗi
    xảy ra, nhưng nếu điều này xảy ra cho hàng thứ hai hoặc tiếp theo là một câu lệnh nhiều hàng, các hàng trước sẽ được chèn vào.

Vì vậy, câu hỏi của bạn bây giờ có thể là, giá trị mặc định ngầm cho các loại dữ liệu cột khác nhau là gì? Ở đây bạn đi:

mặc định ngầm được quy định như sau:

  • Đối với các loại số, mặc định là 0, với ngoại lệ mà cho số nguyên hoặc dấu chấm động loại khai báo với các AUTO_INCREMENT
    thuộc tính , giá trị mặc định là giá trị tiếp theo trong chuỗi.
  • Đối với các loại ngày và giờ khác với TIMESTAMP, giá trị mặc định là giá trị “không” thích hợp cho loại đó. Đối với cột TIMESTAMP đầu tiên trong bảng, giá trị mặc định là ngày và giờ hiện tại. Xem Phần 10.3, “Các loại ngày và giờ”.
  • Đối với các loại chuỗi khác với ENUM, giá trị mặc định là chuỗi rỗng. Đối với ENUM, giá trị mặc định là giá trị điều tra đầu tiên.
0

Không có giá trị mặc định trừ khi bạn chỉ định một (ví dụ: trừ khi bạn xác định "ràng buộc mặc định" cho cột được đề cập).

Dưới đây là một ví dụ cho việc thêm một mặc định trên một cột hiện có:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

Dưới đây là một ví dụ tạo bảng với một mặc định:

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

Đó là thực hành tốt để khai báo tất cả các cột "không null "và cung cấp các ràng buộc mặc định khi thích hợp.

Trong ví dụ "sách" ở trên, nếu bạn "chèn" mà không chỉ định PubID, PubID sẽ bằng không.

Trong ví dụ tương tự, nếu bạn "chèn" mà không chỉ định ID hoặc Tên ... bạn sẽ gặp lỗi.

Nếu bạn muốn MySQL để tự động gán một ID, sử dụng cú pháp này để thay thế:

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 
-1

Nếu bạn muốn không cho phép null: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

Các truy vấn trên sẽ không cho phép vô gán một chuỗi rỗng khi giá trị không được cung cấp.
Trong phpmysqladmin, blank = empty.
Qua PHP mysqli function hoặc mysql function, null value is returned as null vẫn còn.

Một khi bạn đã áp dụng các truy vấn, bạn có thể dễ dàng lọc rằng bằng cách sử dụng

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

Tuy nhiên, là tốt nhất cho bạn làm điều này trước khi thực hiện bàn thờ: -

update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

Đây không phải là điều nên làm. 'NULL' có nghĩa là thiếu giá trị (không xác định) và ** không ** giống như một giá trị rỗng. –

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