Java直连核心代码:class.froName(“oracle.jdbc.driver.OracleDriver”);
Connectionct = DriverManager.getConnection(“jdbc:oracle:thin:@127.0.0.1:1521:数据库名”,“scott“,”tiger”);
sys_context
terminal:当前会话客户对应的终端标识符
language:语言
db_name:当前数据库名
nls_date_format:当前会话客户对应的日期格式
session_user:当前会话客户所对应的数据库用户名
current_schema:当前会话客户对应的默认方案名
host:返回数据库所在主机的名称
示例:select sys_context(‘userenv’,’函数名’)formdual;
dual:虚表,测试用
现象:控制台1在操作数据库时,如果没有提交(commit)动作,那么我们控制2看到的信息就会和控制1看到的结果不一样
数据库把一系列的对数据库的操作看做一个整体,要么全部成功,要么全部失败,这样的现象就是事务现象!事务具有原子性。
基本概念:事务是把对数据库一系列操作dml看作一个整体,要么全成功,要么全失败,利用事务我们可以保证数据的完整性,事务具有原子性。
基本语法:save point 保存点名
1. 在一个事务中可以保存多个保存点。
2. 我们可以使用rollback to 保存点名,回退指定位
3. 一旦回退了,就不能再次回退
4. 一旦提交(commit)了事务,则不能回退到任何保存点
5. 取消全部退到最初:rollback
定义:事务隔离级别用于指定事务的隔离程度
三个概念:脏读/不可重复度/幻读
脏读:当一个事务读取另一个事务尚未提交的修改时,产生脏读
Oracle中,没有脏读的问题。
不可重复读:在同一事务中的同一查询,如果因为别的事务修改或者删除,造成本事务查询的结果不一致。
幻读:在同一事务中的同一查询,如果因为别的事务添加,造成本事务查询结果不一致。
Oracle有三种隔离级别:
1. Read commited:这是oracle默认的,保证不会脏读,但可能出现非重复读和幻像
2. Serializable:可以保证不出现脏读,不可重复读,幻读。
3. Read only:也是三个都不会出现,serializable可以执行dml(update,insert,delete)语句,read only 只能读取。
控制台:
Set transactionisolation level read commited;(默认)
Set transactionisolation level serializable;(手动)
Set transactionread only;
有三种方法:约束,触发器,应用程序(函数,过程)
1. not null(非空):指定某列的值,不可以是null.
2. Unique(唯一):指定某列的值,不能重复,但可以是null,而且可以有多个null。(oracle独有)
3. Primary key(主键):不能重复,不能为null。
4. Foreign key(外键)
5. Check(检查):用于强制行数据,必须满足的条件。
1.外键指向主键列。
2.外键可以指向unique
3.外键列和主键列的数据类型要一致
4.建表时,先建主表,再建从表。删除表时候,要先删除从表在删主表。
5.外键列的值,必须在主键列中存在
6.外键列可以为null
//班级表
Create tableclass (id number primary key,name varchar2(32));
//学生表
Create tablestus(id number primary key,name varchar2(36)not null,classId number referencesclass(id));
例:create tableusers (id number,sal number check(sal>=1000 and sal<=2000));
如果在建表时忘记建约束,可以在建表后使用alter table命令为表增加约束,但增加not null约束,要使用modify,而增加其他四种使用add。
Constraint 约束名+primarykey(字段)
Constraint 约束名+foreign key(字段) references 主表(字段)
Constraint 约束名+unique(字段)
Constraint 约束名+check(字段条件)
Not null(字段)
基本语法:alter table 表名 constraint 约束名 约束种类[check/unique/primary key/foreign](字段);
Altertable 表名 modify 字段名not null;
删除约束:
语法:alter table 表名 drop constraint 约束名
约束名:一个表的每一个约束,都对应一个名称,因为一张表只能有一个主键:因此在删除主键,可以直接使用primary key
如果有外键值,指向该主键的某个值,则不能删除成功,需使用cascode
Altertable 表名 drop constraint primary key cascode
在oracle一张表中,我们希望有列,假设该列是整形,我们希望当添加一条记录的时候,该列值能够自动增长(比如从1开始,每次增长1)
创建一个序列:
Createsequence myseq 创建序列名
Startwith 1 从1开始
Incrementby 1 每次增长1
Minvalue1 最小值1
Maxvalue30000 //nomaxvlaue(不设最大值) 最大值
Cycle //cycle表示当序列增加30000,从新从1开始, 循环
Nocycle 缓存
使用:创建序列后
创建一张表:create table test1(id number primary key,name varchar2(32));
添加:insert into test1 values(myseq.nextval,’abc’);
Myseq.nextval=== 序列名.关键字
查询序列的值:select myseq.currval from dual; 只用添加过后,才能查询
删除序列:drop sequence myseq;
索引的分类:
1. 单列索引:create index 索引名 on 表名(列名);
2. 复合索引:create index 索引名 on 表名(列名1,列名2)