給小公司做網(wǎng)站賺錢么江西seo推廣
一個(gè)表只能有一個(gè)主鍵約束,且主鍵約束不能取空值。
通過(guò)unique約束定義唯一性,為了保證一個(gè)表非主鍵列不輸入重復(fù)值,可在該列定義unique約束。?
primary key約束與unique約束主要區(qū)別如下。?
(1)一個(gè)表只能創(chuàng)建一個(gè)primary key約束,但可創(chuàng)建多個(gè)unique約束。
(2)primary key約束的列值不允許為空值,unique約束的列值可取空值。
(3)創(chuàng)建primary key約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生primary key索引。創(chuàng)建unique約束時(shí),系統(tǒng)會(huì)自動(dòng)產(chǎn)生unique索引。?
primary key約束與unique約束都不允許對(duì)應(yīng)列存在重復(fù)值。?
5.1.1 主鍵約束
MySQL的主鍵列必須遵守以下規(guī)則:
(1)每個(gè)表只能定義一個(gè)主鍵。?
(2)表中的兩條記錄在主鍵上不能具有相同的值,即遵守“唯一性規(guī)則”。
(3)如果從一個(gè)復(fù)合主鍵中刪除一列后,剩下的列構(gòu)成的主鍵仍然滿足唯一性原則,那么,這個(gè)復(fù)合主鍵是不正確的,這就是“最小化規(guī)則”。?
(4)一個(gè)列名在復(fù)合主鍵的列表中只能出現(xiàn)一次。?
1.在創(chuàng)建表時(shí)創(chuàng)建主鍵約束
【例8.1】在數(shù)據(jù)庫(kù)study中創(chuàng)建"課程1"表,以列級(jí)完整性約束方式定義主鍵。?
create table 課程1(課程號(hào) char(4) not null primary key,課程名 char(16) not null,學(xué)分 tinyint null);
【例8.2】在數(shù)據(jù)庫(kù)stusys中創(chuàng)建course2表,以表級(jí)完整性約束方式定義主鍵。?
create table 課程2(課程號(hào) char(4) not null, 課程名 char(16) not null, 學(xué)分 tinyint null, primary key(課程號(hào)));?
【例8.3】在數(shù)據(jù)庫(kù)stusys中創(chuàng)建course3表,以表級(jí)完整性約束方式定義主鍵,并指定主鍵約束名稱。?
create table 課程3(課程號(hào) char(4) not null primary key,課程名 char(16) not null,學(xué)分 tinyint null,constraint pk_課程3 primary key(課程號(hào)));
2.刪除主鍵約束
?語(yǔ)法格式:
alter table<表名> drop primary key;?
【例8.4】刪除例8.3創(chuàng)建的在course3表上的主鍵約束。?
alter table 課程3drop primary key;
3.在修改表時(shí)創(chuàng)建主鍵約束
語(yǔ)法格式:?
alter table<表名>?
add ( [?constraint T < 約束名 > ] primary key?( 主鍵列名 )?
【例8.5】重新在course3表上定義主鍵約束。?
alter table 課程3add constraint pk_課程3 primary key(課程號(hào));
5.1.2唯一性約束
唯一性約束的值必須是唯一的,不允許重復(fù)。一個(gè)表可創(chuàng)建多個(gè)唯一性約束。?
1.在創(chuàng)建表時(shí)創(chuàng)建唯一性約束
【例8.6】在數(shù)據(jù)庫(kù)stusys中創(chuàng)建course4表,以列級(jí)完整性約束方式定義唯一性約束。?
create table 課程4(課程號(hào) char(4) not null, 課程名 char(16) not null unique, 學(xué)分 tinyint null);
在課程名列定義的后面加上unique關(guān)鍵字,列級(jí)定義唯一性約束,未指定約束名字,MysQL自動(dòng)創(chuàng)建約束名字。?
【例8.7】在數(shù)據(jù)庫(kù)stusys中創(chuàng)建course5表,以表級(jí)完整性約束方式定義唯一性約束。?
create table 課程5(課程號(hào) char(4) not null, 課程名 char(16) not null unique, 學(xué)分 tinyint null,constraint uk_課程5 unique(課程名));?
?
在表中所有列定義的后面加上一條constraint子句,表級(jí)定義唯一性約束,指定約束名字為uk_課程5。?
2.刪除唯一性約束
語(yǔ)法格式:?
alter table<表名>drop index<約束名>;?
【例8.8】刪除例8.7在course5表創(chuàng)建的唯一性約束。?
alter table 課程5drop index uk_課程5;
3.在修改表時(shí)創(chuàng)建唯一性約束
語(yǔ)法格式:?
alter table<表名>?
add ( [ constraint < 約束名 > ] unique ( 唯一性約束列名 )?
【例8.9】重新在course5表上定義唯一性約束。?
alter table 課程5add constraint uk_課程5 primary key(課程名);