對(duì)于mysql的外鍵和mysql的存儲(chǔ)引擎

存儲(chǔ)引擎說(shuō)白了就是如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。因?yàn)樵陉P(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的存儲(chǔ)是以表的形式存儲(chǔ)的,所以存儲(chǔ)引擎也可以稱為表類型(即存儲(chǔ)和操作此表的類型)。

在Oracle 和SQL Server等數(shù)據(jù)庫(kù)中只有一種存儲(chǔ)引擎,所有數(shù)據(jù)存儲(chǔ)管理機(jī)制都是一樣的。而MySql數(shù)據(jù)庫(kù)提供了多種存儲(chǔ)引擎。InnoDB和MyISAM是許多人在使用MySQL時(shí)最常用的兩個(gè)表類型。

基本的差別為:MyISAM類型不支持事務(wù)處理等高級(jí)處理,而InnoDB類型支持。MyISAM類型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持以及外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。

  1. 查看數(shù)據(jù)庫(kù)可以支持的存儲(chǔ)引擎
    用show engines; 命令可以顯示當(dāng)前數(shù)據(jù)庫(kù)支持的存儲(chǔ)引擎情況

2.創(chuàng)建數(shù)據(jù)庫(kù)表時(shí)設(shè)置存儲(chǔ)存儲(chǔ)引擎的基本語(yǔ)法是:

Create table tableName(
columnName(列名1)  type(數(shù)據(jù)類型)  attri(屬性設(shè)置),
columnName(列名2)  type(數(shù)據(jù)類型)  attri(屬性設(shè)置),
……..) engine = engineName

例:
create table user(
id int not null auto_increment,
username char(20) not null,
sex char(2),
primary key(id))
engine=InnoDB;

如果經(jīng)常用InnoDB的話可以直接將它設(shè)置為默認(rèn)的存儲(chǔ)引擎。
外鍵可以是一對(duì)一的,一個(gè)表的記錄只能與另一個(gè)表的一條記錄連接,或者是一對(duì)多的,一個(gè)表的記錄與另一個(gè)表的多條記錄連接。

對(duì)于外鍵

下面直接放一個(gè)例子來(lái)說(shuō):

//表1:(父表)
create table repo_table(
repo_id char(13) not null primary key,
repo_name char(14) not null)
engine=InnoDB;

//表2:(子表)
create table busi_table(
busi_id char(13) not null primary key,
busi_name char(13) not null,
repo_id char(13) not null,
index (repo_id),//外鍵必須建立索引
foreign key(repo_id) references repo_table(repo_id) on delete cascade on update cascade)//增加級(jí)聯(lián)操作
engine=InnoDB;

insert into repo_table values("12","sz");//成功
insert into repo_table values("13","cd");//成功
insert into busi_table values("1003","cd", "13");//成功
insert into busi_table values("1002","sz", "12");//成功
insert into busi_table values("1001","gx", "11");//失敗

//級(jí)聯(lián)刪除:刪除父表的數(shù)據(jù),子表對(duì)應(yīng)的也會(huì)被刪除
delete from repo_table where repo_id=12; 
//級(jí)聯(lián)更新:更新父表的數(shù)據(jù),子表對(duì)應(yīng)的也會(huì)被更新
update repo_table set repo_id=6 where repo_id=12;

注意:
·刪除先刪除子表數(shù)據(jù)
·插入先插入父表數(shù)據(jù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容