oralce 经典习题系列

数据库表创建

The problem

1.创建数据表customers,customers表结构如表3-5所示,按要求进行操作。表3-5 customers表结构

字段名 数据类型 主键 外键 非空 唯一 自增
c_num number(10) ture false not null true true
c_name varchar(50) false false not null false false
c_contact varchar(50) false false not null false false
c_city varchar(50) false false not null false false
c_brithday date false false not null false false

1.1 创建数据表customers,在c_num字段上添加主键约束和自增约束,在c_birth字段上添加非空约束。(2)将c_name字段数据类型改为VARCHAR2(70)。(3)将c_contact字段改名为c_phone。(4)增加c_gender字段,数据类型为VARCHAR2(1)。(5)将表名修改为customers_info。(6)删除c_city 字段

2.创建数据表orders,orders表结构如表3-6所示,按要求进行操作

字段名 数据类型 主键 外键 非空 唯一 自增
o_num nuber(11) true false not null true true
o_date date false false false false false
c_id varchar(20) false true false false false

1)创建数据表orders,在o_num字段上添加自增约束,在c_id字段上添加外键约束,关联customers_info表中的主键c_num。(2)删除orders表的外键约束,然后删除表customers_info。

The answer

1.1 基本语句格式create table customers( c_num number(10) GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, c_name varchar(50) not null, c_contact varchar(50) not null, c_city varchar(50) not null, c_brithday date ); get: 自增:oracle 12c 的 自增字段通过为表主键添加GENERATED BY DEFAULT AS IDENTITY关键字来实现,实际还是产生一个序列squence,通过序列的 序列.nexval取值是实现,只是由系统来创建这个序列。 1.2 实现代码alter table customers modify c_brithday not null; 非空约束和其他约束后期修改语句不同,通过alter table tbname modify colname not null; 1.3 修改字段名 alter table customers rename columu c_contact to c_phone; 如果是改表明 alter table tbname rename tbname to tbname2 ,不要 column 关键字。 1.4 增加字段 alter table customers add c_gender varchar(1); 1.5 更改表名alter table customers rename to customers_info; 1.6 删除c_city 字段alter table customers_info drop column c_city;


2.1 自增约束通过建立表的时候生成create table orders ( o_id number(11) GENERATED BY DEFAULT AS IDENTITY primary key , o_date date, c_id varchar(20) ); 2.2 外键约束可以后期加上,这里面的外键约束,首先要保证外键的数据类型和主表字段数据类型一样 将orders 表 c_id字段修改城和 customers_info 的c_num一致。 alter table orders modify c_id number(10) alter table orders add constraint fk_cid foreign key(c_id) references custormers_info(c_num) on delete cascade; 2.3 实现代码alter table orders drop constraint fk_cid; drop table customers_info; 因为有外键约束,主表customers_info 不能直接删除。所以要先删除从表orders 的约束,再删除主表。