如果任何列中包含NULL值,是否有办法删除行?我知道我可以一个接一个地检查列但是我想在MySQL中以编程方式执行此操作,如果我有4列或4000列,它将扩展。我相信我可以用PHP做到这一点,但我宁愿在直接的MySQL中做到这一点。
谢谢
答案 0 :(得分:2)
好的,既然你刚才提到你是MySQL的新手,那么你的数据库设计也是新的,而且很可能目前还没有很多数据。
为什么不杀掉问题的根源,而不是让那些成长为一棵大树,然后寻找工具来切割所有分支?
您应该继续使用MySQL NOT NULL
选项并禁止列的空值,因为您要删除它们。因此,如果您不需要保留任何空值,那么您可以简单地禁止它们,并且它们不会首先保存。
在正确的数据库设计之后很久就会出现查询,如果您的设计与您的系统要求不匹配,那么您只能在一定程度上优化查询。基础结构是您应该学习和改进的第一件事。谷歌和SO都充斥着成千上万篇关于高效数据库设计和一些基本概念的文章。
答案 1 :(得分:0)
我不太确定这是否适用于mysql,因为我无法测试它(我编辑的sql server代码可以使用mysql)
CREATE PROCEDURE myProc()
BEGIN
DECLARE COL varchar(4000);
SELECT GROUP_CONCAT(C.COLUMN_NAME, ' IS NULL ' SEPARATOR ' OR ') FROM INFORMATION_SCHEMA.COLUMNS C WHERE C.TABLE_NAME = 'tbl_a' INTO COL;
SET @s = CONCAT('SELECT * FROM test WHERE ', COL);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
我正在使用select语句来检查你是否需要更改它以删除
答案 2 :(得分:0)
您可以删除那些没有太多OR的记录:
DELETE FROM myTable
WHERE CONCAT(column1,column2,column3) is null
删除可以做什么可能没有意义,但是可以使用这个技巧来应该做什么。
INSERT INTO NEW_TABLE
SELECT column1,column2,column3
FROM myTable
WHERE not CONCAT(column1,column2,column3) is null