当前位置:首页 > 问答 > 正文

【SQL数据库修改那些事儿,教你一步步改表结构和数据操作】

【SQL数据库修改那些事儿,教你一步步改表结构和数据操作】 主要参考自W3School SQL教程、菜鸟教程SQL部分以及一些网络技术博客的常见问题汇总)

好了,咱们直接开讲,想象一下,你有一个Excel表格,用久了肯定要改改,比如加一列电话号码,或者把一些错误的数据修正一下,SQL数据库里的表也是这个道理,今天要说的就是怎么去修改它。

第一部分:改头换面——修改表结构

表结构就是表的骨架,比如有哪些列,每列叫什么名字,存什么类型的数据。

  1. 添加新列(好比给员工表加个“微信号”栏) 这是最常用的操作,命令是 ALTER TABLE,你有个叫 Users 的用户表,原来只有姓名和年龄,现在想加个手机号字段,就这么写: ALTER TABLE Users ADD phone_number VARCHAR(15); 这句话的意思是:修改表 Users,增加一个名叫 phone_number 的列,这个列的类型是可变长度的字符串,最多能存15个字符,执行完后,表里就多了一列,所有老数据的这一列暂时都是空的。

  2. 删除一列(好比去掉一个没用的“备注”栏) 如果觉得某列没用了,可以删掉,但要非常小心,因为数据会一起丢掉的!命令是: ALTER TABLE Users DROP COLUMN phone_number; 这就是把刚才加的 phone_number 列给删了,有些数据库系统可能不需要写 COLUMN 关键字,直接写 DROP phone_number; 也行,但写上更清楚。

  3. 修改列的定义(比如把“姓名”栏放宽点,让能写更长的名字) 这个稍微复杂点,因为不同数据库软件(比如MySQL、SQL Server、PostgreSQL)的命令不太一样。

    • MySQL 的例子:你想把 Users 表的 name 列从原来的 VARCHAR(20) 改成 VARCHAR(50)ALTER TABLE Users MODIFY COLUMN name VARCHAR(50);
    • SQL Server / PostgreSQL 的例子:同样的需求,通常会用到 ALTER COLUMNALTER TABLE Users ALTER COLUMN name VARCHAR(50); 你看,这里就有区别了,所以具体怎么写,得看你用的是哪种数据库,有时候除了改长度,还能改数据类型,但要注意,如果原来的数据和新类型不兼容(比如想把文字改成数字),可能会失败。
  4. 重命名列(觉得“user_name”这列名不好,想改成“username”) 这个也不是所有数据库都支持直接改,但通常有办法。

    • MySQL 用 CHANGEALTER TABLE Users CHANGE user_name username VARCHAR(50); (这里需要把类型也重新写一遍,有点麻烦)。
    • SQL Server 用 sp_renameEXEC sp_rename 'Users.user_name', 'username', 'COLUMN';
    • PostgreSQL 用 RENAME COLUMNALTER TABLE Users RENAME COLUMN user_name TO username;

第二部分:精雕细琢——修改表里的数据

改好了结构,接下来就是往里面填数据或者改数据了。

  1. 增加新数据(招了新员工,得录进去)INSERT INTO 语句,比如向 Users 表添加一条新记录: INSERT INTO Users (name, age, phone_number) VALUES ('张三', 25, '13800138000'); 这句话指明要向哪几列插入数据,然后对应地给出值,如果想为所有列都插入值,可以省略列名,但值的顺序必须和表结构完全一致,一般不推荐这样,容易出错。

  2. 更新已有数据(张三换手机号了) 这是非常常见的操作,用 UPDATE 语句,千万别忘了加 WHERE 条件,不然所有数据都会被改掉! UPDATE Users SET phone_number = '13900139000' WHERE name = '张三'; 这句话的意思是:更新 Users 表,把名字是‘张三’的那条记录的手机号设置成新的号码。WHERE 条件就像个筛选器,精准定位你要改的那几行,要是忘了写 WHERE,就成了“把所有用户的手机号都改成张三的新号”,那可就闯大祸了。

  3. 删除数据(有人离职了,得从表里移除)DELETE FROM 语句,和 UPDATE 一样,必须非常小心地使用 WHERE 子句DELETE FROM Users WHERE name = '李四'; 这只删除名字是李四的记录,如果直接写 DELETE FROM Users;,那么整个表的数据就全没了,只剩下一个空表结构,这个操作太危险,所以很多公司对删除操作权限管得很严。

重要提醒:动手前先备份!

(这个建议在几乎所有数据库管理教程里都会被强调) 无论是修改结构还是修改数据,尤其是在正式环境(就是真正在用的系统)的数据库上操作之前,一定要先备份数据,就像你重装电脑系统前会把重要文件拷出来一样,万一改错了,或者发现改完有问题,还能用备份恢复回来,不至于造成无法挽回的损失,对于重要的表,甚至可以先把要执行的修改语句在测试数据库上试一遍,确认没问题再在正式库上跑。

修改数据库就像做手术,工具(SQL语句)要会用,但更重要的是谨慎和细心,明确知道自己每一步在做什么,以及可能带来的后果,先从简单的练起,慢慢就熟练了。

【SQL数据库修改那些事儿,教你一步步改表结构和数据操作】