数据库基础知识整理文档

Oracle数据库基本数据类型
分类 数据类型 存储内容 存储空间 备注
数值 Number 数值 22个字节 number(n)只能存储整数, 精度n来指定
number(n,m)存储小数 n:代表整数位数+小数位数 m代表的小数位数(整数位数n-m)
Binary_double 64位浮点数 5个字节
Binary_float 32位浮点数 9个字节
字符 Char(n) 单字节字符串 n个字节 当实际数据不足定义长度时,使用空格补全右边不足位
Varchar2(n) 单字节字符串 取决于字符串大小,n个字节为最大值 当做为列类型使用时,最大可为4000个字节;当做为变量类型使用时,最大可为32767个字节
Nvarchar2(n) 多字节字符串 取决于字符串大小,n个字节为最大值
Long 可变长字符串 最大为2G
Clob 大型单字节字符数据块 最大为4G 常用于大文本存储
Nclob 大型多字节字符数据块 最大为4G
时间 Date 日期 4个字节 年月日时分秒,最小时间间隔是秒
Timestamp 时间戳 timestamp(n)时间戳,精确到纳秒,n代表秒后面的位数
Timestamp with local time zone 带有本地时区的时间戳
Timestamp with time zone 带时区的时间戳
Interval day to second 单位为天、小时、分和秒的时间间隔
Interval year to month 单位为年和月的时间间隔
二进制 Raw(n) 二进制数据 最大为n个字节
Long raw 可变长二进制数据 最大为2G
Blob 大型二进制对象 最大为4G 常用于大图片存储
大型数据 Blob 大型二进制对象 最大为4G 常用于大图片存储
Clob 大型单字节字符数据块 最大为4G 常用于大文本存储
Nclob 大型多字节字符数据块 最大为4G
char和varchar2的区别
1、char的是定长的,varchar2的是变长的。例如,存储字符串“hello",用char (50)则占50个字节,不到的部分由空字符补齐,而varchar(50)则只占5个字节50个字节只是最大值,当存储的字符小于50个字节时,按实际长度存储。
2、char的效率比varchar2的效率稍高。
3、char与varchar2是互补的关系。varchar2比char节省空间,但在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。varchar2虽然比char节省空间,但是如果一个varchar2列经常被修改,且每次被修改的数据的长度不同,这会引起“行迁移”(Row Migration)现象,造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar2会更好一些。
SQL语句
1 表的管理
1、建立表
1)普通建表语句
create table 表名
(
列名 类型 [约束],
列名 类型 [约束],

列名 类型 [约束]
)
2)利用子查询来建表
create table 表名
as
查询语句
2、删除表
drop table 表名
3、修改表
1)追加列
alter table student
add(phone varchar2(30),address varchar2(50))
2)修改列
alter table student
modify(address varchar2(200))
3)删除列
alter table student
drop (phone)
4)重命名表
rename student to stu
5)清空表
truncate table stu–ddl一次性截断表
delete from stu–dml 删除表中数据
4、五种约束:约束是给列加的
1)非空约束 not null
alter table dept modify (dname not null–添加
alter table dept modify (dname null)–取消
2)主键约束 primary key
限制列值不能重复,且不能为空
alter table dept add constraints PK_dept_deptno primary key(deptno)–添加
alter table dept drop constraints PK_dept_deptno–删除
3)唯一约束 unique
限制列值不能重复,但不限制空值
alter table dept add constraints UQ_dept_dname unique(dname)–添加
4)检查约束 check
限制一个字段的取值范围
alter table emp add constraints CK_emp_sal check(sal>=400)–添加
5)外键约束 foreign key
外键必须参考主表中的主键,可以为空,可以重复
alter table emp add constraints FK_emp_deptno foreign key(deptno) references dept(deptno)–添加
2 用户的管理
1、创建新用户
create user 用户名 identified by 密码
2、分配权限
grant 权限1,权限2,… to 用户名
1)分配开发权限
grant connect,resource to 用户名
2)分配角色
grant 角色 to 用户
3)分配访问权限
grant select,insert… on scott.emp to 用户名
grant all on scott.employees to 用户名
3、回收权限
revoke 权限1,权限2,… from 用户名
4、修改密码
alter user 用户名 identified by 新密码
5、解锁用户
alter user 用户名 account unlock;
6、删除用户
1)删除空用户
drop user 用户
2)删除非空用户
drop user 用户名 cascade
3 查询 select语句
DQL->select语句执行以后返回的查询结果-二维表格数据
select 字段列表(*) from 表名
select语句的执行过程
1、去重
select distinct 字段列表 from 表名
2、内存虚表dual
select ‘100’+‘200’ from dual
3、运算符
1)算术运算符

      • /(+一定是数学的加法运算)
        select first_name, salary, salary * commission_pct, salary + salary * commission_pct from employees
        2)比较运算

< <> =
select * from employees where salary>10000
1)日期的比较select * from employees where hire_date>‘01-1月-98’(可以直接和日期类型进行比较,在Oracle中只识别01-1月-98)
2)特殊的比较运算
[not] between and
[not] in (set)
[not] like
is [not] null
3)逻辑运算
and 并且
or 或者
not 非
4)运算符的优先级(可以使用括号来改变优先级顺序)
1算术运算符
2连接符
3比较运算符
4 is null ,like,in
5 between
6 not
7 and
8 or
4、null值
1)空值-是无效的,未指定的,未知的,不可预测的值
2)空值不是空格也不是0
3)在oracle中空值和空字符串是等价的
4)包含空值的数学表达式都是空
5)任何值和null值比较结果一定为假
5、列的别名
as 别名
空格 别名
select first_name as “员工:姓名”,salary as 工资,salarycommission_pct 提成,salary+salarycommission_pct 实际工资 from employees
6、字符串的连接||
select ‘全名:’||first_name||last_name from employees
select 100||200 from dual
7、过滤子句
select 字段列表 from 表名 where 条件
8、排序子句
select 字段列表 from 表名 where 条件 order by 字段 asc|desc
1)rownum
查询结果为自增编号
条件为假的情况
rownum>n
rownum>=1以外的值
rownum=1以外的值
2)rowid
表数据行的物理地址
在插入数据的时候生成
这个地址在数据库中是唯一的
4 Oracle中常用的函数
1、字符函数
1)lower
2)upper
3)initcap
4)concat
5)substr
6)length
7)instr
2、数学函数
1)round
2)trunc
3)mod
4)ceil
5)floor
3、日期函数
1)sysdate
2)日期的加减法运算(单位是:天)
一个日期加减一个数字返回的还是一个日期
3)日期做差,返回的是两个日期之间相差的天数
4)months_between : 两个日期之间间隔了多少月
5)add_months
4、转换函数:数据类型之间的转换
1)隐式转换:(自动转换)
char varchar2—>number
char varchar2—>date
number-char varchar2
date-char varchar2
数字和日期不能做任何的转换(无论是显式还是隐式的)
2)显式转换:(通过oracle自带的转换函数来完成)
to_char() : date–>char
to_date() : char–>date
to_number()
5、通用函数
nvl(参数1,参数2) : 如果参数1不为空,返回参数1,如果为空,返回参数2
5 多表的联合查询
1、叉集 cross join
select * from employees
cross join departments
cross join …
2、内连接:返回满足条件的 inner join … on 连接谓词
select e.first_name,d.department_name,j.job_title from employees e
inner join departments d on e.department_id = d.department_id
inner join jobs j on e.job_id = j.job_id
inner join … on 连接谓词
inner join … on 连接谓词
3、外连接:既返回满足条件,也返回不满足条件
1)左外连接 left [outer] join
2)右外连接 right [outer] join
3)满(全)外连接 full [outer] join
6分组查询和组函数(聚合函数)
1、组函数
sum
avg
min
max
count
2、分组查询:
select 字段列表 from 表名 where 条件 group by 字段 having 分组条件 order by 字段 asc|desc
7子查询
1、子查询的几种情况分析:
1)子查询作为主查询的查询条件
2)子查询作为主查询结果中的列
3)子查询作为数据来源(虚拟表)
2、不相关子查询(基本子查询)
子查询不依赖主查询(子查询可以独立运行)
3、相关子查询(内外交互式相关子查询)
子查询是不能独立运行的
8查询语句执行顺序

9DML: 数据操作语言
1、插入语句
insert into 表名(字段列表) values(值列表)
2、更新语句
update 表名 set 字段1=值1,字段2=值2,… where 条件
3、删除语句
delete from 表名 where 条件
10事务和锁
1、事务: 是一种机制,是一个序列,是一个不可分割的逻辑单元,要么成功,要么失败
1)事务特性(ACID特性): 原子性、一致性、隔离性、永久性
2)TCL事务控制语言:commit - 提交、rollback - 回滚
3)事务的生命周期: 以任意的dml操作开始,以提交(commit,DDL或者DCL,正常退出会话)或者是回滚(rollback,异常退出会话)结束
2、锁:隔离性–锁的机制(有事务才有锁),主要作用就是控制并发访问资源,限制用户动作
1)死锁:常见
Oracle可以自动检测死锁,然后抛出异常,先结束一方的等待,就解开了死锁的状态。
11视图
存放的就一条查询语句(物化视图例外)
创建语句:
create [or replace] view 视图名as查询语句
12序列
用于产生一系列唯一数字的数据库对象
Create sequence seq_id–序列名
Start with 91–设置起始值(默认1)
Increment by 10–设置增长值(默认1)
Cache 10–设置缓存数量(默认20)
nextval、currval
13索引
索引是给列加的,用于加快查询速度,会降低dml速度,当使用没有索引的列进行条件筛选的时候,默认使用的全表扫描。
1、创建方式
1)自动创建: 在定义primary key 和 unique约束后,系统会自动在相应的列上创建唯一性索引
2)手动创建: 可以在其他的列上创建非唯一索引,加快查询速度
2、分类
1)b-tree索引: 默认,适合列值的基数比较高,冗余数据很少的
create index 索引名 on 表名(字段)
2)位图索引: 适合列值的基数比较低,冗余数据很多的
create bitmap index 索引名 on 表名(字段)
3、建立b-tree索引时机
1)列值基数比较高(重复率比较低)
2)不以空值做条件
3)列经常出现在条件子句中
4)表很大
5)经常做查询操作,而不是做dml操作
6)满足条件的数据不超过总记录数的15%
7)模糊查询不走索引

你可能感兴趣的:(数据库基础知识整理文档)