2010-10-06 38 views
101

Tôi đang sử dụng mysql và cần phải cập nhật một cột có giá trị null. Tôi đã thử nhiều cách khác nhau và tốt nhất tôi đã nhận được là một chuỗi rỗng.Cách cập nhật cột với giá trị rỗng

Có cú pháp đặc biệt để thực hiện việc này không?

+4

Liệu cột cho phép một giá trị NULL? – poke

+0

Vâng, tất nhiên. :) – jim

+6

CẬP NHẬT bảng SET cột = NULL WHERE ...; không hoạt động? –

Trả lời

158

Không cú pháp đặc biệt:

CREATE TABLE your_table (some_id int, your_column varchar(100)); 

INSERT INTO your_table VALUES (1, 'Hello'); 

UPDATE your_table 
SET your_column = NULL 
WHERE some_id = 1; 

SELECT * FROM your_table WHERE your_column IS NULL; 
+---------+-------------+ 
| some_id | your_column | 
+---------+-------------+ 
|  1 | NULL  | 
+---------+-------------+ 
1 row in set (0.00 sec) 
+0

Cảm ơn Daniel. Tôi là loại thuyết phục rằng vấn đề này có thể nằm trong mã ứng dụng của tôi – jim

27

NULL is a special value in SQL. Vì vậy, để null một tài sản, thực hiện điều này:

UPDATE table SET column = NULL; 
+0

Gumbo, tôi đã thử nhưng tất cả những gì tôi nhận được là một chuỗi rỗng. – jim

+0

Bây giờ, hãy để tôi làm rõ. Thông qua php tôi đang sử dụng PDO và cập nhật thông qua một truy vấn. – jim

+0

Hướng dẫn sử dụng MySQL nêu rõ rằng nếu cột không cho phép giá trị NULL, thiết lập nó thành NULL sẽ dẫn đến giá trị mặc định cho kiểu dữ liệu (ví dụ: một chuỗi rỗng). Bạn có 100% rằng cột của bạn cho phép NULL? Bạn có thể cho chúng tôi thấy TẠO TẠO? –

0

nếu bạn làm theo

UPDATE table SET name = NULL 

sau đó tên là "" không phải là NULL TRÊN MYSQL có nghĩa là truy vấn của bạn

SELECT * FROM table WHERE name = NULL không hoạt động hoặc làm bạn thất vọng

0

Tôi nghi ngờ vấn đề ở đây là dấu ngoặc kép được nhập dưới dạng chữ trong giá trị chuỗi của bạn. Bạn có thể đặt những cột null sử dụng:

UPDATE table SET col=NULL WHERE length(col)<3; 

Bạn nên tất nhiên đầu tiên kiểm tra xem những giá trị này có thực sự "" với một cái gì đó như:

SELECT DISTINCT(col) FROM table WHERE length(col)<3; 
0

sử dụng is thay vì =

Ví dụ : Select * from table_name where column is null

1

Một lý do khác có thể có cho chuỗi trống, thay vì đúng null là trường là một chỉ mục hoặc là một phần của chỉ mục. Điều này xảy ra với tôi: bằng cách sử dụng phpMyAdmin, tôi đã chỉnh sửa cấu trúc của một trường trong một trong các bảng của tôi để cho phép NULLs bằng cách chọn hộp kiểm "Null" rồi nhấn nút "Lưu". "Đặt giá bảng đã được thay đổi thành công" đã được hiển thị để tôi giả định rằng thay đổi đã xảy ra - không. Sau khi thực hiện một CẬP NHẬT để thiết lập tất cả những lĩnh vực để NULL, họ, thay vào đó, thiết lập để chuỗi rỗng, vì vậy tôi đã xem xét các cấu trúc bảng một lần nữa và thấy rằng "Null" cột cho trường đó đã được đặt thành 'no'. Đó là khi tôi nhận ra rằng trường này là một phần của khóa chính chính!

6

Hãy nhớ xem liệu cột của bạn có thể rỗng không. Bạn có thể làm điều đó bằng cách sử dụng

mysql> desc my_table; 

Nếu cột của bạn không thể rỗng, khi bạn đặt giá trị thành giá trị rỗng sẽ là giá trị truyền cho nó.

Dưới đây là một ví dụ

mysql> create table example (age int not null, name varchar(100) not null); 
mysql> insert into example values (null, "without num"), (2 , null); 
mysql> select * from example; 
+-----+-------------+ 
| age | name  | 
+-----+-------------+ 
| 0 | without num | 
| 2 |    | 
+-----+-------------+ 
2 rows in set (0.00 sec) 

mysql> select * from example where age is null or name is null; 
Empty set (0.00 sec) 
3

Đối với những người phải đối mặt với một vấn đề tương tự, tôi thấy rằng khi 'mô phỏng' một truy vấn SET = NULL, PHPMyAdmin sẽ ném ra một lỗi. Đó là một cá trích đỏ ..chỉ cần chạy truy vấn và tất cả sẽ tốt.

+0

Cảm ơn, tôi đã ở đây tìm kiếm bởi vì PHPMyAdmin tuyên bố có một từ khóa không được công nhận gần NULL. Sau khi đọc câu trả lời của bạn, tôi chạy truy vấn và nó được thực thi như dự định. – dading84

1

Nếu bạn muốn thiết lập giá trị null sử dụng cập nhật truy vấn thiết lập giá trị cột để NULL (không có dấu ngoặc kép) cập nhật tablename bộ columnname = NULL

Tuy nhiên, nếu bạn đang trực tiếp chỉnh sửa giá trị trường bên trong mysql workbench sau đó sử dụng (Esc + del) keystroke để chèn giá trị null vào cột chọn

5

Sử dụng IS thay vì = này sẽ giải quyết vấn đề của bạn dụ cú pháp:

UPDATE studentdetails 
SET contactnumber = 9098979690 
WHERE contactnumber IS NULL; 
+0

VERY HELPFULL, THANK YOU –

+0

bạn được chào đón, bạn có thể hỏi tôi bất kỳ câu hỏi liên quan sql –

+1

cảm ơn bạn, điều này làm việc hoàn hảo !! –

-1

Thứ nhất, cột trong bạn TABLE_NAME phải chấp nhận NULL, và bạn có thể đã nhận ra rằng để có value NULL, bạn cần phải sử dụng

Eg: UPDATE TABLE_NAME SET column_name = NULL 
    Eg: instead of using column_name = 'NULL'. 


    So, in a situation where one use a "selected value" to update a table       
    in database, such as the following very simple example, 

    Part one, 
    Condition of the variable: 
    Checkbox(name = "checkbox") 
    Eg: if not click, $_POST["checkbox"] = "", 
    Eg: if clicked, $_POST["checkbox"] = "1". 

    Now, we must try to make this $_POST["checkbox"] to convert the value ""   
    to NULL and update to the database table. 

    An alternative way that I found is to use echo and assign echo value to   
    a $variable 

    of course, you already know how to use if {} else {}. 

    To save echo value to a $variable, I did the following: 

    Eg: ob_start() 

    Eg: echo  <==hint 1: selected value here. 

    Eg: $variable1 = ob_get_contents() 

    Eg: ob_end_clean() 



    Then, you need to do this again, 

    Eg: ob_start() 

    Eg: echo <==hint 2: command line + selected value here. 

    Eg: $variable2 = ob_get_contents() 

    Eg: ob_end_clean() 


    MYSQL will be something like the following: 

    Eg: UPDATE table_name SET 
    Eg: name = '$name', 
    Eg: $variable2, 
    Eg: date = '$date' 
    Eg: WHERE id = '$id'; 

    see the trick is to how to make 
    Eg: $variable2 to show either 

    Eg: checkbox = NULL 

    or to show 
    Eg: checkbox = '1' 

    Hope this can give you a guide to solve this problem. 
    I think you have enough knowledge to fill in the blanks. Good luck. 


    Additional note: you can do the same for (MYSQL) INSERT INTO 
Các vấn đề liên quan