mysql給一張表添加外鍵的4種方法
一、添加外鍵
添加外鍵約束名字一定不能重復(fù)
如何添加外鍵
方法一:直接在屬性值后面添加
create table score( cscore int(11), st_id int(50) references student(id), cs_id int(30) references classes(id), primary key(st_id,cs_id) );
方法二:
create table score( cscore int(11), st_id int(50), cs_id int(30), primary key(st_id,cs_id), FOREIGN KEY (st_id) REFERENCES student(id), FOREIGN KEY (cs_id) REFERENCES classes(id) );
方法三:添加約束
create table score( cscore int(11), st_id int(50), cs_id int(30), primary key(st_id,cs_id), CONSTRAINT `FK_ID_ST` FOREIGN KEY (st_id) REFERENCES student(id), CONSTRAINT `FK_ID_CS` FOREIGN KEY (cs_id) REFERENCES classes(id) );
方法四:在表的定義外進(jìn)行添加
alter table 表名 add constraint FK_ID foreign key(你的外鍵字段名) REFERENCES 外表表名(對(duì)應(yīng)的表的主鍵字段名);
二、添加主鍵
1.創(chuàng)建表的時(shí)候直接在表字段后,跟primary key關(guān)鍵字。(一張表有且只能有一個(gè)主鍵,主鍵具有唯一性。)
CREATE TABLE tb ( id INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(20) )
2.在創(chuàng)建表的時(shí)候在所有字段后面使用primary key(主鍵字段列表)來(lái)創(chuàng)建主鍵(如果有多個(gè)字段作為主鍵被稱為復(fù)合主鍵)
*CREATE TABLE table_test( id INT NOT NULL, name VARCHAR(20) NOT NULL, address VARCHAR(20), PRIMARY KEY(id) );
復(fù)合鍵這樣設(shè)置:
CREATE TABLE table_test( user_id INT NOT NULL, user_name VARCHAR(20) NOT NULL, user_address VARCHAR(20), PRIMARY KEY (user_id, user_name) );*
3.在表創(chuàng)建好之后添加主鍵(表本身沒(méi)有主鍵):
alter table 表名 add primary key(字段列表)
ALTER TABLE Employees ADD CONSTRAINT PK_EmployeesID PRIMARY KEY (EmployeeID)
給表中沒(méi)有的字段添加主鍵:
ALTER TABLE (表名) ADD id INT(16) NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST;
注:主鍵必須非空,自增需要自己設(shè)置。如下:
alter table(表名) modify id integer auto_increment
我們光說(shuō)了添加主鍵,那么刪除主鍵怎么辦?
alter (表名) DROP PRIMARY KEY
外鍵的基本要求
- 外鍵字段需要保證與關(guān)聯(lián)的主表的主鍵字段類型完全一致
- 基本屬性也要相同
- 如果是在表后增加外鍵,對(duì)數(shù)據(jù)還有一定要求(從表數(shù)據(jù)與主表的關(guān)聯(lián)關(guān)系)
- 外鍵只能使用InnoDB存儲(chǔ)引擎
外鍵約束
外鍵約束:通過(guò)建立外鍵關(guān)系之后,對(duì)主表和從表都會(huì)有一定的數(shù)據(jù)約束效率。
約束的基本概念
當(dāng)一個(gè)外鍵產(chǎn)生時(shí):外鍵所在的表(從表)會(huì)受制于主表數(shù)據(jù)的存在從而導(dǎo)致數(shù)據(jù)不能進(jìn)行某些不符合規(guī)范的操作(不能插入主表不存在的數(shù)據(jù));
如果一張表被其他表外鍵引入,那么該表的數(shù)據(jù)操作就不能隨意;必須保證從表數(shù)據(jù)的有效性(不能隨便刪除一個(gè)被從表引入的記錄)
外鍵約束的概念
可以在創(chuàng)建外鍵約束的時(shí)候,對(duì)外鍵進(jìn)行約束操作。
基本語(yǔ)法:add foreign key(外鍵字段) references 主表(主鍵) on 約束模式
約束模式有三種:
1.district:嚴(yán)格模式,默認(rèn)的,不允許操作
2.cascade:級(jí)聯(lián)模式,一起操作,主表變化,從表數(shù)據(jù)跟著變化
3.set null:置空模式,主表變化(刪除),從表對(duì)應(yīng)記錄設(shè)置為空:前提是從表中對(duì)應(yīng)外鍵字段允許為空。
外鍵約束主要約束的對(duì)象是主表操作:從表就是不能插入主表不存在的數(shù)據(jù)
通常在進(jìn)行約束的時(shí)候,需要指定操作:update 和 delete
常用的約束模式:on update cascade,on delete set null,更新級(jí)聯(lián),刪除置空
# 更新模式 alter table my_student add foreign key(class_id) references my_class(class_id) -- 約束條件 on update cascade on delete set null; -- 更新主表 update my_class set class_id = 4 where class_id = 2; -- 執(zhí)行更新主表操作后,從表也隨便主表的變化而變化了
#刪除模式 delete from my_class where class_id = 4; -- 執(zhí)行以上操作后,學(xué)生表my_student class_id原來(lái)值為4字段現(xiàn)在全部為空
約束的作用
保證數(shù)據(jù)的完整性:主表與從表的數(shù)據(jù)要一致
正因?yàn)橥怄I有非常強(qiáng)大的數(shù)據(jù)約束作用,而且可能導(dǎo)致數(shù)據(jù)在后臺(tái)變化的不可控。導(dǎo)致程序在進(jìn)行設(shè)計(jì)開(kāi)發(fā)邏輯的時(shí)候,
沒(méi)有辦法去很好的把握數(shù)據(jù)(業(yè)務(wù)),所以外鍵比較少用
總結(jié)
到此這篇關(guān)于mysql給一張表添加外鍵的4種方法的文章就介紹到這了,更多相關(guān)mysql給表添加外鍵內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用mysqldump導(dǎo)入數(shù)據(jù)和mysqldump增量備份(mysqldump使用方法)
mysqldump常用于MySQL數(shù)據(jù)庫(kù)邏輯備份,下面看實(shí)例吧2013-12-12mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)
這篇文章主要給大家介紹了關(guān)于mysql正確刪除數(shù)據(jù)的相關(guān)資料,DELETE語(yǔ)句是MySQL中最常用的刪除數(shù)據(jù)的方式之一,但也有幾種其他方法來(lái)實(shí)現(xiàn),需要的朋友可以參考下2023-10-10mysql函數(shù)之截取字符串的實(shí)現(xiàn)
本文主要介紹了mysql函數(shù)之截取字符串的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08分析Mysql大量數(shù)據(jù)導(dǎo)入遇到的問(wèn)題以及解決方案
這篇文章主要介紹了Mysql大量數(shù)據(jù)導(dǎo)入遇到的問(wèn)題以及解決方案,希望我們整理的內(nèi)容能夠幫助到大家。2018-02-02MySQL 表字段太多超長(zhǎng)問(wèn)題解決方案
在設(shè)計(jì)MySQL數(shù)據(jù)庫(kù)時(shí),常遇到表字段超長(zhǎng)問(wèn)題,這是由字段數(shù)量過(guò)多或字段定義過(guò)長(zhǎng)引起的,MySQL對(duì)字段數(shù)量和行大小有嚴(yán)格限制,超過(guò)限制將無(wú)法正常操作,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下2024-10-10MySQL 可擴(kuò)展設(shè)計(jì)的基本原則
可擴(kuò)展設(shè)計(jì)是一個(gè)非常復(fù)雜的系統(tǒng)工程,所涉及的各個(gè)方面非常的廣泛,技術(shù)也較為復(fù)雜,可能還會(huì)帶來(lái)很多其他方面的問(wèn)題。但不管我們?nèi)绾卧O(shè)計(jì),不管遇到哪些問(wèn)題,有些原則我們還是必須確保的。2021-05-05