《MYSQL必知必會2
60、NULL是沒有值,空串是一個有效值
61、主鍵只能使用不允許未NULL值的列
62、每個表只允許一個auto_increment列
63、不允許使用函數作為默認值,只支持常量
64、InnoDB 支持事務的引擎,可靠;MEMORY 快,數據存儲在內存,適合臨時表;MyISAM 快,支持全文搜索
65、修改表定義:alter table 表名
66、刪除表:drop table 表名
67、重命名表:rename table 表名 to 新表名
68、視圖本身不包含數據,僅僅是用來查看存儲在別處的數據的一種措施
69、視圖的作用:1)簡化負責sql語句的編寫2)重新格式化檢索出的數據
70、可以通過更新視圖來更新基表,但不是所有視圖都能更新
71、存儲過程就是為以後的使用而保存的一條或多條MYSQL語句的集合。可以視為批文件,雖然他的作用不限於批處理
72、使用存儲過程的好處:簡單(使用者不用寫復雜的sql);安全(限制了使用者對基本數據的訪問,防止誤操作);高性能(存儲過程比單獨的SQL語句快)
73、執行存儲過程用CALL
CALL product(@pricelow,@pricehigh,@priceaverage);
存儲過程實際上是一個函數
74、創建存儲過程:create procedure 過程名()
Begin
Select * from tbl_order;
End;
75、刪除存儲過程:drop procedure 存儲過程名 ---不加()
存在時才刪除:drop procedure if exists
[email protected]
Create procedure ordertotal(
In onumber int,
In taxable Boolean
Out ototal decimal(8,2)
)
Begin
Declare total decimal(8,2);
Declare taxrate int default 6;
Select sum(item_price*quantity)
For orderitems
Where order_num=onumber
Into total
If taxable then
Select total+(total/100*taxrate) into total
End if;
Select total into ototal;
End;
================++++++++++
Call ordertotal(2005.1.@total);
Select @total
77、遊標只能用於存儲過程,存儲過程執行完後,遊標就消失(因為它僅限於存儲過程)
78、存儲過程裏也可以建表,可以call其他的存儲過程
79、觸發器是MYSQL相應增刪改時自動執行的一條MYSQL語句(包括存儲過程裏位於begin end之間的語句)
80、只有表才支持觸發器,視圖不支持,臨時表也不支持
81、每個表最多支持6個觸發器(insert update delete 之前與之後)
82、MYSQL觸發器不能調用call,所以不能調用存儲過程
83、並非所有引擎都支持事務,MYISAM不支持事務,InnoDB就支持
84、事務可以用來管理insert update delete
85、若起來事務,想使修改生效,需要執行commit命令
86、Commit或rollback後,事務自動關閉
87、為了支持回退部分事務,需要使用“保留點”
88、MYSQL默認是自動提交更改,若不想自動提交,set autocommit =0即可
Autocommit是針對每個鏈接的,不是服務器
89、27章未看:全球化和本地化
若你對sql裏有多個or,那就改成用聯合union,這樣性能會大大提升
《MYSQL必知必會2