MySQL資料庫學習筆記 多表操作部分

2021-10-08 15:50:57 字數 4535 閱讀 3647

宣告外來鍵約束

語法:

alter

table 從表 add

[constraint

][外來鍵名稱]

foreign

key(從表外來鍵欄位名)

references 主表 (主表的主鍵)

;[外來鍵名稱]用於刪除外來鍵約束的,一般建議「_fk」結尾

alter

table 從表 drop

foreign

key 外來鍵名稱

分析

同時查詢兩張及以上的表

語法:select * from 表一,表二

**出現的結果:**兩個表的的結果相乘之後再呈現(笛卡爾積)

查詢語法:

select 列名 from 表a,表b where 主表的主鍵=從表的外來鍵

注意:如果主鍵和外來鍵列名相同,則用表明.列名

-顯示內連線

關鍵字:inner

join

條件過濾關鍵字 on

select 列名 from 表a inner

join 表b on 主表.主鍵=從表.

左外:left outer join

右外:right outer join

左外連線:

select 列名 from 表a left

outer

join 表b on 主表.主鍵= 從表.外來鍵

--注意:參照點是左邊的表,左邊的表資料全部顯示,右邊的表若無資料則顯示null

右外連線:

select 列名 from 表a right

outer

join 表b on 主 表.主鍵= 從表.外來鍵

--注意:參照點是右邊的表!!右邊的表的資料都要顯示,左邊的表多餘的資料,不能顯示

兩個查詢放在一起,乙個是子,乙個是父;子查詢的結果可以讓另乙個查詢來使用,可以作為條件也可以作為另乙個表

子查詢練習:

#查詢「化妝品」和「家電」兩個分類上架商品詳情

select

*from

products

where

category_id in

(select cid from category where cname=

'家電'

or cname=

'化妝品');

-- 'c001', 'c003'

-- select cid from category where cname='家電' or cname='化妝品';

-- select cid from category where cname in ('家電', '化妝品');

提公升查詢效率
優勢

1.類似於書籍的目錄索引,提高資料檢索的效率,降低資料庫的io成本

2、通過索引列對資料進行排序,降低資料排序的成本,降低cpu的消耗

劣勢

1、索引也是一張表,該表中儲存了主鍵和索引字段,並指向實體類的記錄,也需要占用空間

2、提公升了查詢效率, 但卻降低了更新表的速率

資料在硬碟中的儲存方式

-innodb:儲存在檔案中

支援事務、支援關係,主外來鍵

增刪改慢,查詢一般

-myisam:儲存在檔案中

不支援事務、不支援關係,主外來鍵

增刪改快,查詢一般

-memory:儲存在記憶體中

1) 單值索引 :即乙個索引只包含單個列,乙個表可以有多個單列索引

2) 唯一索引 :索引列的值必須唯一,但允許有空值

3) 復合索引 :即乙個索引包含多個列

索引在建立表的時候,可以同時建立, 也可以隨時增加新的索引。

準備環境:

create

table

`city`

(`city_id`

int(11)

notnull

auto_increment

,`city_name`

varchar(50

)not

null

,`country_id`

int(11)

notnull

,primary

key(

`city_id`))

engine

=innodb

default

charset

=utf8;

create

table

`country`

(`country_id`

int(11)

notnull

auto_increment

,`country_name`

varchar

(100

)not

null

,primary

key(

`country_id`))

engine

=innodb

default

charset

=utf8;

insert

into

`city`

(`city_id`

,`city_name`

,`country_id`

)values(1

,'西安',1

);insert

into

`city`

(`city_id`

,`city_name`

,`country_id`

)values(2

,'newyork',2

);insert

into

`city`

(`city_id`

,`city_name`

,`country_id`

)values(3

,'北京',1

);insert

into

`city`

(`city_id`

,`city_name`

,`country_id`

)values(4

,'上海',1

);insert

into

`country`

(`country_id`

,`country_name`

)values(1

,'china');

insert

into

`country`

(`country_id`

,`country_name`

)values(2

,'america');

insert

into

`country`

(`country_id`

,`country_name`

)values(3

,'japan');

insert

into

`country`

(`country_id`

,`country_name`

)values(4

,'uk'

);

語法 :

create

[unique

|fulltext|spatial]

index 索引名

[using index_type]

on 表名(建立索引的列)

index_col_name : column_name[

(length)][

asc|

desc

]

語法:

show

index

from 表名;

語法 :

drop

index 索引名 on 表名;

1).

alter

table tb_name add

primary

key(column_list)

; 該語句新增乙個主鍵,這意味著索引值必須是唯一的,且不能為null2)

.alter

table tb_name add

unique index_name(column_list);

這條語句建立索引的值必須是唯一的(除了null外,null可能會出現多次) 3

).alter

table tb_name add

index index_name(column_list)

; 新增普通索引, 索引值可以出現多次。

mysql資料庫學習筆記(六) 多表查詢

建表 use dt4 create table dept id bigint 20 not null auto increment primary keycomment 部門編號 deptname varchar 20 comment 部門表 create table emp id bigint 2...

MYSQL學習筆記 關於MySQL的多表操作 2

實際開發中,乙個專案通常需要很多張表才能完成。主鍵 和 外來鍵 的概念 主鍵是能確定一條記錄的唯一標識。外來鍵用於與另一張表的關聯,都是指向另乙個表的主鍵。可伸縮性 能夠適應不斷增加的工作量而不失敗,設計良好的資料庫或應用程式稱之為可伸縮性好。普通的多表查詢 select sname,address...

資料庫MySQL 多表連線

做一下資料庫的筆記 一下是資料庫中的兩張表,以這兩張表為例,學習多表連線的相關知識 1.笛卡爾交集 交叉連線 select from emp cross join dept 將兩個表進行以上的連線,結果如下 這種連線的效果很明顯,就是兩個表裡的每一條資料都進行了一次連線 2.內連線 必須加限定條件 ...