使用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角色。
- CONNECT角色:是授予最终用户的典型权利,最基本的。
ALTER SESSION——修改会话
CREATE CLUSTER——建立聚簇
CREATE DATABASE LINK——建立数据库链接
CREATE SEQUENCE——建立序列
CREATE SESSION——建立会话
CREATE SYNONYM——建立同义词
CREATE VIEW——建立视图 - RESOURCE角色:是授予开发人员的
CREATE CLUSTER——建立聚簇
CREATE PROCEDURE——建立过程
CREATE SEQUENCE——建立序列
CREATE TABLE——建表
CREATE TRIGGER——建立触发器
CREATE TYPE——建立类型 - 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)
外键关联注意:
外键一定是主表的主键。
删表时一定先删子表再删主表,如果直接删主表会出现由于约束存在无法删除的问题。