通过SQL语句(alter table)来增加、删除、修改字段

添加字段的语法:alter table tablename add (column datatype [default value][null/not null],….);

修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],….);

删除字段的语法:alter table tablename drop (column);

 

添加、修改、删除多列的话,用逗号隔开。

 

使用alter table 来增加、删除和修改一个列的例子。

 

创建表结构:
create table test1
(id varchar2(20) not null);

 

增加一个字段:

alter table test1
add (name varchar2(30) default ‘无名氏’ not null);

 

使用一个SQL语句同时添加三个字段:

alter table test1
add (name varchar2(30) default ‘无名氏’ not null,

age integer default 22 not null,

has_money number(9,2)

);

 

修改一个字段

alter table test1
modify (name varchar2(16) default ‘unknown’);

 

另:比较正规的写法是:

-- Add/modify columns 
alter table TABLE_NAME rename column FIELD_NAME to NEW_FIELD_NAME;

 

删除一个字段

alter table test1
drop column name;

 

需要注意的是如果某一列中已经存在值,如果你要修改的为比这些值还要小的列宽这样将会出现一个错误。

例如前面如果我们插入一个值
insert into test1
values (’1′,’我们很爱你’);

然后曾修改列: alter table test1
modify (name varchar2(8));
将会得到以下错误:
ERROR 位于第 2 行:
ORA-01441: 无法减小列长度, 因为一些值过大

---------------------------------------------------------------------------------------------------------------

高级用法:

重命名表
ALTER TABLE
 table_name RENAME TO new_table_name;

 

修改列的名称

语法:
ALTER TABLE table_name RENAME COLUMN supplier_name to sname;

范例:
alter table s_dept rename column age to age1;

 

附:创建带主键的表>>

create table student (
studentid int primary key not null,
studentname varchar(8),
age int);

 

1、创建表的同时创建主键约束
(1)无命名
create table student (
studentid int primary key not null,
studentname varchar(8),
age int);
(2)有命名
create table students (
studentid int ,
studentname varchar(8),
age int,
constraint yy primary key(studentid));


2、删除表中已有的主键约束
(1)无命名
可用 SELECT * from user_cons_columns;
查找表中主键名称得student表中的主键名为SYS_C002715
alter table student drop constraint SYS_C002715;
(2)有命名
alter table students drop constraint yy;


3、向表中添加主键约束
alter table student add constraint pk_student primary key(studentid);

### 如何使用 SQL `ALTER TABLE` 语句修改表结构 #### 添加新列 当需要向现有的表中增加新的字段时,可以利用 `ALTER TABLE ... ADD COLUMN` 语法。例如,在名为 `employees` 的表格里新增加一个叫做 `email` 的 VARCHAR 类型的列: ```sql ALTER TABLE employees ADD COLUMN email VARCHAR(255); ``` 此命令会在指定位置创建一个新的可为空的字符串类型的字段[^1]。 #### 修改列的数据类型 如果要改变某列的数据定义,则应采用如下形式的指令来实现更新操作——即先指明目标表名以及具体哪一栏位被改动;接着声明预期的新属性规格(比如长度)。下面的例子展示了怎样把 `salary` 列由 INT 改成 DECIMAL(8,2),以便更精确地表示薪资数额: ```sql ALTER TABLE employees MODIFY salary DECIMAL(8,2); ``` 这会将原有整数类型的工资数值转换为带有两位小数点精度的小数格式[^2]。 #### 删除列 对于不再使用的字段可以通过执行 `DROP COLUMN` 来移除它。假设现在决定去除之前加入却未充分应用过的 `middle_name` 字段: ```sql ALTER TABLE employees DROP COLUMN middle_name; ``` 这条语句将会彻底清除该特定名称所对应的那一列及其所有记录值。 #### 更改列名 有时候可能需要重新命名某些字段以提高代码的一致性和易读性。此时可以用到 `CHANGE` 或者 `RENAME COLUMN` 关键字组合完成这项任务。这里给出的是针对旧版 MySQL 版本的方式之一,即将 `first_name` 变更为 `given_name`: ```sql ALTER TABLE employees CHANGE first_name given_name VARCHAR(40); ``` 而对于较新的版本来说,推荐的做法可能是这样的: ```sql ALTER TABLE employees RENAME COLUMN first_name TO given_name; ``` 两种方法都能达到相同的效果,只是后者更加直观简洁一些。 #### 添加约束条件 为了确保数据完整性并强制实施业务逻辑规则,可以在已有架构基础上追加各类限制措施。比如说给定唯一性的索引来防止重复项出现于 `ssn` 社保号码上: ```sql ALTER TABLE employees ADD UNIQUE (ssn); ``` 上述动作将在对应的位置建立独一无二的关键字关联关系,从而避免录入相冲突的信息条目。 #### 移除约束条件 相反地,假如发现先前设定的一些限定已经不合时宜或者阻碍了系统的灵活性扩展,那么就可以考虑撤销它们。像解除上面提到的那个单一性验证那样做的话,只需简单输入以下几行文字即可达成目的: ```sql ALTER TABLE employees DROP INDEX ssn_unique; -- 注意这里的索引名字通常是自动生成或者是手动设置好的 ``` 请注意,实际环境中应当谨慎对待任何有关删除或变更既存控制机制的行为,因为这可能会带来意想不到的影响甚至破坏应用程序的功能稳定性。 #### 表格重命名 最后介绍一种较为少见但也十分有用的操作方式:整体替换对象标识符。这意味着整个实体集都将获得全新的标签而不影响内部组成要素之间的相互联系。举个例子来讲就是把当前正在处理中的人员档案库命名为更具描述力的名字 `staff_records` : ```sql ALTER TABLE employees RENAME TO staff_records; ``` 这样做的好处在于能够使数据库设计文档保持最新状态的同时也方便其他相关人员理解各个组成部分的实际意义所在。 #### 调整存储引擎 有时出于性能优化或者其他技术考量因素,有必要切换底层物理文件组织模式。为此专门准备了一套简单的命令序列供参考学习之用,此处仅列举一部分常见情形下的做法作为示范指导材料: ```sql -- 将 InnoDB 引擎变更为 MyISAM ALTER TABLE my_table ENGINE=MyISAM; -- 把默认配置恢复回去 ALTER TABLE my_table ENGINE=InnoDB; ``` 以上便是关于如何运用标准 SQL 方言里的 `ALTER TABLE` 结构化查询语言来进行一系列灵活多样的结构调整工作的基本指南。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值