使用DDL语句管理表

使用DDL语句管理表

创建表空间

表空间是oracle数据库的逻辑单元。一个表空间可以与多个数据文件(物理结构)关联,一个数据库下可以建立多个表空间,一个表空间可以建立多个用户、一个用户下可以建立多个表。

create tablespace itcast 
datafile 'd:\itcast001.dbf' 
size 100m 
autoextend on 
next 10m

在这里插入图片描述

用户

1. 创建用户
create user tom 
identified by 916437 
default tablespace itcast

在这里插入图片描述

2. 用户赋权限
新创建的用户没有任何权限,登陆后会提示。

在这里插入图片描述
Oracle中已存在三个重要的角色: connect 角色,resource 角色,dba角色。

  1. CONNECT角色:是授予最终用户的典型权利,最基本的。
                      ALTER SESSION——修改会话
                      CREATE CLUSTER——建立聚簇
                      CREATE DATABASE LINK——建立数据库链接
                      CREATE SEQUENCE——建立序列
                      CREATE SESSION——建立会话
                      CREATE SYNONYM——建立同义词
                      CREATE VIEW——建立视图
  2. RESOURCE角色:是授予开发人员的
                      CREATE CLUSTER——建立聚簇
                      CREATE PROCEDURE——建立过程
                      CREATE SEQUENCE——建立序列
                      CREATE TABLE——建表
                      CREATE TRIGGER——建立触发器
                      CREATE TYPE——建立类型
  3. DBA角色:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构,并且系统
    权限也需要DBA授出,且DBA用户可以操作全体用户的任意基表,包括删除。
grant connect,resource to tom;//给tom赋予connect和resource的权限

创建表

语法:
在这里插入图片描述
在这里插入图片描述

使用子查询创建表的语法:
在这里插入图片描述
创建表范例:创建people表

create table people(
		pid		number(10),
		name	varchar2(10),
		gender	number(1)	default 1,
		birthday	date
);


insert into person(pid,name,gender,birthday) 
values(1,'小汉',1,to_date('2020-7-9','fmyyyy-mm-dd'));

修改表

在sql中使用alter 可以修改表
添加语法:ALTER   TABLE   表名称   ADD(列名1   类型   [DEFAULT 默认值],  列名2   类型
   [DEFAULT默认值]  ····)

修改语法:ALTER   TABLE   表名称   MODIFY(列名1   类型   [DEFAULT 默认值],  列名2   类型
   [DEFAULT默认值]  ····)

修改列名:ALTER   TABLE   表名称   RENAME   COLUMN   列名1   TO   列名2

范例:在people表中增加列address
alter  table  people  add(address  varchar2(10))

范例:把people表的address列的长度修改成20长度
alter  table  people  modify(address  varchar(20))

删除表

语法:
drop table 表名

约束

在数据库开发中,约束是必不可少,使用约束可以更好的保证数据的完整性。在Oracle数据库中,约束的类型包括:
主键约束( Primary Key)
非空约束( Not Null)
唯一-约束( Unique)
外键约束( Foreign Key)
检查性约束( Check)

1. 主键约束

主键约束都是在id上使用,而且本身已经默认了内容不能为空,可以在建表的时候指定。创建一张表,把id作为主键

create table people(
		id	number(10)	primary key,
		name	varchar2(10),
		gender	number(1)	default 1,
		birthday	date
);

TOM.SYS_C0011095是系统自动分配的约束的名字(系统自动命名的主键名)
在这里插入图片描述
主键不能为空在这里插入图片描述
当然我们也可以自定义主键约束的名字:

create table people(
		id	number(10),
		name	varchar2(10),
		gender	number(1)	default 1,
		birthday	date,
		constraint people_pk_id primary key(id)
);

在这里插入图片描述

2. 非空约束

使用非空约束,可以使指定的字段不可以为空。

create table people(
		id	number(10) not null,
		name	varchar2(10) not null,
		gender	number(1)	default 1,
		birthday	date
);

3. 唯一约束(unique)

表中的一个字段的内容是唯一的

create table people(
		id	number(10),
		name	varchar2(10) unique,
		gender	number(1)	default 1,
		birthday	date
);

也可以自定义唯一约束的名字:

create table people(
		id	number(10),
		name	varchar2(10),
		gender	number(1)	default 1,
		birthday	date,
		constraint people_name_uk unique(name)
);

4. 检查约束

使用检查约束可以来约束字段值的合法范围。

create table people(
		id	number(10),
		name	varchar2(10) unique,
		gender	number(1) check(gender in (1,2)),
		birthday	date
);

也可以自定义检查约束名:

create table people(
		id	number(10),
		name	varchar2(10) unique,
		gender	number(1),
		birthday	date,
		constraint people_gender_ck check(gender in (1,2))
);

5. 外键约束

之前所讲的都是单表的约束,外键是两张表的约束,可保证关联数据的完整性。
范例:创建两张表,一张订单表,一张是订单明细表,订单和明细是一对多的关系


create table orders(
		order_id	number(10),
		toal_price	number(10,2),
		order_time	date,
		constraint orders_order_id_pk primary key(order_id)
);

create table order_detail(
		detail_id	number(10),
		order_id	number(10),
		item_name	varchar2(20),
		quantity	number(10),
		constraint order_detail_detail_id_pk primary key(detail_id)
);


--向订单表里添加一条数据,order_id为1,总价为500,添加时间是现在--
insert into orders values(1,500,sysdate);

--向订单明细表里添加一条数据,明细id为1,order_id为2,商品信息为’小米手环‘,数量为2--
insert into order_detail values(1,2,'小米手环5NFC版',2);

我们在两张表中插入如上两条数据,我们发现在order_detail表中插入的order_ id在order表中并不存在,这样在数据库中就产生了脏数据。此时需要外键来约束它。

我们再次建表:


create table orders(
		order_id	number(10),
		toal_price	number(10,2),
		order_time	date,
		constraint orders_order_id_pk primary key(order_id)
);

create table order_detail(
		detail_id	number(10),
		order_id	number(10),
		item_name	varchar2(20),
		quantity	number(10),
		constraint order_detail_detail_id_pk primary key(detail_id),
		constraint order_detail_detail_id_fk foreign key(order_id) references orders(order_id)
);

insert into orders values (1, 500, sysdate)
insert into order_detail values(1,2,'小米手环5NFC版',2)

在这里插入图片描述
外键关联注意:
外键一定是主表的主键。
删表时一定先删子表再删主表,如果直接删主表会出现由于约束存在无法删除的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brrby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值