(4)MySQL的外來鍵(不同表之間的資料關聯)

2022-08-14 00:42:19 字數 3403 閱讀 7729

問題:下列這張表中部門等列名下輸入的資料沒有約束,那麼可以隨便填寫符合規則的資料但是不符合實際需求的值,這樣就造成了不符合規則的資料在表中存在,外來鍵就是為了解決這個問題,管理員可以在另一張表中設定好符合規則的資料,然後讓其他的表呼叫,又比如乙個部門改名了,如果這個表中有幾百行資料,相同的也有幾百行,那麼一行一行的修改時非常耗時和沒有工作效率的,為了解決這個問題,就要引用外表的資料,這樣只要修改外表的乙個資料,就可以同步到資料表中

外來鍵例項(一對多)

ps:比如乙個人只能在乙個部門,而乙個部門可以有多個人,這樣的關係就是一對多

需求:能夠知道乙個員工在什麼部門

表1create tale user(

id int unsigned auto_increment primary key,

name char(32) not null default'',

age int not null default 1, #age列的預設值是1

depertment int not null default 1 #depertment_id 的預設值是1

constraint  depe_id foreign key user('deperment') references depertment('id')  #建立乙個外來鍵的語句格式

depe_id(就是外來鍵的名字,自定義) \ user就是表的名字(需要加約束的列名) \ depertment 就是外來鍵表的名字(外來鍵表的id列)

)charset=utf-8;

表2creat table deperment(

外來鍵的唯一索引\唯一約束 (一對一)

---作用就是給這一列的值建立外來鍵後,不能出現重複的值

唯一約束例項:場景就是乙個部落格,每乙個使用者名稱有乙個專門的頁面,這裡資料庫就要唯一性,乙個使用者名稱不能有多個部落格,給鏈結位址表建立外來鍵,使用者名稱表和部落格位址表建立關聯,並且約束的列不能有重複的外鍵值

'''這張是使用者表,存放使用者名稱的'''

create table user(

id int unsigned auto_increment pirmary key,

name char(32) not null default''

)charset=utf8

'''這張是使用者部落格的位址表'''

create table article(

id int unigned auto_increment primary key,

url carchar(32) not null default'',

uid int not null default 1,

constraint fk_name foreign key('uid') reference user('id')

unique(uid)   #給uid建立了約束,值不能重複

unique(id,url)   #聯合唯一索引

ps:給article表的uid列增加了外來鍵,並且新增了唯一約束的條件,所以如果uid值相同則會報錯

外來鍵的(多對多)

例:登陸伺服器賬號的許可權的管理

ps:乙個使用者名稱可以同時對應多個主機,而乙個主機也能夠對用多個使用者,這樣關係就叫多對多

需求:要給使用者新增登陸哪台伺服器的許可權,而且還能方便統計乙個賬號有幾台伺服器的許可權

連表查詢

ps:連表查詢的效率是很低的,如果工作中業務是對外的,成百上千萬的使用者量,不要使用連表查詢,如果是公司內部也就幾十到幾百人的訪問量,使用連表查詢不會有影響,因為針對上千萬的使用者量肯定要涉及到使用者體驗度關係到使用者的接受度,資料量大的時候程式會跑半天,而公司內部沒有那麼高的資料量

inner join #這個叫笛卡爾積

select * from tablename1 inner join,tablename2 on tablename1.外來鍵_id=tablenam2.id   #將兩張表的值所有列的值全部獲取

select  tablename1.列名, tablename2.列名 from tablename1 innerjoin tablename2 on tablename1.外來鍵列_id=tablename2.id   #查詢獲取的不是id,而是值對應的值

left join #左邊的表資料全部顯示

select * from tablename1 left join tablename2 on tablename1.外來鍵列_id=tablename2.id  #做好外來鍵後檢視對應的值,這個指令會將表對應表全部獲取

ps: left join tablename2 on tablename1.外來鍵列_id=tablename2.id後面還可以跟 left join tablename2 on tablename1.外來鍵列_id=tablename2.id,可以進行三表聯查或者四表聯查

right join  #右邊的表資料全部顯示

select * from tablename1 right join tablename2 on tablename1.外來鍵列_id=tablename2.id  #做好外來鍵後檢視對應的值,這個指令會將表對應表全部獲取

mysql表與表之間建立外來鍵關係

create database bankdb use bankdb drop table user info create table user info user id int auto increment primary key,user name nvarchar 30 user nvarch...

mysql外來鍵的4種選項

1.cascade 從父表中刪除或更新對應的行,同時自動的刪除或更新自表中匹配的行。on delete canscade和on update canscade都被innodb所支援。2.set null 從父表中刪除或更新對應的行,同時將子表中的外來鍵列設為空。注意,這些在外鍵列沒有被設為not n...

4 Mysql資料庫 表的操作命令

聯絡之前請先登入資料庫 mysql u使用者名稱 p使用者密碼 登入 show tables 表的檢視 create table 語句用於建立資料庫中的表。表由行和列組成,每個表都必須有個表名。create table table name column name1 data type size c...