一、外鍵約束
1、什么是外鍵?
外鍵指的是其他表中的主鍵,當做該表的外鍵。
2、創建外鍵。
2.1 可在創建表的時候直接創建外鍵,如圖所示:
create table table_name (字段名 字段屬性,[add constraint 外鍵name] foreign key (字段名) references 主表(主表主鍵名));
2.2 創建完表后再添加外鍵
alter table table_name add constraint 外鍵name foreign key (字段名) references 主表(主表主鍵名);
2.3刪除外鍵
alter table table_name drop 外鍵name
2.4注意事項:
所創建的外鍵屬性要和主表中的主鍵屬性相同。
當創建了外鍵之后,子表中想要刪除某條記錄可直接刪除,但是主表中想要刪除某條記錄要先把主表和子表對應的外鍵給刪除后才 能刪除主表的某條記錄,但是這樣做子表就沒有外鍵了,所以建議只是修改子表外鍵所對應主表主鍵其他的值,這樣就可以刪除了。
3、外鍵約束的含義:
3.1外鍵約束對子表的含義:當在子表中insert或update一條數據時,如果在主表中找不到候選鍵,那么就不允許該操作。
3.2外鍵約束對主表的含義:當在主表中insert或update數據時,如果主表的候選鍵對應的有子表的外鍵值,那么就不允許該操作。
4、innodb支持on語句的高級用法,略過。
二、多表查詢
1、什么是多表查詢?
前提是兩張表之前沒有什么聯系,但是至少有一個共同點是至少有一個相同屬性的字段。
2、多表查詢之連接查詢
select * from table_name1,table_name2........ where table_name1.相同屬性的字段=table_name2.相同屬性的字段 [and able_name1.相同屬性的字段=table_name2.相同屬性的字段 ];
3、多表查詢之內連接查詢
select * from table_name1 inner join table_name2 [table_name2.....] on table_name1.相同屬性的字段=table_name2.相同屬性的字段
[and table_name1.相同屬性的字段=table_name2.相同屬性的字段];
4、多表查詢之外連接查詢
4.1左邊連接: 在內連接的基礎上增加左邊有右邊沒有
select * from table_name1 left join table_name2 [table_name2.....] on table_name1.相同屬性的字段=table_name2.相同屬性的字 段[and table_name1.相同屬性的字段=table_name2.相同屬性的字段];
4.2右邊連接:在內連接的基礎上增加右邊有左邊沒有
select * from table_name1 right join table_name2 [table_name2.....] on table_name1.相同屬性的字段=table_name2.相同屬性的 字段[and table_name1.相同屬性的字段=table_name2.相同屬性的字段];
4.3全外連接:在內連接的基礎上增加右邊有左邊沒有和左邊有右邊沒有的全部結果
select * from table_name1 left join table_name2 [table_name2.....] on table_name1.相同屬性的字段=table_name2.相同屬性的字 段[and table_name1.相同屬性的字段=table_name2.相同屬性的字段] union select * from table_name1 right join table_name2 [table_name2.....] on table_name1.相同屬性的字段=table_name2.相同屬性的字段 [and table_name1.相同屬性的字段=tabel_na
me2.相同屬性的字段.....];
4.4 注意:union會去掉相同的記錄,但是union all不會。
5、多表查詢之復合條件連接查詢
5.1 和內外連接的查詢方式相同,只不過是在此基礎上添加上了別的查詢條件。(可以吧內外連接查詢出的表看成是一個表)
5.2格式:
select *|表.字段名 [as] [別名].... from 表1,表2.... where 限制條件 group by 條件 havin 條件 order by 條件 limit 條件;
6、多表查詢之子查詢
6.1什么是子查詢?
子查詢是將一條查詢語句嵌套在另一條查詢語句當中,也可以是將一條語句的查詢結果當做另一條語句的查詢條件,其中子查詢中 可以包含 in, not in,any,all,exists,not exists,比較運算符等操作。
6.2exists關鍵字表示存在,帶有exists關鍵字的子查詢返回的結果要么是真要么是假,當子查詢返回為true時外界查詢繼續,當子查詢 返回為Flase時外界查詢終止。