使用DDL语句管理表
发布日期:2021-05-08 13:40:42 浏览次数:25 分类:精选文章

本文共 3976 字,大约阅读时间需要 13 分钟。

使用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)

在这里插入图片描述

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

上一篇:使用DML语句处理数据
下一篇:oracle集合运算

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月13日 23时30分48秒