创建表
Create table 表名(
)
约束
Primary 主键
Unique 唯一约束
Default 默认
Check 检查
Foreign 外键
数据类型
1.字符类型
char和varchar2区别:
char表示固定长度字符串,长度不足使用空格补充。Varchar2表示可变长度字符串,最多可以储存4000个字节。在定义该数据类型时,应该指定其大小。与char类型相比,使用varchar2可以节省磁盘空间。
2.数值类型
Number :可以储存正数、负数、零、定点数和精度为38位的浮点数,格式为number(m,n),其中m表示精度,代表数字的总位数;n表示小数点右侧数字的位数。
3.日期类型
Date :用于储存表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日。Data类型的长度是7,7个字节分别表示世纪、年、月、日、时、分、秒。
Timestamp :与date类型一样, 其中秒的数值精确到小数点后6位,该数据类型同时包含时区信息。
4. 大对象类型
Clob :
用于储存可变长度的字符数据,最多可储存4GB的数据。该数据类型用于储存varchar2类型不能储存的长文本信息。
Blob :
用储存较大的二进制对象,如图片、视频剪辑和声音剪辑等,最多可储存4GB的数据。
分页查询:
分页查询分为三层的原因
创建序列
Create sequence 序列名
Start with 1 初始值 --用来指定序列的起始值
Increment by 1 步长 --用来指定序列的增量,如果取负值,则为递减序列
Minvalue 最小值|maxvalue 最大值
Nominvalue 无最小值| nomaxvalue 无最大值 --指定序列是否有最大值或最小值
Cycle | nocycle --用于指定序列值达到最大值后,是否从最小值开始产生
Cache 预分配序列个数 |nocache --用来指定是否在缓存中保存预先分配的序列值,如果选择可以提高获取序列的速度。
Order | noorder --是否确保序列值是否唯一和有序。
序列名.nextval 产生下一个值
.currval 序列当前值
dual虚表
子查询:
在where语句中使用多行子查询时,必须使用多行运算符
in 、not null、 like _ % 、group by 、all、any...
----------------------
创建表空间
Create tablespace 表空间名
Datafile ‘数据储存位置以及名称 结尾.DBF’ size 文件初始大小;
创建用户
Create user 用户名
Identified by 密码
Default tablespace 默认表空间
Temporary tablespace 临时表空间
oracle数据库角色:
Connect :临时用户,特别是那些不需要创建表的用户,通常赋予该角色。
Resource:可以创建表,触发器,过程等;
DBA : 数据库管理员角色,拥有管理数据库的最高权限
oracle权限:
Select 查询
Update 修改
Delete 删除
赋予权限/角色
Grant 权限|角色 to 用户名
撤销权限/角色
Remove权限|角色 from 用户名
删除表空间、用户、序列、过程、触发器、函数
--------------------------函数
字符函数:
Substr 取字符串
trim 删除字符串两边的字符串,如删除字符串两边的空格
Lpad 在列的左边粘贴字符
Rpad 在列的右边粘贴字符
Upper 返回字符串,并将所有的字符大写
Lower 返回字符串,并将所有的字符小写
Length 返回字符串的长度
Concat 连接两个字符串 同符号‘ || ’
Replace 替换字符串
日期函数:
add_months 增加或减去月份
Trunc 去秒
Sysdate 返回系统当前时间
Last_day 返回日期的最后一天
Months_between(date2,date1) 给出date2与date1相差的月份
Next_day(date,’day’) 给出日期date和星期x之后计算下一个星期的日期
其他函数:
Nvl(a,b) 如果a不为null,返回b,否则返回a
Nvl2(a,b,c) 如果a不为bull,返回b,为null返回c,b和c类型不同时,c会自动转化为b的类型
Nullif(a,b) a和b相等返回null ,否则返回a
to_char 把numeric转化成string
to_date 把string转化成date
聚合函数:
Count 返回行数
Sum 求和
Min 最小值
Avg 平均值
Max 最大值
-----------------------PL-SQL块
declare
--变量
--常量 constant
--类型
--record ---自定义数据类型
Type record_name is record(
%type;
)
--table
Type table_name is table of dept%rowtype ----值的类型为dept%rowtype类型
Index by binary_integer; ---键为有符号整数
--异常
自定义异常
ept_no_emp exception;
--游标
获取多行数据的时候需要使用
隐含游标:
sql%found 、 sql%notfound 、 sql%rowcount (返回影响行数 没有返回0)、sql%isopen(判断游标是否打开 执行后自动化关闭游标 属性属性为false)
Cursor cursor_name is sql语句
begin
---------代码段
If sql%notfound then
Raise ept_no_emp;
open cursor_name;``--打开游标
Fetch cursou_name into 数据类型 --提取数据
或者 Fetch cursou_name bulk collect into 数据类型 ---一次性提取
Close cursor_name; --关闭游标
Exception when ept_no_emp then
dbms_output.put_line();
.....
end;
赋值:
:=
sql语句中赋值into变量名
循环:
①loop
Loop
语句段;
Exit [when 条件表达式]
End loop;
②while
While 条件表达式 --为ture执行
语句段
③for
For i in 0..n --范围
判断:
①if
If 条件表达式 then
语句段1
Else
语句段2
End if;
If 条件表达式1 then
语句段1
Elsif 条件表达式2 then
语句段2
Elsif 条件表达式n then
语句段n
Else
语句段
End if;
②case
Case 表达式
When 条件表达式结果1 then
语句段1;
When 条件表达式结果2 then
语句段2;
...
Else
语句段n;
End case;
事务(transaction):
①理解事务概念
数据库事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据库操作语言insert、delete、update)语句要么全部成功,要么全部失败。
②事务四种特性
<1>.原子性(Atomicity):
事物的原子性是指事务中包含的所有操作要么全做,要么不做。也就是说所有的活动在数据库中要么全部反应,要么全部不反应,以保证数据库的一致性。
<2>.一致性(Consistency):
事务的一致性是指数据库在事务操作前和事务处理后其中数据必须满足业务的规则约束。
<3>.隔离性(Isolation):
隔离性是指数据库允许多个并发的事务同时对其中的数据进行读写或修改的能力,隔离型可以防止多个事务的并发执行时,由于它们的操作指令交叉执行而导致数据的不一致性。
<4>.持久性(Durability):
事物的持久性是指在事务处理结束后,它对数据的修改应该是永久的。即使是系统在遇到故障的情况下也不会丢失,这是数据的重要性决定。
③事务处理
Savepoint : 建立储存点,当事务处理发生异常而回滚时,可指定事务回滚到某储存点。然后从该点从新执行。
Rollback : 回滚事务 取消对数据库所做的任何操作
Commit : 提交事务 对数据库的操作做持久的保存
④理解死锁
------------------------------过程 函数 包 包体 触发器
in out
创建过程
Create or replace procedure procedure_name(param_num in out number) --参数
创建函数
Create or replace function fun_name(变量名 , 数据类型)
return number --返回类型为number
Is/as
声明部分
Begin
执行部分
Exception
异常处理部分
End;
创建包
Create or replace package_name
Is|as
可以定义变量、常量、过程、函数..
End package_name;
创建包体
Create or replace package body package_name
Is|as
实现包中所定义的共用过程和函数
End package_name;
创建触发器
Create or replace trigger trigger_name
[before | after] --前触发|后触发
[Insert | delete | update ] on 表名
for each row
Begin
End;
列: 创建触发器
--------------每月27号禁止向emp表添加数据
create or replace trigger tri_insterEmp
before insert on dept
begin
if to_char(sysdate,'dd')='27' then
raise_application_error(-20001,'不允许在27号向emp表添加数据');
end if;
end;