当前位置: 首页 > news >正文

mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)

1、SQL 修改表(ALTER TABLE 语句)

在编写一个SQL的ALTER TABLE语句时,你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例,这些示例展示了如何修改表结构。

1.1、 添加列

假设你有一个名为students的表,并且你想要添加一个名为email的列,数据类型为VARCHAR(100)

ALTER TABLE students
ADD COLUMN email VARCHAR(100);

1.2. 删除列

如果你想从students表中删除email列(注意,在执行此操作之前,请确保这不会破坏你的数据完整性或业务逻辑)。

ALTER TABLE students
DROP COLUMN email;

1.3. 修改列的数据类型

假设students表中有一个age列,当前的数据类型是INT,但你想将其更改为SMALLINT(如果你的应用逻辑中年龄永远不会超过SMALLINT的范围)。

ALTER TABLE students
MODIFY COLUMN age SMALLINT;

注意:不是所有的数据库系统都使用MODIFY COLUMN来更改列的数据类型。在某些数据库(如MySQL)中,你可能需要使用CHANGE COLUMN或简单地重新添加列(并可能将数据迁移到一个新列,然后删除旧列)。

1.4. 修改列名

如果你想要修改students表中的student_id列名为id(这通常是一个好的实践,尤其是在与其他表建立外键关系时),你需要使用特定于数据库系统的语法,因为SQL标准不直接支持列重命名。
在MySQL中,你可以这样做:

ALTER TABLE students
CHANGE COLUMN student_id id INT;

在SQL Server中,你需要使用sp_rename存储过程,如下:

EXEC sp_rename 'students.student_id', 'id', 'COLUMN';
``
## 5. 添加约束
如果你想给`students`表的`email`列添加一个唯一约束,以确保没有两个学生有相同的电子邮件地址,你可以这样做:
```sql
ALTER TABLE students
ADD CONSTRAINT uc_email UNIQUE (email);

这里,uc_email是约束的名称(你可以根据需要命名),而UNIQUE指定了约束的类型。

1.5、 注意事项

  • 在执行ALTER TABLE语句之前,请确保你了解这些更改如何影响你的数据库和应用程序。
  • 某些更改(如添加或删除列)可能需要较长的时间,特别是当表包含大量数据时。
  • 备份你的数据库,以防万一更改出现问题,你可以恢复数据。
  • 不同的数据库系统(如MySQL、PostgreSQL、SQL Server等)在语法上可能有所不同,请根据你使用的数据库系统查阅相应的文档。

当然,让我们再举一个修改表的例子,这次我们将考虑一个名为employees的表,并假设这个表已经存在,并且包含了一些基本信息,如员工ID、姓名、部门ID和薪水。现在,我们想要对这个表进行一些修改。

修改表的例子:添加新列并设置默认值

假设我们想要给employees表添加一个名为hire_date的新列,用于记录员工的入职日期,并且我们想要为这个新列设置一个默认值,即当前日期(注意,具体的日期函数取决于你使用的数据库系统)。

在MySQL中,你可以这样做:

ALTER TABLE employees
ADD COLUMN hire_date DATE DEFAULT CURRENT_DATE;

在SQL Server中,由于CURRENT_DATE不是直接支持的函数,但GETDATE()CURRENT_TIMESTAMP可以达到相同的效果(DATE类型可能需要额外的转换,但在这个上下文中,DATETIMEDATETIME2可能更合适):

ALTER TABLE employees
ADD COLUMN hire_date DATETIME2 DEFAULT CURRENT_TIMESTAMP;

请注意,如果你确实需要DATE类型而不是DATETIMEDATETIME2,并且你使用的是SQL Server,你可能需要在插入数据时显式地转换CURRENT_TIMESTAMP或使用一个触发器来设置默认值。

另一个例子:修改现有列的长度

假设employees表中的name列是VARCHAR(50)类型,但现在你需要存储更长的姓名,因此你想要将name列的长度增加到VARCHAR(100)
在大多数数据库系统中,这可以通过简单地修改列的定义来完成:

ALTER TABLE employees
MODIFY COLUMN name VARCHAR(100);

但是,请注意,不是所有的数据库系统都使用MODIFY COLUMN来更改列的长度。在SQL Server中,你可能需要使用ALTER COLUMN语句:

ALTER TABLE employees
ALTER COLUMN name VARCHAR(100);

再次强调,当你修改表结构时,请确保这些更改不会破坏数据的完整性或违反任何现有的约束。在执行这些操作之前,了解你的数据库系统和表结构是非常重要的。

相关文章:

  • 负载均衡--会话保持失败原因及解决方案(五)
  • Python:lambda 函数详解 以及使用
  • JMeter 性能测试基本过程及示例
  • 【测试】混沌工程
  • 国产RISC-V案例分享,基于全志T113-i异构多核平台!
  • Leetcode面试经典150题-322.零钱兑换
  • 数据结构和算法基础(一)
  • 求职Leetcode题目(12)
  • Spring Boot技术:构建高效网上购物平台
  • 《黑神话:悟空》在全球爆火的原因是什么?
  • Ubuntu开机进入紧急模式处理
  • windows10 docker 推送本地镜像
  • SQL进阶技巧:如何获取状态一致的分组? | 最大、最小值法
  • JVM(HotSpot):字符串常量池(StringTable)
  • 在Robot Framework中Run Keyword If的用法
  • Asm.js的简单介绍
  • CAP理论的例子讲解
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Java精华积累:初学者都应该搞懂的问题
  • Koa2 之文件上传下载
  • laravel 用artisan创建自己的模板
  • Leetcode 27 Remove Element
  • spring boot下thymeleaf全局静态变量配置
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 二维平面内的碰撞检测【一】
  • 关于springcloud Gateway中的限流
  • 基于web的全景—— Pannellum小试
  • 讲清楚之javascript作用域
  • 力扣(LeetCode)21
  • 力扣(LeetCode)965
  • 原生js练习题---第五课
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • zabbix3.2监控linux磁盘IO
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)bark-ml
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (C语言)共用体union的用法举例
  • (C语言)逆序输出字符串
  • (笔记自用)LeetCode:快乐数
  • (含答案)C++笔试题你可以答对多少?
  • (三)elasticsearch 源码之启动流程分析
  • (三)mysql_MYSQL(三)
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (四)图像的%2线性拉伸
  • (算法)N皇后问题
  • (转)可以带来幸福的一本书
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .net core控制台应用程序初识
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args