现在的位置: 首页 > 综合 > 正文

SQL2009.4.16

2013年09月01日 ⁄ 综合 ⁄ 共 3160字 ⁄ 字号 评论关闭

//author 满晨晨
//time 2009 4 16上午

数据库:
完整性
数据完整性 :
实体完整性 即行完整性
每一行有一个唯一标示 (主键),可以唯一确定一行
域完整性 即列完整性
域 :由一个属性可能的取值构成的集合
域完整性保证属性只能是有效数据
数据类型,范围是否一致 非空
参考完整性 即引用完整性
主表与从表的一致性 及外键与主键的对应关系
参考完整性规定了外键的域完整性

引用规则
从表不能引用不存在的键值
主表键值改变 从表对应的所有外键也要一致修改
主表中没有关联记录,则不能将数据填入从表
如果删除主表 必须先删除相关的从表关系

约束
constraint
定义列时 声明主键约束
create table customers1(
cust_id varchar2(10) constraint pk_customers primary key,
cust_name varchar2(50) not null,
cust_address varchar2(20),
cust_city varchar2(50),
cust_state varchar2(5),
cust_zip varchar2(10),
cust_country varchar2(50),
cust_contact varchar2(50),
cust_email varchar2(150)

)
create table products
(
prod_id varchar2(10) not null,
vend_id varchar2(10) not null constraint fk_product1_vendors1 references(参照) vendors1(vend_id)设置外键第一种方式
prod_name varchar2(255) not null,
prod_price number(8,2) default 0.0 设置默认值
prod_desc varchar2(1000),
constraint pk_products1 primary key(prod_id)添加主键的第二种方式

)

create table orders1(
order_num number not null,
order_date date not null default sysdate,
cust_id varchar2(10) not null,
constraint fk_order1_customers1 foreign key (cust_id) references customers1(cust_id)设置外键的第二种方式
)

添加主键的第三种方式
alter table order1 add constraint pk_orders1 primary key(order_num);

create table orderitems1(
order_num number not null,
order_item number not null,
prod_id varchars(10) not null,
quantity number not null,
item_price number(8,2)not null

)
主键,外键列为组合列,只能用下面的
alter table orderitems1 add constraint pk_orderitems1 primary key(order_num,order_item)
alter table orderitems1 add constraint fk_orderitems1_orders1  foreign key(order_num) references orders1(order_num)
alter table orderitems1 add constraint fk_orderitems1_products  foreign key(prod_id) references prducts(prod_id)

验证数据的完整性
行的完整性
create table t_user(
user_id varchar2(10) primary key,没有用contraint系统自动给主键命名
user_name varchar2(30) not null,
user_desc varchar2(100),
user_age number(3),
birthday date,
priv_id number(3) not null

 

)
删除主键
alter table t_user drop constraint sys_c003035 刚才自动分配的主键名字 得查  比较麻烦 所以主键最好自己命名
atler table t_user add constraint pk_user primary key(user_id)
权限表
creat table t_priv(
priv_id number(3) constraint pk_priv primary key,
priv_name varchar2(30) not null,
priv_desc varchar2(100)

)
建立外键
alter table t_user add constraint fk_user_priv foreign key(priv_id) references t_priv(priv_id)

begin
insert into table() values()
commit
end;
违反主键约束(唯一性约束+非空约束),行的完整性
insert into t_user(user_id,user_name,priv_id)values('001,'qsdsfd','2')
列的完整性
insert into t_user
(user_id,user_name,priv_id)
values('002','wed,'23')保证列的数据类型或者条件符合

列的完整性 检查数据类型和字段类型是否相同 同则查换算成字节后的长度是否在要插入的字段的范围
参照完整性是类的完整性的子集体现
数据库使用约束来保障数据完整性

主键只需要写自己
外键需要写自己 还要写和谁进行关联

 

check
not null
unique
primary key
foreign key

主键约束
建立3种
删除 alter table drop
禁用disable
alter table t_user disable constraint pk_user

启用 alter table t_user enable constraint pk_user

 

外键约束
建立三种
删除
禁用
启用
alter table t_user add constraint pk_user primary key(user_id)
                   drop  constraint pk_user
                   enable constraint pk_user
                   disable constraint pk_user
oracle不能删除子表中正在使用着的父亲表中的数据(参照完整性)

父表中数据删除则子表中引用着的行相应删除
父表中数据删除则子表中引用着的行的相应列设为null

alter table t_user drop constraint fk_user_priv
altertable t_user add constraint fk_user_priv frogein key(priv_id)
references t_pric(priv_id )   on delete set null          
roolback
总结
约束 5个
主键 create drop enable disable 三种建立方式
外键 create drop enable disable 三种建立方式
null(not null)
主表:删除主表某些时 从表有三种行为方式 
从表:三种行为 on delete
              cascade
                set null
数据完整性 : 行 列 参照完整性

作业 参照oracle
hr库 写出所有sql语句

 

抱歉!评论已关闭.