mysql中key 、primary key 、unique key 與index差別。本站提示廣大學習愛好者:(mysql中key 、primary key 、unique key 與index差別)文章只能為提供參考,不一定能成為您想要的結果。以下是mysql中key 、primary key 、unique key 與index差別正文
mysql中索引長短常主要的常識點,比擬其他的常識點,索引更難控制,而且mysql中的索引品種也有許多,好比primary key 、unique key 與index等等,本文章向年夜家引見mysql中key 、primary key 、unique key 與index差別。
1、key與primary key差別
CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, user_name varchar(100) default NULL, operation_time datetime default NULL, logrecord_operation varchar(100) default NULL, PRIMARY KEY (logrecord_id), KEY wh_logrecord_user_name (user_name) )
解析:
KEY wh_logrecord_user_name (user_name)
本表的user_name字段與wh_logrecord_user_name表user_name字段樹立外鍵
括號外是樹立外鍵的對應表,括號內是對應字段
相似還有 KEY user(userid)
固然,key未必都是外鍵
總結:
Key是索引束縛,對表中字段停止束縛索引的,都是經由過程primary foreign unique等創立的。罕見有foreign key,外鍵聯系關系用的。
KEY forum (status,type,displayorder) # 是多列索引(鍵)
KEY tid (tid) # 是單列索引(鍵)。
如建表時: KEY forum (status,type,displayorder)
select * from table group by status,type,displayorder 能否就主動用上了此索引,
而當 select * from table group by status 此索引有效嗎?
key的用處:重要是用來加速查詢速度的。
2、KEY與INDEX差別
批注:這部門我仍雲裡霧裡。
KEY平日是INDEX同義詞。假如症結字屬性PRIMARY KEY在列界說中已給定,則PRIMARY KEY也能夠只指定為KEY。這麼做的目標是與其它數據庫體系兼容。 PRIMARY KEY是一個獨一KEY,此時,一切的症結字列必需界說為NOT NULL。假如這些列沒有被明白地界說為NOT NULL,MySQL應隱含地界說這些列。一個表只要一個PRIMARY KEY。
MySQL 中Index 與Key 的差別
Key即鍵值,是關系模子實際中的一部分,好比有主鍵(Primary Key),外鍵(Foreign Key)等,用於數據完全性檢否與獨一性束縛等。而Index則處於完成層面,好比可以對表個的隨意率性列樹立索引,那末當樹立索引的列處於SQL語句中的Where前提中時,便可以獲得疾速的數據定位,從而疾速檢索。至於Unique Index,則只是屬於Index中的一種罷了,樹立了Unique Index表現此列數據弗成反復,料想MySQL對Unique Index類型的索引可以做進一步特別優化吧。
因而乎,在設計表的時刻,Key只是要處於模子層面的,而當須要停止查詢優化,則對相干列樹立索引便可。
別的,在MySQL中,關於一個Primary Key的列,MySQL曾經主動對其樹立了Unique Index,無需反復再在下面樹立索引了。
搜刮到的一段說明:
Note that “primary” is called PRIMARY KEY not INDEX.
KEY is something on the logical level, describes your table and database design (i.e. enforces referential integrity …)
INDEX is something on the physical level, helps improve access time for table operations.
Behind every PK there is (usually) unique index created (automatically).
3、mysql中UNIQUE KEY和PRIMARY KEY有甚麼差別
1,Primary key的1個或多個列必需為NOT NULL,假如列為NULL,在增長PRIMARY KEY時,列主動更改成NOT NULL。而UNIQUE KEY 對列沒有此請求
2,一個表只能有一個PRIMARY KEY,但可以有多個UNIQUE KEY
3,主鍵和獨一鍵束縛是經由過程參考索引實行的,假如拔出的值均為NULL,則依據索引的道理,全NULL值不被記載在索引上,所以拔出全NULL值時,可以有反復的,而其他的則不克不及拔出反復值。
alter table t add constraint uk_t_1 unique (a,b); insert into t (a ,b ) values (null,1); # 不克不及反復 insert into t (a ,b ) values (null,null);#可以反復
4、應用UNIQUE KEY
CREATE TABLE `secure_vulnerability_warning` ( `id` int(10) NOT NULL auto_increment, `date` date NOT NULL, `type` varchar(100) NOT NULL, `sub_type` varchar(100) NOT NULL, `domain_name` varchar(128) NOT NULL, `url` text NOT NULL, `parameters` text NOT NULL, `hash` varchar(100) NOT NULL, `deal` int(1) NOT NULL, `deal_date` date default NULL, `remark` text, `last_push_time` datetime default NULL, `push_times` int(11) default '1', `first_set_ok_time` datetime default NULL, `last_set_ok_time` datetime default NULL, PRIMARY KEY (`id`), UNIQUE KEY `date` (`date`,`hash`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
UNIQUE KEY的用處:重要是用來避免數據拔出的時刻反復的。
1,創立表時
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (Id_P) )
假如須要定名 UNIQUE 束縛,和為多個列界說 UNIQUE 束縛,請應用上面的 SQL 語法:
CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName) )
2,當表已被創立時,如需在 "Id_P" 列創立 UNIQUE 束縛,請應用以下 SQL:
ALTER TABLE Persons
ADD UNIQUE (Id_P)
如需定名 UNIQUE 束縛,並界說多個列的 UNIQUE 束縛,請應用上面的 SQL 語法:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)
3,撤消 UNIQUE 束縛
如需撤消 UNIQUE 束縛,請應用上面的 SQL:
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
感激浏覽,願望能贊助到年夜家,感謝年夜家對本站的支撐!