1. 程式人生 > >mysql數據庫 詳解 之 自學成才1

mysql數據庫 詳解 之 自學成才1

簡化 註意 可能 方法 after 字符型 專題 mar 建議

一、學習目錄

1.認識數據庫和mysql

2.mysql連接

3.入門語句

4.詳解列類型

5.增刪改查

INSERT INTO 表名(列1,…… 列n) VALUES(值 1,…… 值 n);

*(列1,…… 列n)允許不寫,如果不寫,則默認插入所有列

INSERT INTO 表名 VALUES(值 1,…… 值 n);

*VALUES 對應的值的輸入順序與表中字段順序一致

改:

update 表名 set 列1 = 新值1, 列2 = 新值2, where expr

*改哪張表? 你需要給改哪幾列的值? 分別改為什麽值? 在哪些行生效?

刪:

delete from 表名 where expr

*你要刪哪張表的數據? 你要刪掉哪些行?

查:

select 列1,列2,..列n from 表名 where expr

*查哪張表的數據? 你要選擇哪些列來查詢? 要選擇哪些行?

6.查的5種子語句詳解

7.連接查詢

8.子查詢

9.表引擎與字符集

10.索引與索引優化

11.觸發器

12.事務

13.備份與恢復

二、入門語句

查看所有庫

創建庫

刪除庫

選擇數據庫

查看表

創建表

技術分享
create table 表名 (
列1 [列屬性 默認值],
列2 [列屬性 默認值],
.....
列n [列屬性 默認值]
)
engine = 存儲引擎 
charset = 字符集
技術分享

刪除表

改表名

三、詳解列類型 之3大列類型

數值型(整型列,浮點型列)

字符型列

日期/時間類型

a.整型列存儲範圍與所占空間

技術分享

b.整型列的可選屬性

tinyint(M) unsigned zerofill

M: 寬度(在0填充的時候才有意義)

unsigned: 無符號類型(非負)

zerofill: 0填充,(默認無符號)

c.浮點型與定點型

float:浮點型 decimal:定點型 decimal更精確

float(M,D)

decimal(M,D) 6,2

M: 精度 (總位數,不包含點)

D: 標度 (小數位)

d.字符串類型

技術分享

e.時期時間類型

技術分享

f.特殊的NULL類型

NULL 不是假,也不是真,而是"空"

任何運算符,判斷符碰到NULL,都得NULL

NULL的判斷只能用is null,is not null

NULL 影響查詢速度,一般避免使值為NULL

四、select 5種子句介紹

Where 條件查詢

group by 分組

having 篩選

order by排序

limit 限制結果條數

五、連接查詢

左連接 右連接 內連接

作用: 從2張或多張表中, 取出有關聯的數據

①連接查詢 之連接查詢語法

左連接的語法. Select Ltable.* ,Rtable.* from Ltable left join Rltable on Ltable.colName = Rtable.colName

內連接的語法. Select Ltable.* ,Rtable.* from Ltable inner join Rltable on Ltable.colName = Rtable.colName

②連接查詢 之左右連接與內連接的區別

:左右連接可互換

:A left join B 等價於B right join A

內連接是左右連接的交集

:mysql沒有外連接

六、子查詢

子查詢就是在原有的查詢語句中,

嵌入新的查詢,來得到我們想要的結果集。

一般根據子查詢的嵌入位置分為, where型子查詢,from型子查詢

①where型子查詢

where型子查詢即是:把內層sql語句查詢的結果作為外層sql查詢的條件.

典型語法:

select * from tableName where colName = (select colName from tbName where ....) {where colName in (select colName from tbName where ..)}

典型案例:

1:查詢最新的一條商品

2:查詢出某大欄目下的所有商品

②exists型子查詢

exists即:外層sql查詢所查到的行代入內層sql查詢,要使內層查詢能夠成立

查詢可以與in型子查詢互換,但效率要高.

典型語法:

select * from tablename where exists(select * from tableName where ...)

典型案例:

1:查詢出某大欄目下的所有商品

③from型子查詢

from型子查詢即:把內層sql語句查詢的結果作為臨時表供外層sql語句再次查詢.

典型語法: select * from (select * from tableName where ...) where....

典型案例:

1:查詢出每個欄目下的最新商品

2:BBS中查詢每個欄目下的最新帖子

七、存儲引擎與字符集

學習目的:

出於速度和安全性的要求,選取合理的存儲引擎.

考慮多語言與移植的問題,選取合理的字符集.

八、存儲引擎是什麽概念?

數據庫對同樣的數據,有著不同的存儲方式和管理方式 在mysql中,稱為存儲引擎

①存儲引擎與其特點

技術分享

②存儲引擎的選擇

文章,新聞等安全性要求不高的,選myisam

訂單,資金,賬單,火車票等對安全性要求高的, 可以選用innodb

對於臨時中轉表,可以用memory型 ,速度最快

九、字符集 (charset)

一句話說字符集

字符集就是一個字符<->二進制字節的映射表

字符集是一套符號和編碼的規則,不論是在 oracle 數據庫還是在 mysql 數據庫,都 存在字符集的選擇問題,而且如果在數據庫創建階段沒有正確選擇字符集,那麽可能在後期 需要更換字符集,而字符集的更換是代價比較高的操作,也存在一定的風險,所以,我們推 薦在應用開始階段,就按照需求正確的選擇合適的字符集,避免後期不必要的調整。

①字符集的選擇

1:節省空間 建議在能夠完全滿足應用的前提下,盡量使用小的字符集。 因為更小的字符集意味著能夠節省空間、 減少網絡傳輸字節數,同時由於存儲空間的較小間接的提高了系統的性能。 有很多字符集可以保存漢字,比如 utf8、gb2312、gbk、gb18030 等等, 但是常用的是gb2312 和 gbk。 2:兼容性 因為 gb2312 字庫比 gbk 字庫小,有些偏僻字(例如:洺)不能保存,因此 在選擇字符集的時候一定要權衡這些偏僻字在應用出現的幾率以及造成的影響,

3:在互聯網上,國際化的趨勢不可避免,且存儲空間已經越來海量化, 因此推薦用utf8,如果開發內網系統,如內部OA等,可以考慮GBK。

十、校對規則collate(了解即可)

一句話說校對規則 校對規則就是對字符集中的字符的"座次表"

請你給 A a B b C c D d 按升序排列

技術分享

十一、字符集專題-徹底搞定亂碼

客戶端字符集 client

服務器存儲,查詢,比較時 用的字符集 (connection)

查詢結果字符集 results

①字符集專題-新舊網站並存案例

十二、索引與優化 之索引是什麽?

該字典前面的"目錄"全部丟失 請找出‘華‘這個字來

如何快速找到某個字 可以給字典加目錄 對數據庫來說,索引的作用即是給 "數據"加目錄

①索引與優化 之索引算法(了解)

設有N條隨機記錄,不用索引, 平均查找N/2次,那麽用了索引之後呢

btree(二叉樹)索引

hash(哈希)索引

②索引與優化 之索引的好處與壞處

好外:

加快了查詢速度(select )

壞處:

降低了增,刪,改的速度(update/delete/insert) 增大了表的文件大小(索引文件甚至可能比數據文件還大)

③索引與優化 之索引的使用原則

不過度索引

索引條件列(where後面最頻繁的條件比較適宜索引)

索引散列值,過於集中的值不要索引 例如:給性別"男","女"加索引,意義不大

④索引與優化 之索引類型

普通索引 (index)

主鍵索引 (primary key)

唯一索引 (unique)

全文索引 (fulltext)

⑤索引與優化 之索引創建語法(1)

建表時直接聲明索引:

create table tableName (

列1 列類型 列屬性,

....

列N 列類型 列屬性,

primary key(列名),

index (列名),

unique(列名),

fulltext(列名)

)engine xxxxx charset xxxx

⑥索引與優化 之索引創建語法(2)

通過修改表建立索引

alter table add index (列名);

alter table add unique (列名);

alter table add primary key(列名);

alter table add fulltext (列名);

⑦索引與優化 之索引刪除語法

刪除主鍵:

alter table drop primary key

刪除其他索引:

alter table drop index索引名

註:索引名一般是列名,如果不是, 可通過show index from tableName查看索引

十三、觸發器

學習目標:

觸發器的定義

觸發器的應用場合

掌握觸發器的創建語法

會創建簡單觸發器

①觸發器定義

進行數據庫應用軟件的開發時, 我們有時會碰到表中的某些數據改變, 希望同時引起其他相關數據改變的需求, 利用觸發器就能滿足這樣的需求。 它能在表中的某些特定數據變化時自動完成某些查詢。 運用觸發器不僅可以簡化程序, 而且可以增加程序的靈活性。

觸發器是一類特殊的事務 ,

可以監視某種數據操作(insert/update/delete), 並觸發相關操作(insert/update/delete)

②觸發器應用場合

1.當向一張表中添加或刪除記錄時,需要在相關表中進行同步操作。 比如,當一個訂單產生時,訂單所購的商品的庫存量相應減少。

2.當表上某列數據的值與其他表中的數據有聯系時。 比如,當某客戶進行欠款消費, 可以在生成訂單時通過設計觸發器判斷該客戶的累計欠款是否超出了最大限度。

3.當需要對某張表進行跟蹤時。 比如,當有新訂單產生時,需要及時通知相關人員進行處理, 此時可以在訂單表上設計添加觸發器加以實現

③觸發器創建語法 之4要素

監視地點 (table)

監視事件 insert/update/delete

觸發時間 after/before

觸發事件 insert/update/delete

④觸發器創建語法

創建觸發器的語法

create trigger 觸發器名稱 after/befor (觸發時間) insert/update/delete (監視事件) on 表名 (監視地址) for each row begin sql1; .. sqlN; end

⑤觸發器引用行變量(1)

⑥觸發器的刪除

drop trigger triggerName

十四、事務 之事務的概念

思考: 我去銀行給朋友匯款, 我卡上有1000元, 朋友卡上500元, 我給朋友轉賬50元(無手續費), 如果,我的錢剛扣,而朋友的錢又沒加時, 網線斷了,怎麽辦?

①事務 之事務的ACID特性

原子性(Atomicity):原子意為最小的粒子,或者說不能再分的事物。 數據庫事務的不可再分的原則即為原子性。 組成事務的所有查詢必須: 要麽全部執行,要麽全部取消(就像上面的銀行例子)。

一致性(Consistency):指數據的規則,在事務前/後應保持一致

隔離性(Isolation):簡單點說,某個事務的操作對其他事務不可見的.

持久性(Durability):當事務完成後,其影響應該保留下來,不能撤消

②事務 之事務的用法

開啟事務(start transaction) 執行sql操作(普通sql操作) 提交/回滾(commit/rollback)

註意:建表的時候, 選擇 innodb引擎

十五、備份與恢復

①備份命令

備份單獨庫下面的所有表的方法

mysqldump -uuname -ppasswd dbname > /dir/filename

備份某一庫下面的幾個表的方法

mysqldump -uuname -ppasswd dbname table1 table2.. tableN > /dir/filename

備份多個庫的方法

mysqldump -uname -ppasswd -B db1 db2 > /dir/filename

備份所有庫的方法

mysqldump -uname -ppasswd -A > /dir/filename

②恢復命令

1:在命令行操作

mysql -uuname -ppasswd [databaseName]< /dir/filename

2:登陸mysql後source操作

mysql> use dbname;

mysql> source /dir/filename;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

本文出處:http://www.cnblogs.com/suihui/p/3172049.html

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在此多謝原作者的分享。

mysql數據庫 詳解 之 自學成才1