ALTER TABLE的用法 增加列、删除列、改列名、改列约束、改表名

本文介绍如何使用SQL语句ALTER TABLE来修改数据库表的结构,包括添加、重命名列或表,以及添加约束条件等。

 

ALTER TABLE
名称
ALTER TABLE — 更改表属性
语法
ALTER TABLE table [ * ]
ADD [ COLUMN ] column type
ALTER TABLE table [ * ]
ALTER [ COLUMN ] column { SET DEFAULT value | DROP DEFAULT }
ALTER TABLE table [ * ]
RENAME
[ COLUMN ] column TO newcolumn
ALTER TABLE table
RENAME
TO newtable
ALTER TABLE table
ADD table constraint definition
Inputs
table
试图更改的现存表的名称.
column
现存或新的列名称.
type
新列的类型.
newcolumn
现存列的新名称.
newtable
表的新名称.
table constraint definition
表的新的约束定义.
New
table constraint for the table

输出
ALTER
从被更名的列或表返回的信息.
ERROR
如果一个列或表不存在返回的信息.
描述
ALTER TABLE 变更一个现存表的定义. ADD COLUMN 形式用与 CREATE TABLE一样的语法向表中增加一个新列 / 字段。 ALTER COLUMN 形式允许你从列 / 字段中设置或者删除缺省(值)。注意缺省(值)只对新插入的行有效。RENAME 子句可以在不影响相关表中任何数据的情况下更改一个表或者列 / 字段的名称。因此,表或列 / 字段在此命令执行后仍将是相同尺寸和类型。 ADD table constraint definition 子句用与 CREATE TABLE一样的语法向表中增加一个新的约束。

如果要改变表的属性,你必须是表的所有者.

注意
COLUMN 关键字是多余的,可以省略.
如果"
* "跟在一个表名后面,表示该命令要对该表和所有继承级别低于该表的表进行操作;缺省时,该属性(更改)不会增加到任何子表或修改任何子表的相关名称。当增加或修改一个上级表(译注:继承级别高的表)的属性时总是应该这样的。否则,象下面这样的在继承级上进行的查询
SELECT NewColumn FROM SuperClass *
将不能工作,因为子表会比上级表少一个属性。
在目前的实现里,新列
/ 字段的缺省(值)和约束子句会被忽略。你可以随后用 ALTER TABLE SET DEFAULT 形式设置缺省(值)。(你还不得不用 UPDATE 把已存在行更新为缺省值。)

在目前的实现里,只有
FOREIGN KEY 约束可以增加到表中.要创建或者删除一个唯一约束,可以创建一个唯一索引(参阅 CREATE INDEX ).要想增加 check (检查)约束,你需要重建和重载该表,用的参数是 CREATE TABLE 命令的其他参数.
要修改表的结构,你必须是表的所有人。不允许更改系统表结构的任何部分。PostgreSQL 用户手册 里有关于继承的更多信息.

用法
向表中增加一个
VARCHAR 列:
ALTER TABLE distributors ADD COLUMN address VARCHAR ( 30 );
对现存列改名:
ALTER TABLE distributors RENAME COLUMN address TO city;
对现存表改名:
ALTER TABLE distributors RENAME TO suppliers;
向表中增加一个外键约束:
ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL

兼容性
SQL92ADD
COLUMN 形式是兼容的,除了上面说的缺省(值)和约束外。 ALTER COLUMN 形式是完全兼容的。
SQL92 对
ALTER TABLE 声明了一些附加的Postgres目前还不直接支持的功能:
ALTER TABLE table DROP CONSTRAINT constraint { RESTRICT | CASCADE }
增加或删除表的约束(比如象检查约束,唯一约束或外键约束)。要创建或删除一个唯一约束,对应地创建或删除一个唯一索引,要修改其他类型的约束,你需要重建和重载该表,使用 
CREATE TABLE  命令的其他参数.
例如,删除表 distributors 的任何约束:
CREATE TABLE temp AS SELECT * FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors AS SELECT * FROM temp ;
DROP TABLE temp ;
ALTER TABLE table DROP [ COLUMN ] column { RESTRICT | CASCADE }
前,要删除一个现存的列,表必须重新创建和重新装载:
CREATE TABLE temp AS SELECT did, city FROM distributors;
DROP TABLE distributors;
CREATE TABLE distributors (
did
DECIMAL ( 3 ) DEFAULT 1 ,
name
VARCHAR ( 40 ) NOT NULL ,
);
INSERT INTO distributors SELECT * FROM temp ;
DROP TABLE temp ;
重命名列
/ 字段和表名是 PostgreSQL 扩展。SQL92 没有提供这些。

数据分析,数据科学及AI算法是当前最热门的职业。这些职业有着共同的特点:面向数字的,针对编程的以及采取分析手段的。 这些当代热点特性使得在就业市场上对以上职位需求激增也就不足为奇了。但是,市场上提供这方面的大型综合的培训课程是有限,如果说有,大多是知识范围狭窄且非综合性的,而且大多培训都缺乏方法论与实务结合。一般的情况是讲师讲述某种语言的一堆代码,学生听完后甚至连使用方法及代码的前提都不清楚,更别提实际应用场景了。这里,掌握一门数据分析软件本身没错,但仅通过单一的编程培训很难获得聘用为数据分析师或数据科学家所需的技能。那我的解决方案是什么呢?首先,我把所有数据分析中的典型问题都归类总结出来,再结合相应的实际问题,数据以及案例,同时采用世界上最流行的两种数据分析软件:PYTHON 和 SAS去解决这些问题,并将这些解决方法传授给学生。学生在完成培训后更重要的收获是知道每一问题从产生直至解决的前因后果和应用场景,这是因为我在每一课程章节最前都会交代方法论,知识要点及应用场合。SAS和PYTHON可以一起学吗?当然可以。因为我就是这样做到的。具体步骤是,我在课程当中安排了一系主题,然后使用两种编程语言解决同样的问题。我总结出这样做的好处是边学习边比较,最后在不知不觉当中掌握了两门语言的精华和数据分析的通用方法或模式。过程虽有点长,但十分有趣。最后,为了巩固已学的知识和技能,我还专门安排了针对PYTHON 和 SAS的中小型项目及详细代码讲解。另外,课程当中使用的全部编程代码及数据文件都将免费地提供给注册的学生。
<think>好的,我现在需要帮助用户了解如何使用SQLALTER TABLE语句来添加新。首先,我要回忆一下基本的语法结构。ALTER TABLE后面跟表名,然后使用ADD COLUMN子句,接着是列名和数据类型。可能还需要考虑是否允许NULL值或者设置默认值。 用户提到了语法和示例,所以我要确保提供正确的格式。比如,基本的添加语句应该是这样的:ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束];。这里需要说明每个部分的含义,比如表名、列名和数据类型是必须的,而约束是可选的。 然后,用户可能需要知道如何添加多个。我记得在MySQL中可以使用多个ADD COLUMN子句,用逗号分隔。但要注意不同数据库可能有不同的语法,比如SQL Server和Oracle可能不支持一次添加多,所以可能需要分开写。不过用户的问题没有指定数据库类型,我应该以通用的标准SQL为主,同时提到不同数据库的可能差异。 接下来是示例部分。我需要举一个简单的例子,比如添加一个email,类型是VARCHAR(100),不允许NULL。然后另一个例子是同时添加phone和address,说明如何用逗号分隔。这样用户能清楚看到不同情况下的写法。 另外,用户可能关心添加时的约束,比如默认值或者唯一性约束。例如,添加一个注册日期,并设置默认值为当前日期。或者添加一个带有UNIQUE约束的。这些高级用法能帮助用户更全面地应用ALTER TABLE语句。 还要注意引用用户提供的资料。用户给出的引用[1]和[2]中提到添加的操作,特别是引用[2]提到了使用MySQL Workbench的界面和脚本工具。所以在回答中可以提到这些工具的使用方法,但主要聚焦在SQL语句上。 最后,生成相关问题时要考虑用户可能的后续疑问,比如如何删除或修,不同数据库的语法差异,添加时的性能影响,以及如何添加主键或外键约束。这些问题能引导用户进一步学习,解决实际中可能遇到的问题。 总结一下,我需要分步骤解释语法,给出示例,说明约束和默认值,引用相关资料,并生成相关问题。确保回答结构清晰,正确无误,同时覆盖用户可能的需求。</think>以下是关于使用SQL的`ALTER TABLE`语句为表添加新的详细说明: --- ### 一、添加的语法 **基本语法**: ```sql ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束]; ``` - **表名**:需要修的目标表名称 - **列名**:新的名称 - **数据类型**:如`VARCHAR(255)`、`INT`、`DATE`等 - **约束**(可选):如`NOT NULL`、`DEFAULT 值`、`UNIQUE`等[^2] --- ### 二、添加的示例 #### 1. 添加单个 ```sql ALTER TABLE employees ADD COLUMN email VARCHAR(100) NOT NULL; ``` - 向`employees`表添加一个名为`email`的,类型为`VARCHAR(100)`,不允许为空 #### 2. 添加带默认值的 ```sql ALTER TABLE users ADD COLUMN registration_date DATE DEFAULT CURRENT_DATE; ``` - 添加`registration_date`,默认值为当前日期 #### 3. 一次添加多个(MySQL支持) ```sql ALTER TABLE customers ADD COLUMN phone VARCHAR(20), ADD COLUMN address TEXT; ``` --- ### 三、注意事项 1. **数据类型匹配**:新的数据类型需与已有数据兼容 2. **性能影响**:对大表添加可能耗时较长,建议在低峰期操作 3. **数据库差异**: - SQL Server/Oracle中不支持单语句添加多,需分多次执行 - PostgreSQL允许同时定义多个[^1] --- ### 四、通过工具操作(以MySQL Workbench为例) 1. 右击目标表选择`Alter Table` 2. 在界面中添加新并配置属性 3. 自动生成等效的SQL语句并执行[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值