MySQL 如何在MySQL中删除空白行?
在MySQL中删除空白行并不是一件难事。本文将介绍两种方法,一种是使用DELETE语句,另一种是使用SELECT INTO语句。
阅读更多:MySQL 教程
方法一:使用DELETE语句
使用DELETE语句可以直接删除空白行。首先,需要确定哪张表需要删除空白行,以本文使用的测试表test_table为例:
CREATE TABLE test_table (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
age INT(11),
PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8;
可以使用INSERT语句往test_table表中插入一些数据:
INSERT INTO test_table (name, age) VALUES ('Tom', 18);
INSERT INTO test_table (name, age) VALUES ('Jerry', NULL);
INSERT INTO test_table (name, age) VALUES ('Spike', '');
执行以下DELETE语句,即可删除空白行:
DELETE FROM test_table WHERE name='' OR name IS NULL;
以上SQL语句的作用是选择所有名字为空白的记录,或者所有名字为Null的记录,并将这些记录删除。执行该语句后,test_table表将只剩下一行数据:
id | name | age |
---|---|---|
1 | Tom | 18 |
方法二:使用SELECT INTO语句
使用SELECT INTO语句也可以删除空白行。首先,使用以下语句创建表:
CREATE TABLE test_table2 (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50),
age INT(11),
PRIMARY KEY (id)
) ENGINE=InnoDB CHARSET=utf8;
然后,使用以下语句将test_table的有效行插入到test_table2:
SELECT * INTO test_table2 FROM test_table WHERE name != '' AND name IS NOT NULL;
以上SQL语句的作用是从test_table表中选择所有名字不为空白的记录,并将这些记录插入到test_table2表中。执行该语句后,test_table2表将只有一行数据:
id | name | age |
---|---|---|
1 | Tom | 18 |
此时,test_table和test_table2的id相同,因为它们都是从同一张表test_table中创建的。如果需要保持id不变,可以使用以下语句:
SET @i := 0;
INSERT INTO test_table2 (name, age)
SELECT name, age FROM (
SELECT name, age, @i := @i+1 AS rn
FROM test_table
WHERE name != '' AND name IS NOT NULL
) AS t;
以上SQL语句的作用是选择所有名字不为空白的记录,并插入到test_table2中。每当选择一条记录时,变量@i会自动加1,该记录的行号存储在rn列中。执行该语句后,test_table2表将只剩下一行数据:
id | name | age |
---|---|---|
1 | Tom | 18 |
结论
这篇文章介绍了如何使用DELETE语句和SELECT INTO语句在MySQL中删除空白行。使用DELETE语句直接删除空白行,使用SELECT INTO语句则将有效行插入到另一张表中。这两种方法都可以有效地删除空白行,选择哪种方法取决于实际需求。