1、聲明主鍵的方法:
您可以在創(chuàng)建表的時(shí)候就為表加上主鍵,如:
CREATE TABLE tbl_name ([字段描述省略...], PRIMARY KEY(index_col_name));
也可以更新表結(jié)構(gòu)時(shí)為表加上主鍵,如:
| ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name,…);/*創(chuàng)建一個(gè)qq表,將qq_id設(shè)為主鍵,且沒(méi)有對(duì)其進(jìn)行NOT NULl約束*/create table qq(qq_id int(10),nick_name varchar(255) not null,primary key (qq_id))/*插入一條數(shù)據(jù),將qq號(hào)設(shè)為10000(咱也幻想一下),昵稱設(shè)為"simaopig"*/INSERT INTO qq( qq_id, nick_name )VALUES ('10000', 'simaopig'); |
主鍵被認(rèn)為是NOT NULL和UNIQUE約束最好的結(jié)合。如果這些列沒(méi)有被明確地定義為NOT NULL,MySQL會(huì)隱含地定義這些列。
2、主鍵也是索引:
剛才已經(jīng)說(shuō)了,主鍵其實(shí)也是索引,甚至在MySQL的術(shù)語(yǔ)里面“鍵”就等于“索引”,所以“外鍵”一定要先設(shè)為“索引”。所以主鍵也應(yīng)該和索引一樣,既可以作用于單獨(dú)的字段,又可以作用于多個(gè)字段。
舉個(gè)簡(jiǎn)的例子吧,我住3單元,501室,我叫小小子,那么只有3單元501室才能在本小區(qū)表里面唯一確定我家。因?yàn)?單元,501室住著的可能也是個(gè)小小子,所以只有兩個(gè)字段才能唯一確定我,也就是說(shuō)可以二者組合作為主鍵。組合的主鍵,每個(gè)列都會(huì)隱含定義NOT NULL約束,且其二者加在一起被定義了UNIQUE 惟一約束。
| /*創(chuàng)建防火墻表,將host 和port組合設(shè)為主鍵,注意我沒(méi)有將port設(shè)NOT NULL約束*/create table firewall(host varchar(11) not null,port smallint(4),access enum('deny', 'allow') not null,primary key (host,port))/*插入一條新的記錄,沒(méi)有啥問(wèn)題1 row(s) inserted.*/INSERT INTO firewall (host ,port ,access)VALUES ('202.65.3.87', '21', 'deny'); |
3、設(shè)置主鍵自增
下面我們通過(guò)一個(gè)實(shí)例來(lái)講解設(shè)置主鍵自增的方法:
首先創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建表
| mysql> create database ssh2; |
| Query OK, 1 row affected (0.04 sec) |
| mysql> use ssh2; |
| Database changed |
| mysql> create table user( -> id integer primary key, -> firstname varchar(200) not null, -> lastname varchar(200) not null, -> age integer -> ); |
| Query OK, 0 rows affected (0.46 sec) |
給主鍵增加一個(gè)自增的功能:
| mysql> alter table user modify id integer auto_increment ; |
| Query OK, 1 row affected (0.28 sec) Records: 1 Duplicates: 0 Warnings: 0 |
這樣,上面的user表里面的主鍵,id可以自增了。
給上面的主鍵id增加默認(rèn)值和自增功能。
|
新聞熱點(diǎn)
疑難解答
圖片精選