開始學習資料庫了,學的有點混亂,做個筆記來梳理一下
創建表
create table student
(Sno char(9) primary key,
Sname varchar(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20),
);
1.主碼約束: primary key
primary?key?,顧名思義,即主鍵,也稱主碼,在表中一行稱一個元組,如果存在某個屬性或幾個屬性,其值能唯一標識表中的某一行,這樣的一個屬性或多個屬性就能作為表的primary?key,
2.唯一性約束: unique
UNIQUE約束和PRIMARY?KEY約束的區別:
UNIQUE和PRIMARY?KEY約束均為列或列集合提供了唯一性的保證;????????
PRIMARY?KEY約束擁有自動定義的UNIQUE約束;????
每個表中可以有多個UNIQUE約束,但是只有有一個PRIMARY?KEY約束,
3.非空值約束: not null
Not?null?,即不為空,Not?null?約束強制欄位始終包含值,這意味著,如果不向欄位添加值,就無法插入新記錄或者更新記錄,
4.參照完整性約束: foreign key
外鍵約束是用來加強兩個表(主表和從表)的一列或多列資料之間的連接的,創建外鍵約束的順序是先定義主表的主鍵,然后定義從表的外鍵,也就是說只有主表的主鍵才能被從表用來作為外鍵使用,被約束的從表中的列可以不是主鍵,主表限制了從表更新和插入的操作
5.CHECK?約束
CHECK?約束用于限制列中的值的范圍,?如果對單個列定義?CHECK?約束,那么該列只允許特定的值,?如果對一個表定義?CHECK?約束,那么此約束會在特定的列中對值進行限制,?Check?約束通過邏輯運算式來判斷資料的有效性,用來限制輸入一列或多列的值的范圍,在列中更新資料時,所要輸入的內容必須滿足?Check?約束的條件,否則將無法正確輸入,
?6.DEFAULT?約束
?DEFAULT約束用于向列中插入默認值,如果沒有規定其他的值,那么會將默認值添加到所有的新記錄
增加新列和完整性約束條件
//向Student表增加“入學時間”列,其資料型別為日期型
alter table Student add S_entrance date;//新加列為空值
//將年齡的資料型別由字符型(假設原來的資料型別是字符型)改為整數,
alter table Student Alter column Sage int;
//增加課程名稱必須取唯一值的約束條件,
alter table Course add unique(Cname);
洗掉表
restrict:有限制洗掉
1.欲洗掉的基本表不能被其他表的約束所參考
2.如果存在依賴該表的物件,則此表不能被洗掉
cascade:無限制洗掉
相關物件一起洗掉
//無限制洗掉表student
drop table Student cascade;
drop table Student restrict;
建立索引
//Student表按學號升序建唯一索引
create unique index Studentsy on Student(Sno)
//Course表按課程號姜序建唯一索引
create unique index Coursesy on Course(Cno desc)
//SC表按學號升序和課程號降序建唯一索引
create unique index SCnosy on SC(Sno asc ,Cno desc)
1.unique表明此索引每一個索引值只對應唯一的資料記錄,當屬性列中含有重復值時,不能建立unique索引
2.cluster表示建立聚簇索引
3.升序 asc 降序 desc 不設值默認為升序
聚簇索引
1.聚簇索引的順序,就是資料在硬碟上的物理順序,一般情況下主鍵就是默認的聚簇索引
一張表只允許存在一個聚簇索引,因為真實資料的物理順序只能有一種,如果一張表上還沒有聚簇索引,為它新創建聚簇索引時,就需要對已有資料重新進行排序,所以對表進行修改速度較慢是聚簇索引的缺點,對于經常更新的列不宜建立聚簇索引,
聚簇索引性能最好,因為一旦具有第一個索引值的記錄被找到,具有連續索引值的記錄也一定物理地緊跟其后,一張表只能有一個聚簇索引,所以非常珍貴,必須慎重設定,一般要根據這個表最常用的SQL查詢方式選擇某個(或多個)欄位作為聚簇索引(或復合聚簇索引),
聚簇索引默認是主鍵,如果表中沒有定義主鍵,InnoDB[1]會選擇一個唯一的非空索引代替(“唯一的非空索引”是指列不能出現null值的唯一索引,跟主鍵性質一樣),如果沒有這樣的索引,InnoDB會隱式地定義一個主鍵來作為聚簇索引,
2.聚簇索引 與 唯一索引
嚴格來說,聚簇索引不一定是唯一索引,聚簇索引的索引值并不要求是唯一的,唯一聚簇索引才是!在一個有聚簇索引的列上是可以插入兩個或多個相同值的,這些相同值在硬碟上的物理排序與聚簇索引的排序相同,僅此而已
3.創建、洗掉、改名聚簇索引
//在student表的Sname列上建立一個聚簇索引,而且student標紅的記錄表將按照Sname值的升序存放
create cluster index stusname on Student(Sname);
//將SC表的SCno索引名改成SCSno
alter index SCno rename to SCSno;
//洗掉student表中stusname索引
drop index Student.Stusname
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/279877.html
標籤:其他
下一篇:MySQL 子查詢 嵌套查詢
