Oracle DDL(数据定义语言)

Oracle DDL(数据定义语言)

创建表

语法格式:
create table 表名(
    列1 数据类型 [primary key],
    列2 数据类型 default 默认值 [not null],
    …,
    constraint 约束名 约束类型(列),
    ….
);
​
--约束名是自定义的. 
--Oracle是没有auto_increment关键字,如果要实现主键的自增长就要使用序列来实现。
Oracle的基本数据类型:
--字符串
char      :定长   name char(10)     'johnny'   :占用10个,其他四个以空补全
varchar2  :变长 按照字节进行计算       name varchar2(10) 'johnny'   :占用6个 
long      :2G
nchar(按照字符计算)
nvarchar2(按照字符进行计算)
​
--数字
number(v1,p1) : v1代表数字的全部长度,p1代表有几个小数位
小数:number(3,2)   :最大值  9.99
整数:number(3)     :最大值  999
​
--日期
date : 日期 ,精确到时分秒,与mysql的datetime
timestamp:时间戳,精确到秒的后9位
​
--大数据类型
blob :  存储二级制文件,最大 4G
clob :  存储字符串,最大4G
Oracle的约束类型
约束
在数据库开发中,约束是必不可少,使用约束可以更好的保证数据的完整性。在
Oracle 数据库中,约束的类型包括:
主键约束(Primary Key)
非空约束(Not Null)
唯一约束(Unique)
检查性约束(Check) check(xxx in(xxx,xxx))
​
外键约束(Foreign Key)foreign key(xxx) references xxx(xxx)
​
--主键约束一般在 ID 上使用,而且本身已经默认了内容不能为空,可以在建表的时候指定。
--非空约束,可以使指定的字段不可以为空。 
--唯一约束,可以使指定的字段的内容是唯一的。
--检查约束,可以用来约束字段值的合法范围 
drop table person;
create table person(
    id number(10) primary key,--主键约束
    name varchar2(200) not null,
    gender nchar(1) default '男',
    constraint person_name unique(name),--非空唯一约束
    constraint person_gender check(gender in ('男','女')) --检查约束
);
​
create table person(
    id number(10) primary key,--主键约束
    name varchar2(200) not null,
    gender number(1) default 1,
    constraint person_name unique(name),--非空唯一约束
    --检查约束
    constraint person_gender check(gender in (1,2)) 
);
​
​
---约束
drop table person;
​
create table person(
    id number(10) primary key,--主键约束
    name varchar2(200) not null unique,--非空唯一约束
    gender nchar(1) default '男' check(gender in ('男','女'))--检查约束
);
​
create table person(
    id number(10) primary key,--主键约束
    name varchar2(200) not null unique,--非空唯一约束
    --检查约束
    gender number(1) default 1 check(gender in (1,2))
);
​
--主键列的值不可以重复,也不可以为空
--外键约束
--订单表      一方
--订单项表    多方      外键
--主表:一方
create table orders(
       id number(10) primary key,
       price number(10,2),
       create_date date
);
​
--从表:多方
create table orders_item(
       id number(10) primary key,
       item_name  varchar2(500),
       order_id number(10),
       constraint fk_order_id foreign key(order_id) references orders(id)
);
​
​
--插入数据
--插入主表
insert into orders values(1,9999.9,sysdate);
commit;
​
​
--插入从表
insert into orders_item values (1,'1111',1);
commit;
insert into orders_item values (2,'2222',null);
commit;
​
​
--删除数据:先删除从表数据,再删除主表数据
​
--只要有引用删除不了
delete from orders where id=1;
​
​
---=============
--级联删除【慎用】
--主表:一方
drop table orders_item;
drop table orders;
create table orders(
       id number(10) primary key,
       price number(10,2),
       create_date date
);
​
--从表:多方
create table orders_item(
       id number(10) primary key,
       item_name  varchar2(500),
       order_id number(10),
       constraint fk_order_id foreign key(order_id) references orders(id) on delete cascade
);
​
​
--插入主表
insert into orders values(1,9999.9,sysdate);
commit;
​
​
--插入从表
insert into orders_item values (1,'1111',1);
commit;
insert into orders_item values (2,'2222',null);
commit;
​
--级联删除
delete from orders where id=1;
​
​
select * from orders_item;

 

修改表

--添加列--加字段
--语法: alter table 表名 add(列名 数据类型 [not null], …); 
alter table person add address01 varchar2(300);
alter table person add address02 varchar2(300);
​
--修改列的类型
--语法: alter table 表名 modify(列名 数据类型 [not null], …); 
alter table person modify address01 varchar2(500);
​
--修改列名
--语法: alter table 表名 rename column 旧列名 to 新列名; 
alter table person rename column address02 to address;
​
--删除列
--语法: alter table 表名 drop(列名 1, 列名 2, …); 
alter table person drop column address;

复制表

create table 表名
as
select 列名 from 表名 [where 条件];
--复制表的结构和数据:
--创建一个 emp 表的备份表(复制表的结构和数据)
create table person_bak
as
select * from person;
​
​
--只复制表的结构:
--只复制表的结构
create table person_bak2
as
select * from person where 1=2; 

删除表

drop table 表名 [purge];
--如果没有指定 purge 参数,被删除的表就会保存在回收站中。
--删除 emp_bak
drop table person_bak; --保存在回收站中,可以从回收站中恢复.
drop table person_bak2 purge; --永久删除表,不会保存在回收站中

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值