mysql中的ALTER语句

跟你唠唠我当年在MySQL里改表结构的那些事儿吧。

记得有年冬天,我在上海这边搞项目,有个客户用的系统跑得慢,查数据库日志一看,好家伙,表结构设计得乱七八糟。
我就琢磨着得改改。

那会儿,表里有个字段根本没用了,就是个历史遗留问题,存的都是乱码。
我就用 ALTERTABLE table_name DROPCOLUMN column_name; 这句命令给删了。
删完表小了一半,查询都快快了一半,客户那边立马高兴了。

后来,又加了个新功能,得在表里存用户头像的路径。
我就 ALTERTABLE table_name ADDCOLUMN column_name VARCHAR(2 5 5 ); 加了个新列。
开发那边测试完说行,功能跑起来了。

有一次,我发现有个数字字段存的是字符串,数据量一多,查询死得快。
我就 ALTERTABLE table_name MODIFYCOLUMN column_name INT; 把类型改了。
改完测试了几次,没问题,数据也正常了。

重命名表也用过,公司内部系统,旧名字太土了,新上线的系统想换个好听点的。
ALTERTABLE old_table_name RENAMETO new_table_name; 执行完,旧的表没了,新的表来了。
数据一丁点没丢。

索引这块儿,也踩过坑。
有个表加了太多索引,结果每次插入数据都特别慢。
我就 ALTERTABLE table_name DROPINDEX index_name; 把不必要的索引删了。
删了几个后,插入速度明显快了,数据库压力小了。

哦对了,主键也改过。
本来表设计的时候没设好,后来发现数据重复了。
ALTERTABLE table_name ADDPRIMARYKEY; 加了个主键,数据立马不重复了。
不过这事儿得谨慎,改主键有时候数据迁移麻烦。

总之,ALTER 语句这玩意儿,用好了是真方便,用不好也能让你头疼半天。
特别是那种大表,你随便改一下,可能就得等半天。
我这十年踩过的坑,没少是 ALTER 语句引起的。

MySQL查询重复记录和删除重复记录的操作方法

记得有一次,我在一个项目里,负责处理一个客户信息表,里面的电话号码字段重复了很多次。
我需要先找出所有重复的电话号码,然后再删除掉那些重复的,只保留一个。
当时我用了MySQL的查询语句,用GROUP BY和HAVING子句,写了个简单的查询,结果如下:
SELECT phone_number, COUNT() as duplicate_count FROM customer_info GROUP BY phone_number HAVING COUNT() > 1 ;
这个查询很快就帮我把所有重复的电话号码找出来了,而且还显示了每个重复电话号码出现的次数。
然后,我又写了个删除语句,用NOT IN子查询来删除重复的电话号码,只保留ID最小的那个:
DELETE FROM customer_info WHERE id NOT IN ( SELECT MIN(id) FROM customer_info GROUP BY phone_number );
执行完这两个语句后,我检查了一下,发现重复的电话号码确实被正确地删除了。
不过,这个过程中我确实备份了表的数据,以防万一出了什么差错。
这个小小的经历让我意识到,在处理数据库中的重复数据时,备份和事务处理是多么重要。
等等,还有个事,我突然想到,如果这个表里的电话号码字段没有索引,查询和删除操作可能会慢很多。
所以,我还在之后给那个字段加上了索引。

MYSQL 多表 条件多LIKE 并且是OR 链接, 出来好多重复数据,为什么啊?

对,就是这个问题。
先查重复数据,用HAVING语句。

上周刚处理一个,用MAX函数找重复ID。

直接删,用DELETE语句,ID=8 和9 那两行。

先这样,记得备份。

mysql数据库中如何进行字段重命名

重命名字段用RENAMECOLUMN(MySQL8 .0.1 2 +)。
旧版本用CHANGECOLUMN,必须指定类型和约束。
备份数据再操作。