003 約束和關係
阿新 • • 發佈:2020-09-06
/* 時間: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