表管理
ORcale 表名和列名:
必须以字母开头
必须在 1–30 个字符之间
必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
必须不能和用户定义的其他对象重名
必须 不能是Oracle 的保留字
MYsql 命名规则
数据库涉及字符规范
采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线'_'组成,共63个字符.不能出现其他字符(注 释除外).
注意事项:
1) 以上命名都不得超过30个字符的系统限制.变量名的长度限制为29(不包括标识字符@).
2) 数据 对象、变量的命名都采用英文字符,禁止使用中文命名.绝对不要在对象名的字符之间留空格.
3) 小心保留词,要保证你的字段名没有和保留词、数据 库系统或者常用访问方法冲突
5) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性.假如数据类型在一个表里是整 数,那在另一个表里可就别变成字符型了.
字段命名规范
字段名称使用单词组合完成,首字母小写,后面单词的首字母大写,最好是带表名前缀.
数据库表命名规范
数据表名使用小写英文以及下划线组成,尽量说明是那个应用或者系统在使用的.
相关应用的数据表使用同一前缀,如 论坛的表使用cdb_前缀,博客的数据表使用supe_前缀,前缀名称一般不超过5字
创建表的格式
CREATE TABLE dept
(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13));
数据类型 描述
VARCHAR2(size) 可变长字符数据
NUMBER(p,s) 可变长数值数据
DATE 日期型数据
LONG 可变长字符数据,最大可达到2G
CLOB 字符数据,最大可达到4G
RAW and LONG RAW 裸二进制数据
BLOB 二进制数据,最大可达到4G
BFILE 存储外部文件的二进制数据,最大可达到4G
ROWID 行地址
时候用 AS subquery 选项,将创建表和插入数据结合起来
CREATE TABLE table [(column, column...)]
AS subquery;
例:CREATE TABLE dept80
AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM employees
WHERE department_id = 80;
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.
增加列
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
修改类型
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);
可以修改列的数据类型, 尺寸, 和默认值
删除列
ALTER TABLE table
DROP COLUMN(列) (column);
执行RENAME语句改变表, 视图, 序列, 或同义词的名称
RENAME dept TO detail_dept;
TRUNCATE TABLE 语句:( 效果跟delete类似 ) TRUNCATE TABLE detail_dept;
删除表中所有的数据
释放表的存储空间
TRUNCATE语句不能回滚
约束
NOT NULL 非空
UNIQUE 唯一性
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK 检查是否满足条件
添加约束
ALTER TABLE table
ADD [CONSTRAINT constraint] type (column);
删除约束
ALTER TABLE departments
DROP PRIMARY KEY CASCADE;
视图
创建视图格式
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
作用: 控制数据访问
简化查询
数据独立性
避免重复访问相同的数据
使用CREATE OR REPLACE VIEW 子句修改视图
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)--重命名
AS SELECT employee_id, first_name || ' ' || last_name,
salary, department_id
FROM employees
WHERE department_id = 80;
可以在简单视图中执行 DML 操作
当视图定义中包含以下元素之一时不能使用delete:
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
当视图定义中包含以下元素之一时不能使用update :
组函数
GROUP BY子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
当视图定义中包含以下元素之一时不能使用insert :
组函数
GROUP BY 子句
DISTINCT 关键字
ROWNUM 伪列
列的定义为表达式
表中非空的列在视图定义中未包括
删除视图
DROP VIEW view;
序列
作用
自动提供唯一的数值
共享对象
主要用于提供主键值
代替应用代码
将序列值装入内存可以提高访问效率
定义序列:
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
两个方法
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
修改序列
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;
修改序列的注意点
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现
其它的一些限制
例如
CREATE SEQUENCE id_v
INCREMENT BY 1
START WITH 1;
alter table emp
add (id_v number) ;
update emp
set id_v = id_v.nextval;
删除序列
drop sequence 序列名;
例:
drop sequence id_v;
索引
作用:
一种数据库对象
通过指针加速 Oracle 服务器的查询速度
通过快速定位数据的方法,减少磁盘 I/O
索引与表相互独立
Oracle 服务器自动使用和维护索引
自动创建: 在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
创建索引
CREATE INDEX index
ON table (column[, column]...);
例:
create index in_ename
on table(ename)
适合创建B-TREE索引的时机:
1.列值基数比较高(重复率比较低)
2.不以空值做条件
3.列经常出现在条件子句中
4.表很大
5.经常做查询操作,而不是DML操作
6.满足条件的数据不超过总记录数的15%
7.模糊查询不走索引,如果模糊查询想使用索引,必须用全文检索技术
删除索引
DROP INDEX index;
用户权限
创建用户
CREATE USER user
IDENTIFIED BY password;
增加权限
GRANT privilege [, privilege...]
TO user [, user| role, PUBLIC...];
系统权限
CREATE SESSION(创建会话)
CREATE TABLE(创建表)
CREATE SEQUENCE(创建序列)
CREATE VIEW(创建视图)
CREATE PROCEDURE(创建过程)
创建角色
create role mannger;
给角色副权限
grant CREATE TABLE,CREATE VIEW to mannger;
将角色赋予用户
grant mannger to Scott;