常见的orcale数据库对象 --- 表
表:基本的数据存储集合,由行和列组成。
1.表名和列名的命名规则:
l 必须以字母开头
l 必须在 1–30 个字符之间
l 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
l 必须不能和用户定义的其他对象重名
l 必须不能是Oracle 的保留字
l Oracle默认存储是都存为大写
l 数据库名只能是1~8位,datalink可以是128位,和其他一些特殊字符
2.数据类型:
varchar2(size) 可变长度的字符串 最大长度为4000 bytes
char(6) 固定的字符串 最大长度为2000 bytes
nchar(3) 根据字符集而定的固定长度字符 1000 字符
nvarchar2 根据字符集而定的可变的 长度为 2000 字符
一个字符两个字节
number(p,s) 数字 p是有效位,或精度,s是小数
number(3,2) 3是有效位,2是小数位 多余的小数四舍五入
p的范围:1~38
s的范围:-84~127
date
long
clob 字符数据
blob 二进制数据
raw 固定长度二级制
bfile 存放在数据外的二进制数据
rowid 数据库中记录唯一的行号,是一个伪劣,是在查询语句的时候构造出来的
integer
float
raw 存入的是流,图像声音等(image raw)
long rsw
real == number(63) 精度更高比float
1.普通创建表,在scott用户下创建
create table demo(
id number(8),
name varchar2(30) default ‘laowng’
);
因为访问表是有权限的,所以在scott用户下创建的表在hr中无法访问,要授权之后才可以访问,语句为:
grant select to demo to hr;
授权之后访问的语句为:
select *from scott.demo
2.子查询创建表
create table demo1 as select * from emp;
3.alter table语句
追加新的列
修改现有的列
为新追加的列定义默认值
删除一个列
(1)为表追加一个新的列:
alter table demo add (id number(8));
(2)修改现有的列字段的类型:
alter table demo modify (name varchar2(30));
(3)修改现有列的字段名:
SQL> alter table demo rename column name to realname;
注:对默认值的修改只能影响今后对表的修改
(4)删除一列:
alter table demo drop column id;
(5)删除表:
删除表的时候数据和结构都被删除
所有正在运行的相关事务被提交
所有相关索引被删除
drop table 语句不能回滚
drop table demo
(6)改变对象的名称(重命名表)
SQL> rename demo to demo_dep;
注:执行rename语句改变表, 视图, 序列, 或同义词的名称
必须是对象的拥有者??
(7)清空表
truncate table demo;
作用:
删除表中所有的数据
释放表的存储空间
注:
truncate语句不能回滚
可以使用delete语句删除数据
4.根据数据类型创建表:
SQL> create table demo9(
name varchar2(30),
sex char(2),
age number(3),
birth date
);
表已创建。
5.修改日期的格式:
SQL> select to_char(birth,'yyyy-mm-dd HH24:MI:SS') from demo9;
6.创建表的约束:
约束是表一级的限制
如果存在依赖关系,约束可以防止错误的删除数据
约束的类型有5种:
(1)not null
(2)unique
(3)primary key
(4)foreign key
(5)check
用户可以自定义约束,也可以使用Qracle Server的sys_cn格式命名约束
约束创建的时机:
创建表的时候,同时创建约束
表结构创建完成后
约束可以定义在列一级,或者是表一级
通过数据字典查看约束
定义的约束可以分为表级约束和列级约束:
作用范围:列级约束只能作用在一个列上,而表约束可以作用在多个列上(当然表约束也可以作用在一个列上)
定义方式:列约束必须跟在列的定义里后面,表约束不与列一起,而是单独定义
非空约束(not null)只能定义在列上
列级的约束为:
not null 系统命名
constraint 加这个单词说明是用户自定义的约束
SQL> create table checkTable(
id number(8),
name varchar2(30) default 'redarmy' not null
);
或
SQL> create table checkTable2(
name varchar2(30)
constraint chk_name_nn not null
);
表级的约束:
create table check(
email varchar2(30) not null,
constraint chk_email unique(email)
);
主键约束
create table bookType(
bt_id number(9),
bt_name varchar2(30),
constraint bt_id_pk primary key(by_id)
);
Oracle主键约束必须放到最后面,因为主键约束是针对于一个表来说的。
create table books(
bt_id number(9),
bt_name varchar2(30),
constraint bt_id_pk primary key(by_id)
);
外键约束:
create table books(
bk_id number(9),
bk_name varchar2(30),
bt_id number(9),
constraint bk_id_pk primary key(bk_id),
constraint bt_id_fk foreign key (bt_id)
references bookType(bt_id) on delete cascade
);
在定义外键的同时设了级联删除
check约束
SQL> create table check01(
sal number(3,2),
constraint sal_ck check(sal>0.2)
);
查询所有的用户约束
SQL> select * from user_constraints;