sql 想要删除一个表里的一个字段名,怎样写删除语句

哎,你说这事儿啊,我当年在一家做ERP系统的公司干活儿,那会儿是2 01 8 年吧,客户突然提出要把一个旧系统里的部门号列给干掉,说那个列早就没用了,占空间还碍事。

我就赶紧查了查,确实是得用 ALTER TABLE 这条命令。
我就对着屏幕敲了敲:
sql ALTER TABLE tab1 DROP COLUMN 部门号;
我旁边那哥们儿看着我说:“哎,等等,万一他们后悔了呢?或者有些老数据里部门号还是有用的,就只是暂时想清空?”
我当时一拍大腿,对啊!我就赶紧补充了一句:“那可以先用 UPDATE 把这列改成 NULL。

他就试了试:
sql UPDATE tab1 SET 部门号 = NULL;
这样,列还在,但数据全变成了 NULL,不影响结构。
客户也乐了,说先这么着。

后来过了半年,客户又找我,说现在真确定部门号没啥用了,必须删。
我又把那条 ALTER TABLE 命令拿出来,客户也点头同意了。

你看,这操作就是这么个流程。
不过我跟你讲实话,删列这事儿,我当年还出过错。
有一次在一个小库上试着删,光顾着快速执行,忘了备份。
好家伙,一删,整个业务线停摆了半天,客户那边急得跳脚。
后来赶紧从备份恢复,但也耽误事儿了。
所以啊,删之前,备份!一定得备份!
还有,你注意,不同的数据库系统,比如MySQL、Oracle、SQL Server,这些命令的写法可能有点细微差别,得看你用的是啥。
我这儿举的例子是基于MySQL的。
要是用其他系统,得再查查。

对了,删了列,所有关联这个列的代码,比如查询、报表,都得去改。
改不周全,系统还能崩。
所以啊,不光要备份数据,还得有心理准备,改代码可能是个大工程。

SQL 删除一个字段

说白了,删SQL字段用ALTER TABLE 就行,但细节多着呢。

先说最重要的,直接删字段要带全名,比如 ALTER TABLE aaa DROP COLUMN name。
去年我们跑那个电商项目,就因为这个逗号少了个空格,卡了俩小时——别笑,真有这种事。
另外一点,有些数据库(比如老版本的Oracle)一个ALTER语句不能干太多事,比如删字段的同时不能改类型,得分步来。
我们去年改用户表时,先 ALTER TABLE users ALTER COLUMN age INT,等生效了再删旧字段。
还有个细节挺关键的,比如MySQL删字段后,如果该字段有默认值,你还得手动删掉,不然插入新数据会报错。

我一开始也以为删字段是原子操作,后来发现不对,比如PostgreSQL在事务中删字段,如果报错字段就没了,说实话挺坑的。
等等,还有个事,如果表数据量特别大,比如3 000万量级,直接删字段可能拖垮整台服务器,建议先用 ALTER TABLE ... ENABLE ROW MOVEMENT 开启行移动,或者分批次删。

提醒个坑:忘备份就晚了。
删字段前,先 mysqldump -u root -p table_name > backup.sql 或者 pg_dump table_name > backup.sql。