宣告外來鍵約束
語法:
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.內連線 必須加限定條件 ...