วิธีอัปเดตคอลัมน์ด้วยค่า Null


148

ฉันกำลังใช้ mysql และจำเป็นต้องอัปเดตคอลัมน์ด้วยค่า Null ฉันลองหลายวิธีแล้วสิ่งที่ดีที่สุดที่ฉันได้รับคือสตริงว่าง

มีไวยากรณ์พิเศษที่ต้องทำหรือไม่


4
คอลัมน์อนุญาตค่า NULL หรือไม่
กระตุ้น

8
อัปเดตตารางชุดคอลัมน์ = NULL WHERE ... ; ไม่ทำงาน, ไม่เป็นผล?

1
ไม่เลย. มันแปลกจริงๆ
จิม

คำตอบ:


226

ไม่มีไวยากรณ์พิเศษ:

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)

ขอบคุณแดเนียล ฉันมั่นใจว่าปัญหานี้อาจอยู่ในรหัสแอปพลิเคชันของฉัน
jim

42

NULLเป็นค่าพิเศษใน SQL ดังนั้น null คุณสมบัติให้ทำ:

UPDATE table SET column = NULL;

ตอนนี้ให้ฉันอธิบาย ผ่าน php ฉันใช้ PDO และอัปเดตผ่านแบบสอบถาม
จิม

1
คู่มือ MySQL ระบุว่าหากคอลัมน์ไม่อนุญาตให้มีค่า NULL การตั้งค่าเป็น NULL จะส่งผลให้ค่าเริ่มต้นสำหรับประเภทข้อมูล (เช่นสตริงว่าง) คุณ 100% ที่คอลัมน์อนุญาตให้เป็น NULL หรือไม่? คุณช่วยแสดงตาราง CREATE ให้เราดูได้ไหม

ฉันมั่นใจ 1,000% ฉันตรวจสอบมันสองครั้ง ให้ฉันดูอีกครั้ง
จิม

ใช่มันเป็นความจริงแล้วเป็นโมฆะ ฉันสามารถดู NULL ที่ผลิตโดยซอฟต์แวร์สิ้นสุดของฉันในข้อมูลที่ควรเป็นโมฆะ
จิม


6

อย่าลืมตรวจสอบว่าคอลัมน์ของคุณเป็นโมฆะหรือไม่ คุณสามารถทำได้โดยใช้

mysql> desc my_table;

หากคอลัมน์ของคุณไม่สามารถเป็นโมฆะเมื่อคุณตั้งค่าเป็นโมฆะมันจะเป็นค่าการโยน

นี่เป็นตัวอย่าง

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

สำหรับผู้ที่เผชิญกับปัญหาที่คล้ายกันฉันพบว่าเมื่อ 'จำลอง' SET = NULLแบบสอบถาม PHPMyAdmin จะโยนข้อผิดพลาด มันเป็นปลาเฮอริ่งแดง .. เพียงแค่เรียกใช้แบบสอบถามและทุกอย่างจะดีขึ้น


ขอบคุณฉันมาที่นี่เพราะ PHPMyAdmin อ้างว่ามีคำหลักที่ไม่รู้จักที่อยู่ใกล้กับ NULL หลังจากอ่านคำตอบของคุณแล้วฉันเรียกใช้คิวรีและดำเนินการตามที่ตั้งใจไว้
dading84

4

ในคำตอบข้างต้นมีการแนะนำวิธีการและการทำซ้ำหลายวิธีสำหรับสิ่งเดียวกัน ฉันค้นหาคำตอบตามที่กล่าวไว้เป็นคำถาม แต่ไม่พบที่นี่

แต่ตรงข้ามกับคำถามข้างต้น "อัปเดตคอลัมน์ที่มีค่า Null" อาจเป็น "อัปเดตแถวทั้งหมดในคอลัมน์เป็น NULL"

ในสถานการณ์ดังต่อไปนี้การทำงาน

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

isis notทำงานได้ดีใน mysql



1

อีกเหตุผลที่เป็นไปได้สำหรับสตริงว่างแทนที่จะเป็นค่าว่างที่แท้จริงคือฟิลด์นี้เป็นดัชนีหรือเป็นส่วนหนึ่งของดัชนี สิ่งนี้เกิดขึ้นกับฉัน: โดยใช้ phpMyAdmin ฉันแก้ไขโครงสร้างของเขตข้อมูลในหนึ่งในตารางของฉันเพื่ออนุญาตให้NULLโดยการทำเครื่องหมายที่ช่อง " ว่าง " จากนั้นกดปุ่ม " บันทึก " "การกำหนดราคาตารางได้รับการแก้ไขเรียบร้อยแล้ว " ปรากฏขึ้นดังนั้นฉันจึงสันนิษฐานว่าการเปลี่ยนแปลงเกิดขึ้น - ไม่ได้ หลังจากทำUPDATEเพื่อตั้งค่าเขตข้อมูลเหล่านั้นทั้งหมดให้เป็นNULLพวกเขาจะถูกตั้งค่าเป็นสตริงว่างดังนั้นฉันจึงดูโครงสร้างของตารางอีกครั้งและเห็นว่า " Null " "" สำหรับเขตข้อมูลนั้นถูกตั้งค่าเป็น ' ไม่ 'คีย์หลัก !


1

หากคุณต้องการตั้งค่า Null โดยใช้แบบสอบถามชุดปรับปรุงค่าคอลัมน์เป็น NULL (ไม่มีคำพูด) การปรับปรุงชุด tablename ชุดคอลัมน์ namename = NULL

อย่างไรก็ตามหากคุณแก้ไขค่าฟิลด์โดยตรงภายใน mysql workbench ให้ใช้ (Esc + del) การกดแป้นพิมพ์เพื่อแทรกค่า Null ในคอลัมน์ที่เลือก


0

ถ้าคุณทำตาม

UPDATE table SET name = NULL

ชื่อนั้นคือ "" ไม่ใช่ค่า NULL IN MYSQL หมายถึงคิวรีของคุณ

SELECT * FROM table WHERE name = NULL ไม่ทำงานหรือผิดหวังกับตัวเอง


0

ฉันสงสัยว่าที่นี่คือคำพูดที่ถูกป้อนเป็นตัวอักษรในค่าสตริงของคุณ คุณสามารถตั้งค่าคอลัมน์เหล่านี้เป็นโมฆะโดยใช้:

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

แน่นอนคุณควรตรวจสอบก่อนว่าค่าเหล่านี้มีค่าดังนี้: ""

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

0

ถ้าคุณตั้งค่า NULL สำหรับบันทึกทั้งหมดลอง:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

หรือเพียงแค่ตั้งค่า NULL สำหรับบันทึกพิเศษใช้ WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.