Oracle笔记
小知识
查询当前时间(具体)
select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') from dual;
select to_char(sysdate,'yyyy-mm-ddhh24:mm:ss') from dual;(有bug)
星期几的前三个字母
dy
略
对货币的转换
select to_char(emp_salary,'L999,999,99')from emp;
select to_char(emp_salary,'L000,000,00')from emp;
9:显示的是数字,可以忽略值前面的0
0:显示的是数字,足的会补0
. : 小数点
, : 逗号
$: 美元符号
L:本地的货币币种
C:国际货币符号
G:指定位置显示分组符号
D:显示小数点符号
字符串转换为数字
to_number
select to_number(‘123423’) from dual;
系统函数:
sys_countext
terminal
language
db_name
nls_date_format
session_user
数据库建模
系统开发的周期
需求分析à系统设计(数据库设计,框架)à编码à测试à上线维护
数据开发:
是一个自顶向下的系统过程
将商业信息需求转化为一个可操作的数据库
由五个阶段组成:
1) 策略分析
2) 数据建模 (ER图)
3) 构建文档
4) 将ER图转化为表实例,列,对应的视图关系
5) 产品化,设计SQL语句,约束
6) 避免重复发明轮子
数据模型
ER
实体关系模型的概念
实体:生活中存在的一些事物
属性:描述实体的一些特征,品牌,型号
关系:两个实体质检的关联关系
数据建模
实体关系模型
根据业务规则和描述创建ER图
#:唯一(主键UID)
*:非空
O:可有可无,任意值
实线:mustbe 必须
虚线:maybe可有可无
竖杠(|):代表要强制在(|)一方建立一个联合组件,将对方的UID拿过来做联合组件
实线加虚线:有订单必须要有客户,有客户不一定有订单
实体关联关系的类型
one-to-one:一对一关系如果要建立主外键关系,如果是实线或者是虚线都可以随便建
one-to-many:一对多关系外键建立在多的一方
many-to-many:多对多可以拆分两个一个或建立一张桥表
完整型约束
主键(primary key PK):一个表最多只能有一个主键,主键内容非空
如果多个列联合作为主键,则是联合唯一、单列非空
-代理主键:流程账号的数字、递增,没有任何逻辑含义,只是个数字,代号
-自然主键:(例如身份证号)具有一定的商业意义
外键(foreign key FK):由一列或多列组成取值为本表或其他表位置约束列或主键列,可以为null如果外键是联合组件的一部分那么外键的值不能为空
非空(not null):一定要赋值
唯一(unique):取值不能重复
check:自定义约束限定列的内容
数据库设计
实体属性映射成表和列
命名规则定义
其他需求设计
-设计索引
-定义视图
-设计物理存储空间
-重新定义完整性约束
数据库设计步骤
创建表实例图
-映射实体到表
-映射属性到列
-映射UID到主键
-映射关联关系到外键
数据字典
包含数据库的相关信息,包括:
数据库用户的名字
授权给用户的权限信息
数据库的对象信息
表的约束信息
根据权限分类
-user:用户创建的对象对应的数据字典表。例如:user_object,user_tables等
-user
select * from user_objects;
-all :所有用户能访问的对象(包括用户创建的对象)
select * from all_objects;
-dba:所有对象对应的数据字典表。例:dba_objects,dba_tables
select * from dba_objects;
-v$:描述系统同性能相关的数据字典表
-dictionary:一个特殊的数据字典表,用来描述数据字段表相关信息的
-table_privileges:数据表权限
使用人员范围
dba: v$version DBA
开发人员
user_*:只能看到本用户schema下面的表
all_*:可以看到其他用户的表(条件是必须要授予权限)
数据字典常用表的定义
select * from dictionary;
dictionary:数据字典表相关信息的数据字典表;
user_objects:存放当前用户(schema)下所有的对象(表、视图、索引、约束等)
select * from user_objects;
user_constraints:存放的是当前用户下所有的约束信息;
user_cons_columns:查看数据字典中所有视图所对应的列
user_users:存放当前用的信息
select * from user_users;
all_users:存放数据库中所有用户的信息
user_indexes:索引
all_indexes:所有用户的索引信息
user_tables:表的信息
all_tables:所有用户表的信息
user_views: 视图
all_views:
user_synonyms:存放当前用户所有表的同义词
数据库常见对象
序列:sequence
select * from emp;
在Oracle数据库中是一种特殊的对象,能够产生现需的整数值,
可以为数据库只多个对象共同使用,主要作用于作为主键值
创建sequence
-可选择位置
cache n:可以每次预产生多个存放到内存中
默认情况下 cache 20
-sysle 用于循环,到最大值后循环
创建序列
create sequence name(emp_t)(姓名)
[increment by n](自增长)
[start with n](从哪开始)
[{maxvalue n | nomaxvalue}]
[{minvalue n |nominvalue}]
[{cycle | cache n |nocache}]
查询序列
select * from user_sequences;
select emp_s.nextval from dual;
select emp_s.currval from dual;
修改序列
alter sequence emp_s;
删除序列
drop sequence emp_s;
创建视图
create [or replace][force |noforce]view name
as subquery(查询是的视图);
例如:
create view emp_v as
select emp_name,emp_salary from emp whereemp_salary < 2000;
[with check option]
[with read only]
or replace:如果有相同名字的视图对象则替换
force | noforce: 如果subquery中源表不存在,先创建视图对象,这时视图对象然后创建,但不能正常使用,默认值是noforce,即源表不存在,不能正常创建视图
with check option: 表示可以进行crud操作,但应该满足where子句
with read only: 只允许进行select操作
简单视图
数据来源于一张表,不包含函数及进行分组,可以进行DML操作
复杂视图
数据来源于多个表,包含函数及进行分组,不能进行DML操作
创建视图的优点
限制数据库访问
简化查询
数据的独立性
对同一数据有不同的表现
查询视图
select * from emp_dept_v(视图名);
修改视图
update name(视图名)
set sal = 900 where emp_name =’smith’;