/* 时间:2020/09/06 功能: 一 约束 1 概念 2 操作 二 关系 1 概念 2 操作 */
一 约束
1 概念
/* 约束 1 定义: 对一个表中属性进行限制。 2 具体 (1) 主键约束: 不允许重复元素,避免数据 (2) 外键约束: 保证本表数据与其他表数据存在关联。 (3) check约束: 保证事物check列属性取值在合理范围 (4) default约束: 保证事物default列属性有默认值,一定有一个值。 (5) unique约束: 保证事物属性不允许重复 (a) SqlServer 只允许unique列一个为null (b) Oracle 允许unique列多个为null (6) not null: 该列不能为空。 3 对比: (1) null和default (a) 相同: 允许用户不赋值 (b) 不同: null默认是null, default默认是指定值。 表和约束: 1 数据库通过表解决事物的数据,存储和复杂操作问题(增删改查) 2 数据库通过表解决事物的属性,有效性和合理性问题 (1) 表内: 表内列属性通过约束,来表示事物局部数据有效性和合理性。 (2) 表外: 表与表之间通过约束,来表示事物整体数据关联性和完整性。 */
2 操作
create table Student ( stu_id int primary key, stu_sal int check (stu_sal >= 1000 and stu_sal <= 8000), stu_sex nchar(1) default('男'), stu_name nvarchar(200) unique ) INSERT INTO Student values(4, 6000, '男', null) INSERT INTO Student values(5, 6000, '男', 1) INSERT INTO Student values(null, 8000, '女', 9) -- 不能将值 NULL 插入列 'stu_id' INSERT INTO Student values(4, 6000, '男', 100) -- 违反了 PRIMARY KEY 约束 INSERT INTO Student values(6, 12000, '男', 2) -- 与 CHECK 约束"CK__Student__stu_sal__0EA330E9"冲突 INSERT INTO Student values(7, 6000, '男', 1) -- 违反了 UNIQUE KEY 约束 INSERT INTO Student values(8, 8000, '男', 2) -- 执行成功 insert into student(stu_id, stu_sal, stu_name) values (1, 1000, '榨汁机'); SELECT * FROM Student
二 关系
1 概念
/* 关系: 1 定义: 表和表之间的联系 2 实现: 设置外键 3 分类: (1) 一对一: 既可以把表A主键充当表B的外键,也可以把表B的主键充当表A的外键。 (2) 一对多: 把表A主键充当表B的外键。 (3) 多对多: 通过单独的一张表来表示。 */
2 操作
-- 班级表 use TestData create table banji ( banji_id int primary key, banji_num int not null, banji_name nvarchar(100) ) -- 教师 create table jiaoshi ( jiaoshi_id int primary key, jiaoshi_name nvarchar(200) ) -- 第三张表 : 模拟班级和教师关系 create table banji_jiaoshi_mapping ( banji_id int constraint fk_banji_id foreign key references banji(banji_id), jiaoshi_id int foreign key references jiaoshi(jiaoshi_id), kecheng nvarchar(20), constraint pk_banji_id_jiaoshi_id primary key(banji_id, jiaoshi_id, kecheng) )
select * from banji select * from jiaoshi select * from banji_jiaoshi_mapping