一 .sql語句(mysql為例)
1、創(chuàng)建表
(1)創(chuàng)建新表 create tabel tablername{}
(2)根據(jù)已有的表創(chuàng)建
方法一: create table sale_copy like sale_maintain ?-- sale_copy新表? ? ? -- sale_maintain 舊表只是創(chuàng)建表結(jié)構(gòu)
方法二:? ?create table sale_copy as? select id,month,service_number,organization_name,province from sale_maintain
? ? ? ? ? ? ? ? ? -- sale_copy新表 ??-- sale_maintain 舊表根據(jù)舊表創(chuàng)建指定字段新表表結(jié)構(gòu)+數(shù)據(jù)
(3)查看表結(jié)構(gòu)
方法一: desc tableName;
方法二:?DESCRIBE tableName;
方法三: SHOW COLUMNS FROM tableName
(4)查看建表語句:SHOW ?CREATE ?TABLE table_name
(5)查看索引:show index from table
2、刪除
drop table tabelName? ? ?-- 刪除表結(jié)構(gòu) 釋放表結(jié)構(gòu)所占的空間
truncate tabelName? ? ? -- 清空表無法恢復(fù)
delete? ? ? ? ? ? ? ? ? ? ? ? ?-- 每次刪除一行 ?將改操作作為事務(wù)記錄在日志中,可以進(jìn)行回滾
3、Alter
(1)修改表名
ALTER TABLE ?old_table_name ? RENAME TO ?new_table_name
?eg :alter TABLE sale_copy RENAME to copyy
(2)增加列
Alter table tabname add column col type
?eg:alter table sale_copy add model VARCHAR(64)
(3)? 修改字段名和類型? ?
ALTER ?TABLE ?table_name? MODIFY? 字段名稱 ? 字段數(shù)據(jù)類型
eg: alter table sale_copy MODIFY model int(11)? ? ? --修改字段類型
ALTER ?TABLE ?table_name ?CHANGE ?舊字段名稱? ?新字段名稱 ?新字段數(shù)據(jù)類型
eg:alter table sale_copy change model devicename VARCHAR(64) --修改字段名稱和類型
(4)? 刪除? ?
?ALTER TABLE ?table_name? DROP? col
eg: alter table sale_copy? drop model? ? ?--如果表中只剩下一個字段無法刪除
(5)? 修改和刪除字段的默認(rèn)值
ALTER ?TABLE ?table_name ? ALTER? 字段名稱??SET ? DEFAULT ?數(shù)值
eg : ALTER ?TABLE ?sale_copy ?ALTER ?model ?SET ?DEFAULT ?'tk'? ? ? ? --修改默認(rèn)值
ALTER ?TABLE ?table_name ? ALTER? ?字段名稱 ? DROP ? DEFAULT
eg: ALTER TABLE ?sale_copy ?ALTER ?model DROP ?DEFAULT? ? ? --刪除默認(rèn)值
(6)? 添加主鍵
? ? 步驟一:? ALTER ?TABLE ?table_name ?ADD ?PRIMARY ?KEY( id )
? ?步驟二:? ?ALTER ?TABLE ?table_name ?MODIFY ? id ?int(10) ?NOT ?NULL AUTO_INCREMENT
?(7)? 刪除主鍵
?步驟一: ? ALTER ?TABLE ?table_name ?CHANGE ? id ? id ?int(10)? --先刪除自增長
?步驟二:? ?ALTER ?TABLE ?table_name ?DROP ?PRIMARY ?KEY? ? ?--再刪除主鍵
(8)添加索引
ALTER ?TABLE ?table_name ?ADD ?UNIQUE (字段名稱 ?)? ? --唯一索引
ALTER ?TABLE ?test ?ADD ?INDEX索引名稱 ( 字段名稱 )? ? ? ?--普通索引
ALTER ?TABLE ?table_name? ADD ?FULLTEXT ?(字段名稱? )? ?--全文索引
4、查詢
4.1操作符
(1)比較運(yùn)算符:=,? <=,? ?BETWEEN AND ,? IN,? LIKE, 和 IS NULL
(2)邏輯運(yùn)算符: AND, OR和 NOT
4.2高級查詢運(yùn)算詞
(1)union合并兩個或多個select的結(jié)果集 消取重復(fù)的結(jié)果集 如果不需要消取重復(fù)的使用union all

(2)Except結(jié)果包含table1不包含table2 (mysql不支持) except all 同理union all
(3)INTERSECT結(jié)果包含table1和table2中都包含的結(jié)果集 (mysql不支持) intersect all 同理 union all
4.3外連接
(1)left join左外鏈接,結(jié)果集包含左表的所有行即使在右表中沒有匹配的行
(2)right join右外連接,結(jié)果集包含右表的所有行即使在左表中沒有匹配的行
(3)full join全連接 結(jié)果集包含兩個表中的所有行
4.4 ?Group by
將查詢結(jié)果按照1個或多個字段進(jìn)行分組
(1)常用的聚合函數(shù):count()計(jì)數(shù) ??sum() 求和 ?avg()求平均數(shù) max() 最大數(shù) ?min()最小數(shù)
(2)配合聚合函數(shù)來使用
(3)group by+group_concat(name) :表示分組之后,根據(jù)分組之后的結(jié)果,使用group_concat() 來放置某字段值的集合

(4)group by用在where之后 order by之前,having用在group by之后(where先執(zhí)行,再分組,分組完成再having)
(5)除聚合函數(shù)外,select語句中的每個字段都必須在group by中給出
(6)Select語句執(zhí)行順序 from -- where -- group by -- having -- order by -- limit
4.5子查詢
(1)where型子查詢:把內(nèi)層查詢的結(jié)果作為外層查詢的比較條件

(2)From型子查詢:把內(nèi)存的查詢結(jié)果當(dāng)成臨時(shí)表,供外層查詢再次使用

注意:? 內(nèi)層查詢的字段必須包含外層查詢的字段
(3)Exists型子查詢:把外層sql的結(jié)果拿到內(nèi)層去測試,如果內(nèi)層的sql成立,則取出該行
(4)Any in all子查詢
?Any:ANY關(guān)鍵詞的意思是“對于在子查詢返回的列中的任一數(shù)值,如果比較結(jié)果為TRUE的話,則返回TRUE”

In in的效果跟=any效果一樣

All:對于子查詢返回的列中的所有值,如果比較結(jié)果為TRUE,則返回TRUE
二??sql優(yōu)化
(1)盡量避免全表查詢:考慮在where及order by涉及的列上添加索引
(2)盡量避免在where字句中的字段進(jìn)行null判斷,會導(dǎo)致放棄索引而進(jìn)行全表查詢
(3)盡量避免在where字句中使用 != 或<>操作符,or來鏈接條件,in 或者not in,對字段進(jìn)行表達(dá)式操作,對字段進(jìn)行函數(shù)操作,會導(dǎo)致放棄索引而進(jìn)行全表查詢
(4)select count(*) from table;這樣不帶任何條件的count會引起全表掃描,并且沒有任何業(yè)務(wù)意義,是一定要杜絕的
(5)索引不是越多越好,提高select效率,但是insert和update有時(shí)可能會重建索引
(6)盡可能的使用varchar/nvarchar代替 char/nchar
(7)任何地方都不要使用select * from t,用具體的字段列表代替“*”,不要返回用不到的任何字段
。。。。。還有很多這些只是我們用的多的
三? ?事務(wù)
事務(wù)是一個操作序列,這些操作要么都執(zhí)行,要么都不執(zhí)行
主要是為了解決并發(fā)情況下保持?jǐn)?shù)據(jù)一致性問題
四個基本特征:
(1)原子性:事務(wù)中包含的操作被看做是一個邏輯單元,這個邏輯單元的操作要么都成功,要么都不成功
(2)一致性:只有合法的數(shù)據(jù)可以被寫入到數(shù)據(jù)庫,否則事務(wù)應(yīng)該回滾到最初狀態(tài)
(3)隔離性:多個用戶對同一數(shù)據(jù)進(jìn)行并發(fā)訪問,而不破壞數(shù)據(jù)的完整性和正確性
(4)持久性:事務(wù)結(jié)束后,事務(wù)處理的結(jié)果必須得到固化