mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...
數(shù)據(jù)庫:唯一性約束_alternate key(替換鍵) mySQL Oracle 數(shù)據(jù)庫 ak 唯一性約束
數(shù)據(jù)庫:唯一性約束
所謂唯一性約束(unique constraint)不過是數(shù)據(jù)表內(nèi)替代鍵的另一個(gè)名稱而已。替代鍵(alternate key)可以是數(shù)據(jù)表內(nèi)不作為主鍵的其他任何列,只要該鍵對(duì)該數(shù)據(jù)表唯一即可。換句話說,在唯一列內(nèi)不允許出現(xiàn)數(shù)據(jù)重復(fù)的現(xiàn)象。比方說,你可以用車輛識(shí)別代號(hào)(VIN)作為汽車(Automobile)數(shù)據(jù)表的替代鍵,在汽車數(shù)據(jù)表里,主鍵是汽車識(shí)別號(hào)(Automobile Identification),這是一種由系統(tǒng)自動(dòng)生成的ID。你可以在汽車表內(nèi)對(duì)VIN施加唯一性約束,同時(shí)再創(chuàng)建一個(gè)需要VIN的表。在這個(gè)新表內(nèi)可以聲明外鍵指向汽車表。這樣,只要汽車表內(nèi)有VIN輸入數(shù)據(jù)庫就會(huì)檢驗(yàn)VIN輸入結(jié)果。這就是保證數(shù)據(jù)庫內(nèi)數(shù)據(jù)完整性的另一種有效的措施。
create table parent
(parent_id int not null,????? -- Primary key
parent_alternate_key int not null,???? -- Alternate key
parent_col1 int null,
parent_col2 int null,
constraint pk_parent_id primary key (parent_id),
constraint ak_parent_alternate_key unique_
(parent_id, parent_alternate_key)
使用約束:
create table child2
(child2_parent_id int not null,???? -- Primary key/Foreign key
child2_id int not null,???? -- Primary key
child2_col1 int null,
child2_parent_alternate_key int not null,? -- Foreign key
constraint pk_child2 primary key (child2_parent_id, child2_id),
constraint fk_child2_parent foreign key (child2_parent_id)
references dbo.parent(parent_id),
constraint fk_pk_ak_child2_parent foreign key _
(child2_parent_id, child2_parent_alternate_key) _
references dbo.parent(parent_id, parent_alternate_key)
primary key 與UNIQUE的區(qū)別
1.一個(gè)基本表中只能定義一個(gè)primary key,但可以定義多個(gè)UNIQUE的約束
2.指定primary key的一個(gè)列或多個(gè)列的組合都不能為NULL,而UNIQUE所約束的唯一鍵則允許為空
3.不能為一個(gè)列或多個(gè)列既定義primary key,又定義UNIQUE約束
MYSQL目前不支持外鍵,其理由如下:
1.外鍵使生活更復(fù)雜,因?yàn)橥怄I的定義必須存儲(chǔ)在一個(gè)數(shù)據(jù)庫中并且實(shí)現(xiàn)他們將破壞使用能被移動(dòng)、拷貝和刪除文件的全部“好方法”。
2.速度影響對(duì)INSERT和UPDATE語句是可怕的,并且在這種情況下幾乎所有的FOREIGN KEY檢查都是無用的,因?yàn)椴还茉鯓幽阃ǔR哉_的順序在正確的表中插入記錄。
3.當(dāng)更新一張表時(shí),也有在許多表上保存鎖的需求,因?yàn)楦弊饔每梢源?lián)通過全部數(shù)據(jù)庫。首先從一張表中刪除記錄并且隨后從其他表中刪除他們,這更快。
4.你再也不可以通過做一個(gè)全面的表刪除并隨后恢復(fù)所有的記錄的方法來恢復(fù)一張表(從新來源或從一個(gè)備份)。
5.如果你有外鍵,你不能傾倒和恢復(fù)表,除非你以一個(gè)非常特定的做這些。
6.很容易做一個(gè)“允許的”的循環(huán)定義使得不可能用一個(gè)單個(gè)create語句重建每一個(gè)表,就算定義可行又可用。
總結(jié)
以上是生活随笔為你收集整理的mysql中ak替换键_数据库:唯一性约束_alternate key(替换键) mySQL Oracle 数据库 ak 唯一性约束...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三友摩托车踏板150发动机是什么品牌性能
- 下一篇: 电池PLG44+45+66+3是多少毫安