1.外來鍵
(1)定義:
引用另乙個表中的一列或多列,被引用的列應該具有主鍵約束或唯一性約束,外來鍵用於建立和加強兩個表資料之間的連線。
(2)為表新增外來鍵約束
alter
table student add
constraint fk_id foreign
key(gid)
references grade (id)
;
注: gid外來鍵依賴於grade表中的id主鍵,gid是student的外來鍵。
(3)刪除外來鍵約束
alter
table student drop
foreign
key fk_id;
例:
部門表(主表)
create
table dept(
id int
primary
key,
deptname varchar(20
))
修改員工表(副表/從表)
create
table employee(
id int
primary
key,
empname varchar(20
),deptid int
,constraint emlyee_dept_fk foreign
key(deptid)
references dept(id)
-- 外來鍵名稱 外來鍵 參考表(參考字段)
)
注意:
(4)級聯操作
出現原因:當有了外來鍵約束的時候,必須先修改或刪除副表中的所有關聯資料,才能修改或刪除主表!我們希望直接修改或刪除主表資料,從而影響副表資料。就可以使用級聯操作實現!
級聯修改: on update cascade
級聯刪除: on delete cascade
例:
constraint emlyee_dept_fk foreign
key(deptid)
references dept(id)
onupdate
cascade
ondelete
cascade
應用:
例:直接修改部門
update dept set id=
5where id=
4;
例:直接刪除部門
delete
from dept where id=
1;
2.操作關聯表
(1)關聯關係
(2)新增資料
insert
into grade (id,name)
values(1
,'oneclass');
insert
into grade (id,name)
values(2
,'twoclass'
);
注:由於student表的外來鍵與grade表的主鍵關聯,因此在為student表新增資料時,gid的值只能是1或2。
(3)刪除資料
delete
from grade where id =
1;
3.連線查詢# 建表
create
table tbl_dept(
id int(11
)not
null
auto_increment
,deptname varchar(30
)default
null
,locadd varchar(40
)default
null
,primary
key(id)
)engine
=innodb
auto_increment=1
default
charset
=utf8;
create
table tbl_emp(
id int(11
)not
null
auto_increment
,name varchar(20
)default
null
,deptld int(11
)default
null
,primary
key(id)
,constraint fk_dept_id foreign
key(deptld)
references tbl_dept(id)
)engine
=innodb
auto_increment=1
default
charset
=utf8;
# 插入資料
insert
into tbl_dept(deptname,locadd)
values
(「rd」,11)
;insert
into tbl_dept(deptname,locadd)
values
(「hr」,12)
;insert
into tbl_dept(deptname,locadd)
values
(「mk」,13)
;insert
into tbl_dept(deptname,locadd)
values
(「mis」,14)
;insert
into tbl_dept(deptname,locadd)
values
(「fd」,15)
;insert
into tbl_emp(name,deptld)
values
(「z3」,1)
;insert
into tbl_emp(name,deptld)
values
(「z4」,1)
;insert
into tbl_emp(name,deptld)
values
(「z5」,1)
;insert
into tbl_emp(name,deptld)
values
(「w5」,2)
;insert
into tbl_emp(name,deptld)
values
(「w6」,2)
;
7種連線查詢示例
(1)笛卡爾查詢:兩張表相乘的結果
select
*from dept,possible;
(2)內連線查詢:查詢出左邊表右邊表都有的資料記錄。
select
*from dept,possible where dept.id = possible.dept_id;
select
*from dept inner
join possible on dept.id = possible.dept_id;
(3)外連線查詢
select
*from dept left
join possible on dept.id = possible.dept_id;
select
*from dept right
join possible on dept.id = possible.dept_id;
select
*from dept full
join possible on dept.id = possible.dept_id;
注:mysql不支援全外連線查詢,mysql中合併左外右外查詢從而達到全外連線查詢的目的
4.子查詢
(1)帶in關鍵字的子查詢
select dname from departmaent where did in
(select did from employee where age=20)
;
注:not in 關鍵字與in作用相反;
(2)帶exists關鍵字的子查詢(不產生任何資料,只返回true或false)
select
*from department where
exists
(select
*from employee where age>21)
;
(3)帶any關鍵字的子查詢
select
*from department where did>
any(
select did from employee)
;
(4)帶all關鍵字的子查詢
select
*from department where did >
all(
select did from employee)
;
(5)帶比較運算子的子查詢
select dname from department where id =
(select did from employee where name=
'lee'
);
本人才疏學淺,如有錯誤,請指出謝謝!
mysql的多表操作 MySQL多表操作
交叉連線 交叉連線 cross join 又稱笛卡爾連線 cartesian join 或叉乘 product 它是所有型別內連線的基礎。它把表看作是行記錄的集合,交叉連線即返回這兩個集合的笛卡爾積。這其實等價於內連線的連線條件始終為 真 或連線條件不存在。笛卡爾積引用自數學,在數學中,兩個集合x和...
MySQL入門基礎 3 多表操作
實際開發中的表之間是存在關係的,用於描述現實生活中的物件關係 alter table 多表名稱 add foreign key 外來鍵名稱 references 一表名稱 主鍵 select a.b.from a join b on ab連線條件 顯示的內連線,join之前表是主表 select a...
MySQL多表操作
方式一 create table stu sid int primary key,sname varchar 20 age int 方式二 create table stu sid int,sname varchar 20 age int,primary key sid 方式三 create tab...