復雜操作

數(shù)據(jù)庫設計:建表

數(shù)據(jù)庫設計三大范式:

(1)確保每一列的原子性:每一列都不可再拆分

//不符合規(guī)范

//規(guī)范

(2)確保表中的每一列都和主鍵相關:每一行只做一件事情,只要表中出現(xiàn)重復的數(shù)據(jù),就要把表拆分開

//不規(guī)范,數(shù)據(jù)重復

訂單編號 ?聯(lián)系人 ?電話 ?地址 詳細地址

1001 小波 110 ??北京市 北京市

1002 路人甲 112 xxxxxxx xxxxxxx

1003 小波 110 北京市 北京市

1004 小波 110 北京市 北京市

//規(guī)范

1荠瘪、訂單表

訂單編號 聯(lián)系人編號

1001 1

1002 2

1003 1

1004 1

2啸胧、用戶表

聯(lián)系人編號 聯(lián)系人 ?電話 ?地址 詳細地址

1 小波 110 北京市 北京市

2 路人甲 112 xxxxxxx xxxxxxx

(3)表中的每一列必須和主鍵直接相關,而不是間接相關

//不規(guī)范

學生編號 ?學生姓名 ?性別 電話 所在學校 學校地址 學校電話

1001 小波 man 110 華育

//規(guī)范

學生編號 ?學生姓名 ?性別 電話 學校編號

1001 小波 man 110 001

學校編號 學校名稱 學校地址 學校電話

001 華育 北京 12345678

外鍵:

作用:為了保證兩種數(shù)據(jù)表中的數(shù)據(jù)的一致性

要求:(1)一般給從表添加外鍵約束

(2)必須保證帶有外鍵約束的字段和主表中參考的主鍵字段的數(shù)據(jù)類型一致

(3)外鍵必須參考的是另一張表中的主鍵字段

(4)存儲引擎innodb

//mysql默認的存儲引擎是myisam //創(chuàng)建表時添加外鍵
create table orders(
?oid int(11) not null auto_increment primary key,
??? uid int(11) not null,
??? money decimal(11,2) not null,
??? orderTime datetime not null,
??? foreign key(uid) references users(uid)//外鍵訂單表uid參考的是用戶表的主鍵uid
)engine=innodb charset=utf8;

查看創(chuàng)建表時的Sql show create table 表名;

刪除外鍵alter table 表名 drop foreign key 外鍵名;alter table orders drop foreign key orders_ibfk_1;

對已經(jīng)存在的表添加外鍵 alter table books add foreign key(type_id) references book_type(type_id);

在刪除或者更新主表記錄時,從表應該如何處理相關的記錄
on delete//當刪除時
on update//當更新時

//允許的級聯(lián)動作:
(1)cascade:關聯(lián)操作,如果主表被更新或刪除,從表也會執(zhí)行相應的操作
(2)restrict:拒絕主表的相關操作
(3)set null:表示從表數(shù)據(jù)不指向主表任何記錄
(4)no action:無動作

//刪除主表的數(shù)據(jù)時蔚万,從表數(shù)據(jù)也會被刪掉
alter table books add foreign key(type_id) references book_type(type_id) on delete cascade;

alter table orders add foreign key(uid) references users(uid) on delete cascade;

多表查詢

1select * from dept,person;也叫笛卡爾積

2mysql> select * from dept,person where dept.id=person.bid;

3開發(fā)中一般使用等值查詢

mysql> select id,bname,name,degree from person,dept where dept.id=person.bid;

注:多表查指定字段,最好用表名.字段名,如果多表中有重名字段則必須用表名.字段名

關聯(lián)查詢(表連接)
定義:兩張及兩張以上的表临庇,把他們按照一定的條件連接起來
什么情況下使用連接查詢:
?在同一頁面中反璃,同一個模塊中,需要來自不同表中的數(shù)據(jù)

圖書Id 圖書名字 圖書類型

(1)內(nèi)連接
//取的是兩張表數(shù)據(jù)的交集假夺,會丟失數(shù)據(jù)
//select 字段名 from 表名1 inner join 表名2 on 表1.關聯(lián)字段=表2.關聯(lián)字段版扩;
select bk.id,bk.b_name,bt.type_name from books as bk inner join book_type as bt on bk.type_id=bt.type_id;

select bk.id,bk.b_name,bt.type_name from books as bk,book_type as bt where bk.type_id=bt.type_id;

(2)外連接
(1)左鏈接(left join):會讀取左邊表的全部數(shù)據(jù),即使右表無對應數(shù)據(jù)
????? A left join B:A在左邊作為主表,A表全部數(shù)據(jù)都會顯示出來,而B表只會顯示符合條件的數(shù)據(jù)侄泽,B表記錄不足的地方會以Null補足
?//select 字段名 from 表名1 left join 表名2 on 表1.關聯(lián)字段=表2.關聯(lián)字段礁芦;

select bk.id,bk.b_name,bt.type_name from books bk left join book_type bt
?on bk.type_id = bt.type_id;
?b)右連接(right join):會讀取右邊表的全部數(shù)據(jù),若左邊表無對應的數(shù)據(jù)悼尾,會以Null來補足
??? A right join B:B表在右邊柿扣,作為主表
子查詢
(什么情況下使用
(1)一般涉及到兩張表及兩張以上的表
(2)通過一個已知表的條件去查找另一個表的數(shù)據(jù)(必須保證兩張表有一個共同的字段))

select * from score where stid =(select stid from student where name = '小雪')? and coid = (select coid from course where co_name = '英語');

聚合函數(shù),通常與group by一起使用 count();max();min();sum()求和;avg() 求平均值

查詢結果中有重復的數(shù)據(jù)闺魏,只取每組中的第一條記錄

Having

distinct 去重 寫兩個 聯(lián)合去重

字符串函數(shù),會影響mysql執(zhí)行效率

截取字符串substr(string,start,length)=substring(string,start,length)
? string:要截取的字符串
? start:從哪個位置開始截,從1開始
? length:截取多少長度

select substr(b_name,1,2) from books;

拼接字符串
select concat(1,2,3);//結果123
任意一個參數(shù)為Null,結果就為null
select concat(1,2,null);//結果null
select concat(b_name,price) from books;

select 字段名,字段名, ... (*)
???? from 表名 where 子句??
???? group by子句
???? having子句
???? order by子句
???? limit子句
???? desc(asc)

執(zhí)行順序 from-on-join-where-group by-having-

Case when用法:
SELECT? 字段1,?????????
??? case?????????????????? -------------如果
??? when sex='1' then '男' -------------sex='1'未状,則返回值'男'
??? when sex='2' then '女' -------------sex='2',則返回值'女'?
??? else? ’其他’??????????????? -------------其他的返回'其他’
??? end?
??? as 別名????????????????? -------------結束
from?? sys_user??????????? --------整體理解: 在sys_user表中如果sex='1'析桥,則返回值'男'如果sex='2'司草,則返回值'女' 否則返回'其他’

無限極分類(遞歸)表


ID? name????? pid(父級ID)
1?? 理財??????? 0
2?? 眾籌??????? 0
3?? 保險??????? 0
4?? 京東下金庫?? 1
5?? 票據(jù)理財???? 1
6?? 基金理財???? 1
7?? 智能硬件??? 2
8?? 流行文化??? 2
9?? 車險??????? 3
10? 健康險????? 3
11? 意外險????? 3

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艰垂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子埋虹,更是在濱河造成了極大的恐慌猜憎,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搔课,死亡現(xiàn)場離奇詭異胰柑,居然都是意外死亡,警方通過查閱死者的電腦和手機爬泥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門柬讨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人袍啡,你說我怎么就攤上這事踩官。” “怎么了境输?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵卖鲤,是天一觀的道長。 經(jīng)常有香客問我畴嘶,道長,這世上最難降的妖魔是什么集晚? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任窗悯,我火速辦了婚禮,結果婚禮上偷拔,老公的妹妹穿的比我還像新娘蒋院。我一直安慰自己,他們只是感情好莲绰,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布欺旧。 她就那樣靜靜地躺著,像睡著了一般蛤签。 火紅的嫁衣襯著肌膚如雪辞友。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天震肮,我揣著相機與錄音称龙,去河邊找鬼。 笑死戳晌,一個胖子當著我的面吹牛鲫尊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沦偎,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼疫向,長吁一口氣:“原來是場噩夢啊……” “哼咳蔚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搔驼,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谈火,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后匙奴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堆巧,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年泼菌,在試婚紗的時候發(fā)現(xiàn)自己被綠了谍肤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡哗伯,死狀恐怖荒揣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焊刹,我是刑警寧澤系任,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站虐块,受9級特大地震影響俩滥,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贺奠,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一霜旧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧儡率,春花似錦挂据、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至眉孩,卻和暖如春个绍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浪汪。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工障贸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吟宦。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓篮洁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親殃姓。 傳聞我的和親對象是個殘疾皇子袁波,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容