MySQL學習筆記(二) 白銀

約束:CONSTRAINTS

數據完整性Data Integrity)是指數據的精確性Accuracy)和可靠性Reliability)。它是應防止數據庫中存在不符合語義規定的數據和防止因錯誤信息的輸入輸出形成無效操做或錯誤信息而提出的。數據的完整性要從如下四個方面考慮:sql

  1. 實體完整性(Entity Integrity):例如,同一個表中,不能存在兩條徹底相同沒法區分的記錄
  2. 域完整性(Domain Integrity):例如:年齡範圍0-120,性別範圍「男/女」
  3. 引用完整性(Referential Integrity):例如:員工所在部門,在部門表中要能找到這個部門
  4. 用戶自定義完整性(User-defined Integrity):例如:用戶名惟1、密碼不能爲空等,本部門經理的工資不得高於本部門職工的平均工資的5倍。

根據約束的特色,分爲幾種:數據庫

  • 鍵約束:主鍵約束、外鍵約束、惟一鍵約束
  • Not NULL約束:非空約束
  • Check約束:檢查約束
  • Default約束:缺省約束

主鍵約束PRIMARY KEY

主鍵:Primary key,簡稱PK,數據庫主鍵做用保證明體的完整性,能夠是一個列或多列的組合。spa

  • 主鍵約束至關於惟一約束+非空約束的組合,主鍵約束列不容許重複,也不容許出現空值,若是是多列組合的主鍵約束,那麼這些列都不容許爲空值,而且組合的值不容許重複。
  • 每一個表有且最多隻容許一個主鍵約束
  • MySQL的主鍵名老是PRIMARY,就算本身命名了主鍵約束名也沒用。

當建立主鍵約束時,MySQL默認在對應的列上創建主鍵索引。刪除主鍵時,也會直接刪除主鍵索引。設計

//直接添加主鍵
CREATE TABLE t_stu(
	sid INT PRIMARY KEY,
	sname VARCHAR(100),
	gender CHAR
);

//單獨聲明主鍵
CREATE TABLE t_course(
	cid INT ,
	cname VARCHAR(100),
	decription VARCHAR(200),
	PRIMARY KEY(cid)
);

//建表後添加主鍵
ALTER TABLE t_stu ADD PRIMARY KEY(sid);


//刪除主鍵
alter table表名稱 drop primary key;

惟一鍵Unique key,簡稱UK

  • 同一個表能夠有多個惟一約束。
  • 惟一約束能夠是某一個列的值惟一,也能夠多個列組合值的惟一。
  • MySQL會給惟一約束的列上默認建立一個惟一索引
  • 刪除惟一鍵只能經過刪除惟一索引的方式刪除,刪除時須要指定惟一索引名,惟一索引名就是惟一約束名同樣。
--在某一列後面直接添加惟一性約束
CREATE TABLE t_course(
	cid INT PRIMARY KEY,
	cname VARCHAR(100) UNIQUE,
	description VARCHAR(200)
);
--單獨指定表的惟一性約束
CREATE TABLE t_stu(
	sid INT PRIMARY KEY,
	sname VARCHAR(100),
	card_id CHAR(18),
	CONSTRAINT uk_card_id UNIQUE KEY(card_id)
);
--在建表後修改表結構:
alter table 【數據庫名.】表名稱 add unique key(字段名);
alter table 【數據庫名.】表名稱 add unique key(字段列表);  #複合惟一

--刪除惟一鍵
alter table 【數據庫名.】表名稱 drop index 索引名;
alter table emp drop index cardid;

若是不知道索引名,能夠經過以下的語句查詢:
show index from 表名稱;code

惟一鍵和主鍵的區別:
(1)主鍵不能爲空,惟一鍵能夠爲空
(2)主鍵約束,一個表只能有一個,而惟一鍵能夠有不少個索引

外鍵:Foreign key,簡稱FK

外鍵約束不是必須的,並且如今不少大的公司,數據量比較大時,不建議在數據庫層面設計外鍵,
由於他以爲這樣效率低,把這個數據的約束挪到代碼層面去判斷。ip

特色:
(1)約束的是兩張表的關係
    須要兩張表,或者一張表虛擬成兩張表
(2)兩張表分爲主表(父表)和從表(子表)
    外鍵的創建/指定是在子表上創建。    
(3)被參考的表稱爲主表,主表的被參考列必須是主鍵或惟一鍵    
(4)一個表能夠有多個外鍵ci

  • 添加/修改從表記錄時,引用主表的列的值必須是存在的。
  • 默認狀況下,若是主表的被參考列的值被引用,那麼就不能輕易的被刪除和修改。
--先建主表,再建從表
create table emp(
字段1 數據類型  primary key,
字段2 數據類型 【unique key】【not null】【default 默認值】,
foreign key(從表的外鍵列) references 主表名(主表被參考的列名)
);



--建表後指定外鍵
alter table 從表名稱 add foreign key(從表的字段) references 主表名(主表被參考的列名);

非空和默認值約束

  • NOT NULL 非空約束,規定某個字段不能爲空
  • default:默認值,在插入數據時某列若是沒指定其餘的值,那麼會將默認值添加到新記錄。rem

--建表
create table 【數據庫名.】表名稱(
	字段1 數據類型 primary key,
	字段2 數據類型 【unique key】【not null】【default 默認值】,
	字段2 數據類型 【unique key】【not null】【default 默認值】,
	...
);
--實例
create table emp(
	eid int primary key,  #員工編號
	ename varchar(20) not null,   #姓名
	cardid varchar(18)  unique key not null ,		#身份證號
	tel varchar(11) unique key not null,
	gender char not null default '男'
);

--修改
alter table 表名 modify 列名 數據類型 【unique key】 【not null】 ;

alter table emp modify cardid varchar(18) unique key  not null;
alter table emp modify tel varchar(11)   not null;
alter table emp modify gender char not null default '男';

--去掉非空和默認值約束

alter table emp modify gender char ;

自增列:AUTO_INCREMENT

關鍵字:auto_incrementit

特色:

  • (1)一個表只能有一個自增列
  • (2)自增列必須是整型的
  • (3)自增列必須是鍵列,例如:主鍵,惟一鍵
create table emp(
	eid int primary key auto_increment,
	ename varchar(20) not null
);
相關文章
相關標籤/搜索