您的位置:首页 > 数据库

数据库学习2-范式

2014-07-08 21:13 204 查看
1. 约束的概念约束:对表中数据的限制性;constraint;2. 约束的作用约束的作用:就是为了保证数据的完整性和一致性列完整性(域完整性)、行完整性(实体完整性)、引用完整性3. 约束的类型:主键约束、非空约束、唯一约束、检查约束、外键约束、default主键约束:保证实体完整性,非空、唯一;关键字:primary key1NF(第一范式):列不可再分  2NF(第二范式):必须要有主键非空约束:NOT NULL;主键约束和唯一约束的区别:只能有一个主键约束,唯一约束可以 有多个,唯一约束可以为null,而主键约束不能为null外键约束:约束从表引用,当主表被从表引用时,主表不能被删除  
CREATE TABLE tab_name
(
column1 NUMBER,
column2 VARCHAR2(10)
)

--范式: 第一范式(1NF) 列不可再分
--      第二范式(2NF) 不存在非关键列对关键列的部分函数依赖
--                    1.必须有主键;2.主键可以作为所有非主键列的唯一性标识

--约束: 对数据的完整性和一致性的要求
--约束类型: 主键约束(行完整或实体完整)、非空约束(列完整或域完整)、唯一约束、检查约束(列完整或域完整)、外键约束(引用完整)

--非空约束: not null
DROP TABLE student2;
CREATE TABLE student2
(
NAME VARCHAR2(10) NOT NULL --非空约束
)

INSERT INTO student2 VALUES('');

--唯一约束: unique ,要求数据不能重复
DROP TABLE student2;
CREATE TABLE student2
(
NAME VARCHAR2(10) NOT NULL, --非空约束
idcode VARCHAR2(20) UNIQUE  --唯一约束 格式:constraint 约束名 unique
)
INSERT INTO student2 VALUES('张三','200000');
SELECT * FROM student2;

--检查约束: check, 通过表达式完成对数据要求的描述
DROP TABLE student2;
CREATE TABLE student2
(
NAME VARCHAR2(10) NOT NULL, --非空约束
idcode VARCHAR2(20) UNIQUE,  --唯一约束 格式:constraint 约束名 unique
age NUMBER CHECK(age>=0 AND age<50), --检查约束 格式:constraint 约束名 check(表达式)
sex VARCHAR2(2) CONSTRAINT ck_sex CHECK(sex='男' OR sex='女')
)
INSERT INTO student2 VALUES('张三','200000',49,'公');

--主键约束: primary key, 作为数据的唯一性标识,保证数据的行完整性(实体完整性)
DROP TABLE student2;
CREATE TABLE student2
(
stu_no NUMBER,
idcode VARCHAR2(10),
NAME VARCHAR2(10) NOT NULL,
score NUMBER,
PRIMARY KEY(stu_no,idcode)
)
--主键约束和唯一约束的区别:
--    1. 主键约束要求数据唯一并且非空
--    2. 主键约束只能有一个,唯一约束可以有多个
DROP TABLE student2;
CREATE TABLE student2
(
s_id NUMBER PRIMARY KEY,   --主键约束,建议用一个数值型的没有意义的字段作为主键
NAME VARCHAR2(10) NOT NULL,
idcode VARCHAR2(20) UNIQUE,  --唯一约束 格式:constraint 约束名 unique
age NUMBER CHECK(age>=0 AND age<50), --检查约束 格式:constraint 约束名 check(表达式)
sex VARCHAR2(2) CONSTRAINT ck_sex CHECK(sex='男' OR sex='女')
)

--外键约束: foreign key , 被引用的表(clazz班级表)必须有主键约束或唯一约束
CREATE TABLE clazz  --班级表
(
c_id NUMBER PRIMARY KEY,
c_name VARCHAR2(20) NOT NULL
)
DROP TABLE student2;
CREATE TABLE student2
(
s_id NUMBER PRIMARY KEY,   --主键约束,建议用一个数值型的没有意义的字段作为主键
NAME VARCHAR2(10) NOT NULL,
idcode VARCHAR2(20) UNIQUE,  --唯一约束 格式:constraint 约束名 unique
age NUMBER CHECK(age>=0 AND age<50), --检查约束 格式:constraint 约束名 check(表达式)
sex VARCHAR2(2) CONSTRAINT ck_sex CHECK(sex='男' OR sex='女'),
c   NUMBER REFERENCES clazz(c_id) --外键约束 格式:foreign key 约束名 refernces 被引用表名(字段名)
)

INSERT INTO clazz VALUES(1,'1229班');
INSERT INTO clazz VALUES(2,'1110班');
INSERT INTO clazz VALUES(3,'1109班');
SELECT * FROM clazz;

INSERT INTO student2 VALUES(10,'张三','20000001',20,'男',3);
INSERT INTO student2 VALUES(12,'梁宽','20000002',19,'男',1);
INSERT INTO student2 VALUES(13,'李四','20000003',20,'女',2);
INSERT INTO student2 VALUES(15,'姚振','20000006',20,'男',2);
SELECT * FROM student2;

--alter table 维护约束
--建表后添加约束(格式):alter table 表名 add constraint 约束名 primary key(字段名)
ALTER TABLE student ADD CONSTRAINT pk_student PRIMARY KEY(idcode);
ALTER TABLE student ADD CONSTRAINT uniq_name UNIQUE(NAME);
ALTER TABLE student ADD CONSTRAINT ck_age CHECK(age>0 AND age<50);
--ALTER TABLE student ADD c NUMBER;
ALTER TABLE student ADD CONSTRAINT fk_student_clazz FOREIGN KEY(c) REFERENCES clazz;

--建表后添加非空约束(格式):alter table 表名 modify 字段名 not null;
ALTER TABLE student MODIFY sex NOT NULL;

--设置约束有效和失效
ALTER TABLE student DISABLE CONSTRAINT uniq_name;  -- 设置失效
ALTER TABLE student MODIFY CONSTRAINT uniq_name DISABLE;
ALTER TABLE student ENABLE CONSTRAINT uniq_name;   -- 设置生效
ALTER TABLE student MODIFY CONSTRAINT uniq_name ENABLE;

--删除约束
ALTER TABLE student DROP CONSTRAINT uniq_name;

--查看约束
SELECT * FROM all_constraints;
--练习:创建两个表:订单表 客户表 ,并且建立对应的约束 订单:订单编号;主键约束订单类型;订单所属客户 外键约束<span style="white-space:pre">	</span>客户:客户编号;主键约束客户姓名;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: