46 表與表的連線

2022-07-22 09:21:13 字數 3687 閱讀 1571

一、主鍵 primary key

1.1、從約束條件上看,等同於not null+unique:非空且唯一

create table t1(id int primary key)

1.2、主鍵除了有約束效果外,還是innodb儲存引擎組織資料的依據   

innodb儲存引擎在建立表的時候必定會有primary key,相當於表內的索引,通常在id欄位放置,可以快速的找到需要的資訊

1.2.1、當表內沒有主鍵 primary key時

當表內找不到任何關於非空且唯一欄位時,innodb儲存引擎會在自己內部提供乙個他隱藏的非空且唯一的字段,但是我們無法找到他。

1.2.2、當表內沒有primary key,但是有not null unique時,

innodb儲存引擎會按照從上到下找到第乙個not null unique ,並將它設定成主鍵

1.2.3、當表內有且只有乙個primary key時

通常primary key是以id/uid/sid欄位作為主鍵

1.2.4、聯合主鍵

將多個字段聯合起來作為主鍵,本質也是乙個主鍵:primary key (ip,port)

二、自增 auto_increment

自動增加序號,只能給主鍵新增,可以避免不斷地輸入序號

create table t1(id int primary key auto_increment,

name char(16));'

insert into t1(name) values(

'jason

'),('

egon

');

三、表與表之間的關係

為避免表結構的資料擴充套件性差,浪費空間,組織結構不清晰,因此可以將乙個表進行拆解,並將其進行關聯。

表的關係分為四種,分別是:一對多關係,多對多關係,一對一關係,沒有關係

3.1、外來鍵 foreign key

外來鍵就是連線將表與表關聯在一起:foreign key

3.2、一對多關係

將一張表進行分解成兩張,其中一張資料相對比較單一,一張資料相對比較複雜,複雜的包含在單一的裡面就像乙個集合,例如乙個部門有多個員工,多的就是員工,單一的就是部門。

foreign key:1.設定在複雜的一方,也就是關聯表,而少的就是被關聯表

2.建立表的時候需要先建立被關聯表

3.錄入資料是,也要先錄入被關聯表

由於刪除和修改表內的資料,需要先刪除關聯表內資料,再刪除被關聯表內資料,所以有了同步更新和同步刪除

同步更新:on update cascade

同步刪除:on delete cascade 

create table dep(

id int primary key auto_increment,

dep_name char(16),

dep_desc chjar(32)

);create table emp(

id int primary key auto_increment,

name char(16),

gender enum(

'male

','female

','others'),

def_id int,

foreign key(dep_id) references dep(id)

on update cascade

#同步更新

on delete cascade#

同步刪除

);insert into dep(dep_name,dep_desc) values(

'教學部

','教育人

'),('

技術部','

搞研究'

);insert into emp(name,def_id) values(

'jason

',1),('

egon

',2),('

tank

',2)

3.3、多對多關係

多對多關係需要建立一張第三方的表,將兩張表進行關聯

create table book(

id int primary key auto_increment,

title varchar(32),

price int

);create table author(

id int primary key auto_inceement,

name varchar(32),

age int

);craeate table book_and_author(

id int primary key auto_increment,

author_id int,

book_id int,

foreign key(author_id) references author(id)

on update cascade

#同步更新

on delete cascade #

同步刪除

foreign key(book_id) references book(id)

on update cascade

#同步更新

on delete cascade #

同步刪除

)

3.4、一對一關係

當欄位比較多時,可以將一張表拆成兩張一對一的表,外來鍵字段建議建立在使用頻率比較高的表中

create table authordetail(

id int primary key auto_increment,

phone int,

addr varchar(64)

);create table author(

id int primary key auto_increment,

name varchar(32),

age int,

authordetail_id int unique,

foreign key(authordetail_id) references authordetail(id)

on update cascade

on delete cascade

)

四、修改表

4.1、修改表名

alter table 表名 rename 新錶名

4.2、增加字段

alter table 表名 add 欄位名 字段型別(寬度) 約束條件;

alter table 表名 add 欄位名 字段型別(寬度) 約束條件 first;

alter table 表名 add 欄位名 字段型別(寬度) 約束條件 after 欄位名;

4.3、刪除字段

alter table 表名 drop 欄位名;

4.4、修改字段

alter table 表名 modify 欄位名 字段型別(寬度) 約束條件;

alter table 表名 change 舊欄位名 新欄位名 字段型別(寬度) 約束條件;

五、複製表

由於sql語句查詢的是一張虛擬表,只能複製舊表,不能複製主鍵以及外來鍵

create table 表名 select * from 舊表;

create table new_dep2 select * from dep where id >3;

mysql表與表的鏈結 MySQL表連線

有3種 join 按照功能大致分為如下三類 cross join 交叉連線 inner join 內連線或等值連線 outer join 外連線 交叉連線cross join 交叉連線也叫笛卡爾積連線。笛卡爾積是指在數學中,兩個集合 x 和 y 的笛卡尓積 cartesian product 又稱直...

mysql表連線sql表 MYSQL表連線查詢

表連線查詢 一 交叉連線 笛卡爾積 查詢teacher和course表中所有的資料 select from teacher,course select name,courseid,course.id,cname from teacher,course where teacher.courseid c...

資料庫表與表的連線方式

第一部分 查詢理論 連線查詢方式有 內連線 外連線 左連線 右連線 全連線 交叉連線 左連線和右連線的區別 左連線以左表為基準進行查詢,左表資料會全部顯示出來,右表如果和左表匹配的資料則顯示相應欄位的資料,如果不匹配,則顯示為null 右連線剛好相反。全連線就是先以左表進行左外連線,然後以右表進行右...