分享

oracle数据库表的操作(约束和事务)

 小小_518 2017-12-01


(一)约束:oracle提供的自动保持数据库完整性的一种方法,他通过限制字段中数据,记录             中数据和表之间的数据来保证数据的完整性

(二)完整性约束语法格式:
      constraint constraint_name constraint_style
      说明:约束不指定名称时,系统会给定一个名称

(三)oracle中约束的分类:
     (1)主键约束:定义表的主键,它是唯一确定表中每一条记录的标识符
               特点:(1)唯一性,不能为null,不能重复,(以此来保证实体的完整性)
                     (2)主键只能有一个,但可以由多个列构成
                              如:primary 可以(学号,科目编号)

例1:修改表结构,为表添加主键约束
创建学生信息表
create table student(
sid number(8,0),
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50)
);

--修改表结构,为学生信息表添加主键约束
  alter table student
  add constraint sid_pk primary key(sid);

例2:创建表时添加主键约束
--创建表时添加主键约束
(1)create table student(
sid number(8,0) primary key,
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50)
      );

(2)create table student(
sid number(8,0),
name varchar2(20),
sex char(2),
birthday date,
address varchar2(50),
        constraint sid_pk primary key(sid)
);
--------------------------------------------------------------------------------
 Oracle的表操作--非空约束

(一)非空约束:确保列不能为空,当插入入数据时,必须为该列提供数据,更新数据市不能将其值设置为null
        注:非空约束是列级约束
        (1)列级约束语法格式:column constraint contraint_name constaint_type
             说明:列级约束必须跟在列的定义后面

        (2)表级约束语法格式:column,...
                               constraint constraint_name constrain_type
             说明:表级约束不与列一起,单独定义

非空约束训练
例1:修改表结构,添加非空约束

--创建学生信息表
     (1)create table student(
  sid number(8,0) primary key,
  name varchar2(20),
  sex char(2),
  birthday date,
  address varchar2(50)
          );

(2)ALTER TABLE student modify (name varchar2(20) NOT NULL);
------------------------------------------------------------------------
例2:创建表时添加非空约束
     表级约束:
     语法:constraint contraint_name constraint_type(colum_name)

create table student(
sid number(8,0),
name varchar2(20) not null,
sex char(2) constraint nn_sex not null,
birthday date,
address varchar2(50),
constraint sid_pk primary key(sid)  
  );
------------------------------------------------------------------------
例3:删除非空约束的方式
     思路:将非空属性置空: alter......modify......null
     语法:ALTER TABLE student modify 列名 数据类型 NULL(置空);
   
           ALTER TABLE student modify sex char(2) NULL;
--------------------------------------------------------------------------
--禁用主键约束(无效化约束)
     语法:alter......disable constraint constraint_name
           ALTER TABLE student disable CONSTRAINT sid_pk(约束名);

--激活主键约束
     语法:alter......enable constraint constraint_name
           ALTER TABLE student enable CONSTRAINT sid_pk(约束名);

--删除主键约束(彻底删除)
      语法:alter......drop constraint constraint_name
           方法1:ALTER TABLE student DROP CONSTRAINT sid_pk(约束名);
           方法2:ALTER TABLE student DROP PRIMARY KEY;
                 (主键约束只有一个,所以也可如此操作)

---------------------------------------------------------------------------------
oracle的表操作--唯一约束

(一)唯一性约束:指定一个或多个列的组合值具有唯一性,防止在列中输入重复的值
(二)唯一性特点:
      (1)唯一性约束的列允许为空
      (2)一个表允许有多个唯一性约束
      (3)可以把唯一性约束定义在多个列上,
          (如果是定义在多个列上,必须定义为表级约束)

例1:创建表时添加唯一性约束
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    email varchar2(50) unique,
--    cardid varchar2(18),
--    constraint uk_cardid unique(cardid)
--);
-----------------------------------------------------------------------
例2:修改表时添加唯一性约束
--创建学生信息表
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    email varchar2(50) unique,
--    cardid varchar2(18)    
--);

--更改表结构,添加唯一性约束
--alter table student add constraint uk_student_cardid unique(cardid);
--------------------------------------------------------------------------

--禁用约束
alter table student disable constraint uk_student_cardid;

--彻底删除
alter table student drop constraint uk_student_cardid;

-------------------------------------------------------------------------
Oracle的表操作--检查约束

检查约束对输入列或者整个表中的值设置检查条件,以限制输入值,保证数据库数据的完整性

--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50)    
--);

例1:修改表添加检查约束的方式
   --alter table student add constraint ck_sex check(sex='男' or sex='女');

---------------------------------------------------------------------------
例2:创建表时设置检查约束的方式:(列级约束)
-- create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2) check(sex='男' or sex='女'),
--    birthday date,
--    address varchar2(50)    
--);

----------------------------------------------------------------------------
例3:创建表时设置检查约束的方式:(表级约束)
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    constraint ck_sex check(sex='男' or sex='女')    
--);

----------------------------------------------------------------------------
--禁用约束
--alter table student disable constraint ck_sex;

--彻底删除
alter table student drop constraint ck_sex;


-----------------------------------------------------------------------------
 数据库表的操作--外键约束

(一)外键约束(foreign key):用来建立和加强两个表数据之间的链接的一列或多列,外键约束是唯一涉及两个表关系的约束
(二)语法格式:
               
(三)实例
--主表
--create table department(
--    depid varchar2(10) primary key,
--    depname varchar2(30)
--);

--从表
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    depid varchar2(10)    
--);

--修改表时添加约束(外键约束)
--alter table student add constraint fk_depid foreign key(depid) references department(depid) on delete cascade;

---------------------------------------------------------------------------------
--创建列级约束
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    depid varchar2(10) references department(depid) 
--);

---------------------------------------------------------------------------
--创建表级约束
--create table student (
--    sid number(8,0),
--    name varchar2(20),
--    sex char(2),
--    birthday date,
--    address varchar2(50),
--    depid varchar2(10),
--    constraint fk_depid foreign key(depid) references department(depid) on delete cascade
--);

----------------------------------------------------------------------------------
--禁用约束
--alter table student disable constraint fk_depid;

--彻底删除
alter table student drop constraint fk_depid;

--------------------------------------------------------------------------------
Oracle的表操作--事务

(一)事务:对数据库的若干操作组成的一个单元,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求

(二)事务的组成:
                 一条或多条DML(需要使用commit提交事务或使用rollback回滚事务)
                 一条DDL(自动提交事务)
                 一条DCL(自动提交事务)
当使用事务操作(DML语句)时,oracle会在被作用表上加表锁,防止其他用户改变表结构,同时会在被作用行上加上行锁,以防止其他事务在相应行上执行DML操作


(三)为什么要使用事务?(保证数据的安全有效)

(四)事务的控制命令
   (1)提交事务(commit)
   (2)通过commit语句可以提交事务,当执行了commit语句后,会确认事务的变化,结束事务,删除保存点,释放锁
   (3)当使用commit语句结束事务之后,其他会话将可以查看到事务变化后的新数据

   (4)回滚事务(rollback)savepoint
   (5)rollback只能对为提交的数据撤销,已经commit的数据是无法撤销的,因为commit之后已经持久化到数据库中

   (6)保存点(savepoint)是事务中的一点,用于取消部分事务
   (7)当结束事务时,会自动的删除该事务所定义的所有保存点
   (8)当执行rollback时,通过指定保存点可以回退到指定的点

    设置保存点:savepoint a;
    回滚部分事务:rollback to a;
    回滚全部事务:rollback;

--update emp_bak set sal=6000 where empno=7369;

--演示事务的三个语句(commit,savepoint,rollback)的作用

--delete from emp_bak where empno=7369;
--commit;

update emp_bak set sal=5555 where empno=7499;
savepoint a;
update emp_bak set sal=6666 where empno=7499;
savepoint b;

select * from emp_bak;
rollback to a;
rollback;

--------------------------------------------------------------------------------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多