Oracle-08-修改表结构(对已有的表增删改查)

来源:互联网 发布:数组排序方法 编辑:程序博客网 时间:2024/05/18 20:50

一、在创建表的时候加上主键的例子:

create table stu(

id number(5)primary key,

name varchar2(20)

);

以上是一种主键约束。简单了解下。约束表中id列中的数据,要求不为空且不能重复。

 

二、修改表结构常用的3种操作:

1.在一个表中加入一个新的列

语法格式:

alter table 表名 add

(列名 数据类型 [default默认值] [, 列名…])

如果加一列不够,可以逗号之后再加一列。

【注意】alter是DDL语句,一旦改动就永久改动。

 

例:为A表加入“age”一列,该列的数据类型为“number”,且默认值为23。

alter table A add age number(2) default 23

 

下面具体操作:

Step1:首先用lisi登录数据库,因为原sys用户下面的表太多,查询起来麻烦,换个自定义用户lisi登录数据库,查询方便,如下图:


Step2:查询当前用户下的表数量,注意下图中的命令


Step3:发现lisi用户下没有表,那么创建一个表,如下图:


Step4:再次用步骤2的方法查询,如下图:


接着用desc A查询A表的结构,如下图:


发现lisi用户下已有表A。

Step5:为A表增加age列,如下图:


Step6:再次用desc A查看A表结构,如下图:


 

2.修改在一个表中已存在的列

语法格式:

alter table 表名 modify

(列名 数据类型 [default 默认值] [,列名…])

【注意】alter语句一旦执行,就永久修改。

 

例:将A表中的age这列的数据类型改为varchar2(2)

alter table A modify age varchar2(2)

 

下面具体操作:

Step1:为了说明报错信息,首先给空的A表中添加一行数据,如下图:


查询表结构和表内容,如下图:


说明数据内容添加成功。

Step2:这时候将表age列修改为varchar2(2),如下图:


发现报错,因为被修改的age列已经存在数据,所以被修改的列必须是空的才能修改

Step3:将表A的age列清空,注意下图中的命令,如下图所示:


查询表结构和表内容:


Step4:将表A中的age列修改为varchar2(2),如下图:


【注意】修改一个表中已经存在的列要注意以下事项:

(1)可以增加字符类型的列的宽度,简单说,比如原来该列是varchar2(2)类型,在不改变类型情况下,不管该列是否为空,都可以增加长度,比如把2加到10,即varchar(10);

(2)可以增加数字类型的列的宽度和精度,数字类型比如number类型;

(3)只有当所有列的值都为空或者表中没有数据时,才可以减少列的宽度;

(4)只有当所有列的值都为空时,才可以改变某一列的数据类型,如上面示例说明;

(5)如果改变某一列的默认值,该默认值只能影响以后的操作,如以下操作,在将A表age列的默认值改为23后,原来张三数据依然为空,之后添加的张四数据age默认值为23,所以只影响以后的操作:

表中原数据查询:


修改age列的默认值为23:


再次查询A表内容,发现原来数据的age列没改:


插入新数据张四:


查询发现新数据张四的age是新设置的默认值23:


所以修改某一列的默认值,不影响原数据,只影响后数据;

(6)只有当某一列没有改变该列的大小的情况下,才可以把char类型的列改变成varchar2类型的列,或者把varchar2类型的列改变成char类型的列,因为char类型如果数据长度不够,会自动补空格,所以如果把varchar2类型改为char类型,长度会改变,不安全。

 

3.从一个表中删除一列

语法格式:

alter table 表名 drop column 列名

 

例:将A表中的age列删除

alter table A drop column age

 

实战操作:

Step1:先看下现在的A表,如下图:


Step2:删除age列,如下图:


Step3:查询是否删除成功,如下图:


0 0