Oracle(三)jdbc,系统函数,事物,约束,sequence,index

Java连接oracle

       Java直连核心代码:class.froName(“oracle.jdbc.driver.OracleDriver”);

       Connectionct = DriverManager.getConnection(“jdbc:oracle:thin:@127.0.0.1:1521:数据库名”,“scott“,”tiger”);

 

Sql函数的使用——系统函数

       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));

 

Check

       例: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

 

序列 sequence

       在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)

你可能感兴趣的:(初学oracle)