sql 改字段名称

SQL Server:ALTER TABLE + RENAME COLUMN 或 sp_RENAME MySQL:更改表 + 更改列 一般:备份数据;检查是否有冲突;高峰时段工作。

SQL中如何修改表的字段名和数据类型

嘿,你问我有关更改 SQL 中的表字段的问题。
上周我在帮助隔壁团队调整桌子时遇到了很多陷阱。
让我向您简要介绍一下我实际所做的事情:
---
场景 1 :更改字段名称是最简单的。
去年使用MySQL的时候,发现users表中的用户名字段写反了(用户名没有下划线)。
只需使用重命名列: sql ALTER TABLE users RENAME COLUMN username TO user_name;
注意,这个命令能顺利使用的前提是:你确定新的名字不和其他字段同名,否则会直接报错。
当时忘记检查现有字段,结果名字一样,还得改了好几次。
另外,如果该字段被视图或存储过程使用,则必须手动更改依赖代码,这非常烦人。

场景二:改变数据类型是最烦人的 这给我印象最深。
2 02 3 年,我在上海做一个电商系统时,产品表中的价格字段从INT改为DECIMAL(1 0,2 )。
我当时不太明白: sql ALTER TABLE products MODIFY COLUMN Price DECIMAL(1 0,2 );
结果数据原本是整数值9 9 9 9 9 9 9 9 9 9 ,如果直接转换为DECIMAL,会损失精度,整个数据都会丢失。
因此,在更改之前,您必须运行: sql SELECT MAX(ABS(price)) FROM products;
看看是否可以删除最大值。
如果不行就分批改,或者先备份再改,像这样: sql 创建表 products_backup AS SELECT FROM products; ALTER TABLE 产品 MODIFY COLUMN 价格 DECIMAL(1 0,2 );
比较更改后的表差异。

MySQL 的 CHANGE COLUMN 特技 我特别喜欢用这个。
您可以同时更改名称和类型: sql ALTER TABLEordersCHANGECOLUMNorder_datecreated_atDATETIME;
当时,更改orders表order_date后,我将其更改为DATETIME类型。
程序可以直接使用created_at继续使用,省去了很多麻烦。
不过这个命令是MySQL特有的,其他数据库必须使用MODIFY。

更改 PostgreSQL 的列类型 这个很少使用但是很方便: sql ALTER TABLE员工ALTER COLUMN工资TYPE NUMERIC(1 2 ,2 );
这就是我们当时调整工资字段精度的方法。

SQLite的绝对操作 这是最离谱的。
SQLite 根本不支持直接更改类型。
我在2 02 2 年的那个校园项目中尝试过,结果直接报错。
最后我不得不手动完成: 1 、新建user_logs_new表,将旧表字段改为BIGINT 2 . 使用 INSERT INTO ... SELECT FROM ... 将数据移动到那里 3 . DROP旧表并RENAME新表
如何更改大表的类型 去年,user_logs表log_id由INT改为BIGINT,该表有千万级数据。
直接更改: sql ALTER TABLE user_logs MODIFY COLUMN log_id BIGINT;
结果表直接锁了几个小时。
后来查了Percona的pt-online-schema-change,在MySQL 5 .7 上用这个脚本一步步改。
表未锁定: sql pt-online-schema-change --alter="MODIFY COLUMN log_id BIGINT" --host=your_host
虽然比较麻烦,但是对业务影响小很多。

必须先删除外键约束 我已经陷入这个陷阱了。
在orders表order_date改成type之前,其实是有外键关联的。
如果直接改变结果,会报错:
第1 行错误:ALTER TABLEordersMODIFYCOLUMNorder_dateDATETIME; 详细信息:将违反表“orders”上的约束“fk_orders_customers”。

必须首先删除外键: sql ALTER TABLE 命令 DROP约束 fk_orders_customers; ALTER TABLE 订单 MODIFY COLUMN order_date DATETIME; ALTER TABLE Orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (order_date) REFERENCEScustomers(id);
删除、更改,然后添加回来。
这个操作我已经记了好久了。

测试环境必须运行 每次换表之前,我都会把测试环境彻底走一遍。
例如,更改类型后: sql SELECT FROMordersWHEREcreated_at='2 02 3 -01 -01 ';
确认可以找到数据以及索引是否损坏。
有一次我改变了字段长度,某次模糊查询立刻失败了。
幸运的是,我在测试环境中发现了它。

---
反正换表字段简单的操作就需要半个小时,但是复杂的表准备起来就得一整天的时间。
如果没有经验,建议先备份,然后小规模测试,尤其是数据量大的表。
如果看不懂官方数据库文档,可以查看社区案例。
例如,我已经读过MySQL的ALTER TABLE N遍了。

怎样用SQL语句修改已有表的字段名称,但是不修改或删除字段的内容?

哇,我在 SQL 中多次更改字段名称时遇到了这个问题。
说实话,我记得那是2 01 6 年,我在一家小公司做数据库维护。
公司当时使用的是非常旧的 SQL Server 版本,特别是 2 005 年。

当时我们有一个名为 mytable 的表,其中有一个名为 name 的字段,用于存储姓名。
然后公司经理突然说要改名字,我得赶紧改。
您必须首先创建一个表:
创建表 mytable(名称 VARCHAR(5 0));
然后插入一条数据并测试一下:
INSERT INTO mytable VALUES('张三');
插入成功,然后我看表中的数据:
从 mytable 中选择;
好家伙,有张三的名字。

然后我将开始更改字段名称。
此时我使用了这个 sp_rename 存储过程:
sp_rename 'mytable.name', '新列名';
更改后,我再次查看了数据。
您好,名称仍然存在,但字段名称已从名称更改为新的列名称。

这招果然管用。
后来我也用它来更改表名和索引名,非常方便。
但不得不提醒大家,这个东西虽然好用,但是你也需要考虑安全性和完整性。
我当时不明白。
后来有一个视图因为改了字段名出现了问题,这才意识到备份的重要性。

总之,sp_rename是一个很好的工具,但是使用的时候要小心,以免影响其他依赖于这个字段的东西。
我当时不太明白,差点出了大事故。
现在,我总是在做任何事情之前先备份所有内容,以免日后头疼。
顺便说一句,您需要考虑业务需求和安全合规性。
这件事你不能乱。

sql 修改字段类型