這篇文章為大家帶來了關於mysql資料庫的相關知識,主要整理了資料庫基礎的一下知識點,包括索引、語法順序、執行順序、預存程序等等相關問題,希望對大家有幫助。
推薦學習:mysql教學
)
整個事務中的所要操作要麼全部提交成功,要麼全部失敗回滾。)
保證資料庫中的資料操作之前和操作之後的一致性。 (例如用戶多個帳戶之間的轉賬,但是用戶的總金額是不變的))
隔離性要求一個交易對資料庫中數據的修改,在未提交完成前對於其它事務是不可見的。 (即事務之間要串行執行))
持久性是指一個事務一旦被提交了,那麼對資料庫中的資料改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會遺失提交交易的操作。SQL標準定義了四個隔離:(下面隔離性是由低到高,並發性由高到低)
取得的資料都不能被修改,這樣就可以避免一個事務前後讀取不一致的情況。但是沒有辦法控制幻讀,因為這個時候其他事務不能更改所選的數據,但是可以增加數據;
未提交讀取(read uncommitted) _ 幻讀
未提交讀取(read uncommitted) 檢測可能 幻讀
⃀⃀ 可能 可能
可重複讀取(repeatable read) 不可能 不可能 可能
可串行化(serializable) 不可能 不可能 不可能被提交總結# ,但會造成不可重複讀—>可重複讀取解決讀取結果前後不一致的情況,但是造成幻讀(以前沒有,現在有)—>可串行化解決了幻讀,但是增加很多範圍鎖,可能會造成鎖定逾時;
(2)唯一性索引(索引列的值必須唯一,但允許有空值。)
(3)主鍵索引(一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引。)
(4)組合索引
(5)聚集索引按照每張表的主鍵構造一顆B 樹,並且葉節點中存放著整張表的行記錄數據,因此也讓聚集索引的葉節點成為數據頁。
(6)非聚集索引(輔助索引)(頁節點不存放一整行記錄)。
(2)Like查詢是以%開頭,例如SELECT * FROM mytable WHEREt Name like'�min';
(3)如果列類型是字串,那一定要在條件中使用引號引起來,否則不會使用索引;
MyISAM,
InnoDB,
Memonry三個常用
MySQL引擎類型比較:
索引 MyISAM索引 InnoDB索引 Memonry索引
B-tree索引 支援 ⃀指標⃀⃀⃀支援 不支援 支援
R-Tree索引 支援 不支援 不支援
Full-text索引 不支援 暫不支援 暫不支援 暫不支援#pac ,由於二元樹的深度過大而造成I/O讀寫過於頻繁,進而導致查詢效率低。因此採用多路樹結構,B樹的各種操作能使B樹保持在較低的高度。
B樹又叫平衡多路查找樹,一棵m階的B樹特性如下:
即當sql中存在下面的關鍵字時,它們要保持這樣的順序:
##select[distinct ]、from、join(如left join)、on、where、group四、Mysql執行順序 即在執行時sql依照下面的順序執行:by、having、union、order by、limit;
from、on、join、where、group by、having、select、distinct、union、order by例如:group by要和聚合函數一起使用,
select a.Customer,sum(a.OrderPrice) from orders a where a.Customer=’Bush’ or a.Customer = ‘Adams’ group by a.Customer;
select u.uname,a.addr from lm_user u inner join lm_addr a on u.uid = a.uid;
select from where同樣可以實現
select u.uname,a.addr from lm_user u, lm_addr a where u.uid = a.uid;
delimiter $$ create procedure procedure_bill() comment '查询所有销售情况' begin select billid, tx_time, amt from lm_bill; end $$ delimiter ;
call procedure_bill();
show procedure status like 'procedure_bill';
步驟1:建立三張資料表Student ,Course,Stu_Cour
/**学生表*/ CREATE TABLE Student ( stu_id INT AUTO_INCREMENT, NAME VARCHAR(30), age INT , class VARCHAR(50), address VARCHAR(100), PRIMARY KEY(stu_id) ) /*学生课程表*/ CREATE TABLE Course( cour_id INT AUTO_INCREMENT, NAME VARCHAR(50), CODE VARCHAR(30), PRIMARY KEY(cour_id) ) /**学生课程关联表*/ CREATE TABLE Stu_Cour( sc_id INT AUTO_INCREMENT, stu_id INT , cour_id INT, PRIMARY KEY(sc_id) )
/*添加外键约束*/ ALTER TABLE Stu_Cour ADD CONSTRAINT stu_FK1 FOREIGN KEY(stu_id) REFERENCES Student(stu_id); ALTER TABLE Stu_Cour ADD CONSTRAINT cour_FK2 FOREIGN KEY(cour_id) REFERENCES Course(cour_id);
;
alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id);
是非事務安全型的,而
InnoDB是事務安全型;
鎖定的粒度是表格級鎖定,而
InnoDB支援行級鎖定;
支援全文本索引,而
InnoDB不支援全文索引
相對簡單,所以在效率上優於
InnoDB,小型應用可以考慮使用
MYISAM;
表是保存成檔案的形式,在跨平台的資料轉移中使用
MYISAM儲存會省去不少的麻煩;
表比
MYISAM表更安全,可以在保證資料不在遺失的情況下,切換非交易表到交易表;
MYISAM
管理非事務表,它提供高速儲存和檢索,以及全文搜尋能力,如果應用程式中需要執行大量的select
查詢,那麼MYISAM
是更好的選擇。InnoDB
用於事務處理應用程序,具有眾多特性,包括ACID
事務支援。如果應用程式中需要執行大量的insert
或update
操作,則應該使用innodb
,這樣可以提高多用戶並發操作的效能。目前關聯式資料庫有6種範式:第一個範式{1NF},第二範式{2NF},第三範式{3NF},巴斯—科德範式{BCNF},第四範式{4NF},第五範式{5NF,又稱完美範式}。滿足最低要求的範式是第一個範式。在第一範式的基礎上進一步滿足更多規範要求的稱為第二範式{2NF},其餘範式依次類推,一般來說,資料庫只需滿足第三範式(3NF)就OK了。
範式:
推薦學習:mysql影片教學
以上是MySQL資料庫基礎知識點儲備(整理總結)的詳細內容。更多資訊請關注PHP中文網其他相關文章!