Cách cập nhật cột với giá trị null


148

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

Có một cú pháp đặc biệt để làm điều này?


4
Cột có cho phép giá trị NULL không?
chọc

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

1
Không hoàn toàn không. Đó là thực sự lạ
jim

Câu trả lời:


226

Không có 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)

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

42

NULLlà một giá trị đặc biệt trong SQL. Vì vậy, để null một tài sản, làm điều này:

UPDATE table SET column = NULL;

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 truy vấn.
jim

1
Hướng dẫn sử dụng MySQL nói rằng nếu cột không cho phép các giá trị NULL, việc đặt 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 trống). Bạn có 100% rằng cột của bạn cho phép NULL? Bạn có thể chỉ cho chúng tôi BẢNG TẠO?

Tôi chắc chắn 1000%. Tôi đã kiểm tra nó hai lần. Hãy để tôi nhìn thêm một lần nữa.
jim

Vâng, trên thực tế là null. Tôi có thể thấy NULL được sản xuất bởi phần mềm frnt end của tôi trong dữ liệu nên là null.
jim

20

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

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Hãy nhớ xem nếu cột của bạn có thể là null. 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 null, nó 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)

4

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


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

4

Trong các câu trả lời trên, nhiều cách và sự lặp lại đã được đề xuất cho cùng một. Tôi tiếp tục tìm kiếm một câu trả lời như đã đề cập là câu hỏi nhưng không thể tìm thấy ở đây.

Nhưng ngược lại với câu hỏi trên "cập nhật một cột có giá trị null" có thể là "CẬP NHẬT TẤT CẢ CÁC ROWS TRONG MÀU SẮC ĐẾN NULL"

Trong tình huống như vậy sau các công trình

update table_name
set field_name = NULL
where field_name is not NULL;

iscũng is nothoạt động trong mysql



1

Một lý do có thể khác cho chuỗi rỗng, thay vì null thực sự 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 mình để cho phép NULL bằng cách chọn hộp kiểm " Null " sau đó nhấn nút " Lưu ". "Giá bảng đã được thay đổi thành công " được hiển thị vì vậy tôi cho rằng sự thay đổi đã xảy ra - không. Sau khi thực hiện CẬP NHẬT để đặt tất cả các trường đó thành NULL , thay vào đó, chúng được đặt thành cột trống , vì vậy tôi đã xem lại cấu trúc bảng và thấy rằng " Null "cho trường đó được đặt thành ' không '. Điều đó 'Khóa chính !


1

Nếu bạn muốn đặt giá trị null bằng cách sử dụng giá trị cột đặt truy vấn cập nhật thành NULL (không có dấu ngoặc kép) thì tablename được đặt tên cột = NULL

Tuy nhiên, nếu bạn đang trực tiếp chỉnh sửa giá trị trường bên trong bàn làm việc của mysql thì hãy sử dụng tổ hợp phím (Esc + del) để chèn giá trị null vào cột đã chọn


0

nếu bạn theo dõi

UPDATE table SET name = NULL

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

SELECT * FROM table WHERE name = NULL không làm việc hay làm mình thất vọng


0

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

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

Tất nhiên trước tiên bạn nên kiểm tra xem các giá trị này có thực sự là "" với nội dung như:

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

0

nếu bạn đặt NULL cho tất cả các bản ghi, hãy thử điều này:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

HOẶC chỉ đặt NULL cho các bản ghi đặc biệt sử dụng WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.