常见的数据库对象
1、 表:基本数据存储集合,由行和列组成
2、 视图:从表中抽出的逻辑上相关的数据集合
3、 序列:提供有规律的数值
4、 索引:提高查询的效率
5、 同义词:给对象起别名
用户定义的表:
a) 用户自己创建并维护的一组表
b) 包含了用户所需的信息
数据字典:
c) 由 Oracle Server 自动创建的一组表
d) 包含数据库信息
命名规则:
表名和列名:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须不能是Oracle 的保留字
Oracle默认存储是都存为大写
数据库名只能是1~8位,datalink可以是128位,和其他一些特殊字符
Create table 语句:
必须具备:
CREATE TABLE权限
存储空间
必须指定:
表名
列名, 数据类型, 数据类型的大小
create table demo (name varchar(20) )
使用子查询创建表:
时候用 AS subquery 选项,将创建表和插入数据结合起来
指定的列和子查询中的列要一一对应
通过列名和默认值定义列
SQL> create table demo2
2 as
3 select ename,sal from emp ;
Default值:
执行insert操作时,可以为其指定默认值
值、表达式和SQL语句都可以作为默认值
其他的列名或者是伪列都是非法的
默认值的类型必须和该列的类型一致
CREATE TABLE hire_dates (id NUMBER(8),hire_date DATE DEFAULT SYSDATE);
数据类型:
1、 varchar2(size):可变长字符数据 最大长度为4000 bytes 可做索引的最大长度为749
2、 char(size):固定长字符数据 最大长度为2000 bytes
3、 number(p,s):可变字符数据 数字类型 P有效位,S为小数位
4、 date:日期型数据
5、 long:可变长字符数据,最大可达2G
6、 clob:字符数据,最大可达到4G
7、 raw(long,raw):原始的二进制数据
8、 blob:二进制数据,最大可达到4G
9、 bfile:存储外部文件的二进制数据,最大可达到4G
10、 rowid:行地址 是一个伪列
ALTER TABLE 语句
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.
追加一个新列,新列是表中的最后一列
SQL> alter table demo add (
2 sal number
3 );
表已更改。
可以修改列的数据类型, 尺寸, 和默认值。对默认值的修改只影响今后对表的修改
SQL> alter table demo modify (sal varchar2(20));
表已更改。
使用 DROP COLUMN 子句删除不再需要的列.
SQL> alter table demo drop column sal;
表已更改。
删除表:
数据和结构都被删除
所有正在运行的相关事物被提交
所有相关索引被删除
DROP TABLE 语句不能回滚
SQL> drop table qqq;
改变对象的名称:
执行RENAME语句改变表, 视图, 序列, 或同义词的名称
必须是对象的拥有者
SQL> rename demo2 to qqq;
清空表:
TRUNCATE TABLE 语句:
删除表中所有的数据
释放表的存储空间
TRUNCATE语句不能回滚
可以使用 DELETE 语句删除数据
SQL> truncate table qqq;
约束
约束是表一级的限制
如果存在依赖关系,约束可以防止错误的删除数据
约束的类型:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
约束规则:
用户可以自定义约束,也可以使用Oracle Server的sys_cn格式命名约束
约束创建的时机:
创建表的时候,同时创建约束
表结构创建完成后
约束可以定义在列一级,或者是表一级
通过数据字典查看约束
非空性约束与唯一性约束:
create table checkTable(email varchar2(30) not null,constraint chk_email unique(email));
insert into checkTable values ('111@111.com');
会插入一条记录,如果再插入一条相同的记录,会报错,因为有唯一性约束,当然如果再增加几个字段,向其它字段中插入信息而不向email中插入任何数据也是会报错的,因为有不为空的约束,如果email有一个默认值就不会出现由于不能为空而出现的问题了
主键约束:
1 create table bookType(
2 bt_id number(9),
3 bt_name varchar2(30),
4 constraint bt_id_pk primary key(bt_id)
5* )
外键约束:
1 create table books(
2 bk_id number(9),
3 bk_name varchar2(30),
4 bt_id number(9),
5 constraint bk_id_pk primary key(bk_id),
6 constraint bt_id_fk foreign key (bt_id) references bookType(bt_id) on delete cascade
7* )
SQL> /
不能删除有外键约束的记录
外键约束(续)
FOREIGN KEY: 在子表中,定义了一个表级的约束
REFERENCES: 指定表和父表中的列
ON DELETE CASCADE: 当删除父表时,级联删除子表记录
ON DELETE SET NULL: 将子表的相关依赖记录的外键值置为null
SQL> delete from bookType where bt_id=1;
check约束
定义每一行记录所必须满足的条件
下面的表达式可以使用在check约束中:
引用CURRVAL, NEXTVAL, LEVEL, 和ROWNUM
调用SYSDATE, UID, USER, 和USERENV 函数
另一个表的查询记录
SQL> create table check01(
2 sal number(3,2)
3 ,
4 constraint sal_ck check(sal>0.2)
5 );