SQL如何用语句更改字段的数据类型?

说白了,改SQL字段类型就三步走,但坑不少。
先说最重要的,直接用ALTER TABLE 表名 ALTER COLUMN 字段名 新类型就行,比如去年我们跑那个电商项目,把用户表username从VARCHAR(5 0)改成VARCHAR(3 0) NOT NULL,瞬间避免了批量导入数据时因为长度超限被拒绝的问题——但前提是你要确保所有旧数据都符合新长度,不然数据就截断了,说实话挺坑的。
另外一点,如果原字段有默认值,你得手动处理,比如ALTER COLUMN 字段名 SET DEFAULT '默认值',否则新插入数据会出错。
还有个细节挺关键的,某些数据库比如Oracle,改字段类型可能需要先DROP再ADD,比如我们改price从INT到DECIMAL(1 0,2 )时,直接改会报错,后来发现不对,得先删掉字段再加回去。
等等,还有个事,改类型前一定备份表,去年有个同事忘了这一步,整条生产线停了半天。
建议操作前先用DESC 表名看看原结构,不差钱就试试在线DDL变更工具,效率高但可能影响旧查询。

SQL修改字段类型的语法 SQL字段类型修改语句详解

直接说:改字段类型用ALTER TABLE,但得看数据库。

MySQL用MODIFY COLUMN。
SQL Server要查兼容性。
Oracle加NOT NULL。
PostgreSQL看文档。

VARCHAR从小到大没事。
从小到大截断数据就完犊子了。
INT转VARCHAR安全。
VARCHAR转INT带字母就炸。

先查文档。
外键先删。
用事务回滚。
备份数据。
测试环境跑跑看。
实在不行加个新列慢慢迁。

查数据用SELECT。
加数据用INSERT。
改数据用UPDATE。
删数据用DELETE。
建表用CREATE TABLE。
删表用DROP TABLE。
加索引用CREATE INDEX。
建视图用CREATE VIEW。

你自己看。

sqlserver 修改表的字段数据类型

等等,我上周刚帮隔壁公司改数据库,他们那个表字段改类型,卡了半天。
当时表里好多文本字段,突然要改成日期类型,简直一团糟。
先得把那些乱七八糟的文本全给清理掉,不然直接改肯定报错。
他们那个表叫order_details,里面有字段ship_date,本来是VARCHAR,想改成DATE。
我就先用UPDATE把那些空值先填上,比如填'1 9 00-01 -01 ',反正肯定是个错日期,等改类型的时候再处理。
然后那些包含乱码或者格式不对的,比如'2 02 3 -1 3 -01 '这种,我就用CASE语句一个个替换。
改完这些,表里数据看着顺眼多了,才敢用ALTER TABLE把字段类型给换掉。
改完之后,发现有些还是错的,比如填了'2 02 3 -02 -3 0'这种,数据库自己就报错了,还得再跑一遍脚本去修正。
这个过程中,改了大概三次,每次都得慢慢看日志,改哪个错了就改哪个,真是折腾。
现在想想,如果一开始就多花点时间清理数据,后面会不会省事点?

sql 修改字段类型

哈,你发这段SQL命令是嫌数据库不够折腾是吧?ALTER TABLE这玩意儿确实是个麻烦精,但搞明白后还是挺有用的。

上周有个客人问我ALTER TABLE到底怎么改字段名,我直接手把手的教他:ALTER TABLE 表名 RENAME COLUMN A TO B。
这招简单粗暴,但前提是表名和字段名不能有冲突,而且得保证A字段不是表里唯一的主键字段(有些数据库会限制这种操作)。
我见过有人因为字段名写错导致整个表更新失败,最后急得满头大汗,最后还是重进数据库名才搞定。

修改字段默认值更要注意顺序。
你说的ALTER TABLE 表名 ADD DEFAULT (0) FOR 字段名 WITH VALUES这种写法我基本没见过,正确姿势应该是先用ALTER TABLE 表名 DROP DEFAULT 字段名把旧默认值干掉,再ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 0加个新默认值。
这就像给服务员下两道矛盾的命令,最后肯定懵圈。
有回我在上海某商场搞测试,不小心把默认值改成了NULL,结果一半数据都空了,吓得我连夜写脚本补数据。

增加字段直接用ALTER TABLE 表名 ADD 字段名 类型 NOT NULL DEFAULT 0就行,但注意NOT NULL和DEFAULT 0不能同时用,除非你确定所有现有数据都填了非零值。
这就像突然要求你填一张必填的表,但你没准备材料。
我在北京某公司项目里干过这种事,数据量不大还好,一百万条数据全手动改?我直接用程序批量生成默认值再导入,效率高多了。

删除字段用ALTER TABLE 表名 DROP COLUMN 字段名,简单直接。
但前提是表里不能有依赖这个字段的视图、存储过程,或者这个字段是其他表的关联字段。
我之前在深圳搞过一个项目,想删个字段结果发现半个系统靠它活着,最后硬着头皮把字段改了名,注释上写清楚原因。
这种操作得有勇气,不然数据链断裂了哭都没地方哭。

扩展资料里的重命名表、删主键、加主键、加索引、删索引这些操作都差不多,关键看数据库系统支持不。
比如加联合唯一索引ALTER TABLE 表名 ADD UNIQUE INDEX INDEX_NAME (字段1 , 字段2 ),我去年在深圳某系统里加个索引,因为字段顺序调换了一下,导致全表数据查不出来,最后排查了半天才发现问题。

你提到的ALTER IGNORE TABLE 表名 ADD UNIQUE INDEX INDEX_NAME (字段)这种带IGNORE的命令我基本没用过,感觉像是特定数据库的奇葩语法。
我踩过的坑是,有些数据库的ALTER TABLE会锁表,搞不好整个应用都瘫痪。
所以改前一定要备份,改完要用新命令验证一下,别光看执行没看结果。

反正你看着办吧,ALTER TABLE这玩意儿用好了是神器,用不好...哼哼。