oracle第4讲

发布 2023-04-19 14:09:28 阅读 8006

第四讲笔记:

维护数据完整性。

有三种方法:约束,触发器,应用程序(函数,过程)

1 约束。1) not null(非空)

举例:create table user1(id number, name varchar2(32) not null);

sql> insert into user1 values(1,null);

insert into user1 values(1,null)

ora-01400: 无法将 null 插入 ("scott"."user1"."name")

2) unique(唯一性)

该列值是不能重复的。但是可以为null

create table user2(id number, name varchar2(32) unique);

sql> insert into user2 values(3,'abc');

insert into user2 values(3,'abc')

ora-00001: 违反唯一约束条件 (

注意:unique字段可以为空,而且可以是多行为空。

3) primary key(主键)

用于唯一的标示表行的数据,当定义主键约束后,该列不但不能重复而且不能为null。

案例:create table user3(id number primary key, name varchar2(32));

sql> insert into user3 values(1, 'abc');

insert into user3 values(1, 'abc')

ora-00001: 违反唯一约束条件 (

sql> insert into user3 values(null, 'abc');

insert into user3 values(null, 'abc')

ora-01400: 无法将 null 插入 ("scott"."user3"."id")

primary key和unique的区别:

1. 一个表可以有多个unique,但是只能有一个primary key

2. 每张表都应该有一个主键。

3. unique列的值可以null,但是主键不可以为null

4. primary key所在的列,会自动创建索引,但unique不会自动创建索引。

4) foreign key(外键)

举例:/班级表。

create table class(classid number primary key, classname varchar2(32));

/学生表。create table student(id number primary key, name varchar2(32), classid number references class(classid));

外键的细节说明:

1.外键指向主键。

2.外键也可以指向unique列。

3.外键列和主键列的数据类型要一致。

4.建表时候,先建主表,再建从表,删除表,先删从表,再删主表。

5.外键列的值,必须要在主键列中。

6.外键列可以为空。

5) check(检查)

create table user4(id number primary key, sal number check(sal>=1000 and sal<=2000), sex char(2) check(sex in(‘男’,’女’))

sql> insert into user4 values(1,200);

insert into user4 values(1,200)

ora-02290: 违反检查约束条件 (

现有一个商店的数据库,记录客户及其购物情况,由下面三个表组成:

商品goods(商品号goodsid,商品名goodsname,单价unitprice,商品类别category,**商provider);

客户customer(客户号customerid,姓名name,住址address,电邮email,性别sex,身份证cardid);

购买purchase(客户号customerid,商品号goodsid,购买数量nums);

请用sql语言完成下列功能:

1 建表,在定义中要求声明:

1)每个表的主外键;

2)客户的姓名不能为空值;

3)单价必须大于0,购买数量必须在1到30之间;

4)电邮不能够重复;

5)客户的性别必须是男或者女,默认是男。

create table goods(

goodsid number primary key,goodsname varchar2(20),unitprice number check(unitprice>0),category varchar2(64),provider varchar2(32)

create table customer(

customerid number primary key,name varchar2(32) not null,address varchar2(64),email varchar2(64) unique,sex char(2) default ‘男’ check(sex in (‘男’,’女’))cardid varchar2(20)

create table purchase(

customerid number references customer(customerid),goodsid number references goods(goodsid),nums number check(nums>=1 and nums<=30)

如果在建表的时候忘记建立必要的约束,则可以在建表后补救,用到alter table 命令增加约束。

商店售货系统表设计案例(2)

如果在建表时忘记建立必要的约束,则可以在建表后使用。

alter table命令为表增加约束。但是要注意: 增加not null约束时,需要使用modify选项,而增加其它四种约束使用add选项。

1)每个表的主外码;

2)客户的姓名不能为空值;--增加商品名也不能为空。

3)单价必须大于0,购买数量必须在1到30之间;

4)电邮不能够重复;--增加身份证也不重复。

5)客户的性别必须是男或者女,默认是男。

6)增加客户的住址只能是‘海淀’、‘朝阳’、‘东城’、

西城’、‘通州’、‘崇文’

如果一张表建好以后,需要对约束进行修改,我们可以使用alter table命令。

-增加商品名也不能为空。

alter table goods modify goodsname not null;

增加身份证也不重复。

alter table customer add constraint uni_id unique(cardid);

增加客户的住址只能是‘海淀’、‘朝阳’、‘东城’、

西城’、‘通州’、‘崇文’

alter table customer add constraint check_add check(address in(‘海淀’,’朝阳’))

基本语法说明:

alter table 表名 add constraint 约束名约束种类[check/unique/primary key/foreign key](字段)

alter table 表名 modify 字段名 not null

删除约束。基本语法。

alter table 表名drop constraint 约束名。

约束名:一个表的每个约束,都对应一个名称。

特别说明:因为一张表只有一个主键,因此在删除主键约束的时候,则可以直接使用primary key

alter table 表名 drop primary key

如果有外键值指向该主键的某一个值,则不能删除成功,需要使用cascade

alter table 表名 drop primary key cascade

列级定义和表级定义。

在定义表的时候,直接在列后定义约束,我们称为列级定义。

比如。create table user8(id number primary key, name varchar2(32));

表级定义 ,把各个列定义完以后,再分别说明约束,比如。

create table user9(id number,name varchar2(32),constraint pk_id primary key(id));

一般情况下,我们使用列级定义就可以了,但是如果我们遇到定义复合主键(两列一起作为主键),需要表级定义。

create table user10(

iduser number,idgoods number,nums number,constraint pk_user_goods primary key(iduser,idgoods));

序列。需求:在oracle的一张表中,我们希望有列,假设该列是整形,我们希望当我们添加一条记录的时候,该列值能够自动的增长(比如从1开始增长,每次增长1)

sql server

create table temp1(

id int primary key identity(1,1),name varchar(36));

mysql:

create table temp1(

id int primary key auto_increment,name varchar(32));

oracle的解决方式:

oracle是利用序列(sequence)来完成的。

快速入门案例。

创建一个序列。

create sequence myseq

start with 1

increment by 1 //表示一次增长的步长。

minvalue 1

maxvalue 20000

cycle //cyclue表示序列增加到20000从新从1开始。

nocache --cache 100 表示一次产生10个号供你使用,优点是效率高,缺点是可能产生跳号。

使用:创建一张表。

create table test1(id number primary key, name varchar2(32));

insert into test_2 values('abc');

oracle第3讲笔记 2

j a如何连接和操作oracle数据库。原理图。实现 我们在eclipse中,编写一个j a程序,完成对emp表的crud操作。j a连接oracle有两种方式。直连。jdbc原理。做jdbc开发有两个前提。1.import 有时 2.把导入到你的j a项目里。特别说明 如果使用jdbc直连,需要启...

实验第4讲

实验四matlab数值计算。一 实验目的。1.掌握线性方程组的求解方法。2.掌握数值插值与曲线拟合的方法及应用3.掌握求数值导数和数值积分的方法4.掌握非线性方程组的求解方法。二 实验内容。1.求解线性方程组2.线性插值与曲线拟合3.求数值导数和数值积分4.非线性方程组的数值解。三 实验过程。1.求...

第4讲概述

关于两个管理层次在工程建设各个阶段的咨询业务,表1 2进行了对比 项目管理层次阶段性工作和工程咨询业务关系表。2007年真题 项目执行管理层次委托的融资咨询是项目周期中 的工作。实施阶段 b 完工阶段 c 准备阶段 d 策划阶段。答案 c2007年真题 在项目实施阶段为项目决策管理层次提供的工程咨询...