1、當乙個表的主鍵是另乙個表的外來鍵的時候,該主鍵字段屬性是不可變更的。
解決方法:set foreign_key_checks = 0; //取消外來鍵約束 再去更改主鍵屬性。
更改完後再 set foreign_key_checks = 1; //啟用外來鍵約束 即可。
2、char 與 vachar:()中均是字元長度 utf-8中1個漢字字元=3個位元組 其他編碼大多是1個漢字字元=2位元組
char最大長度255字元(utf-8) 最多存放256個位元組
varchar最大長度21845字元(utf-8) 最多存放65535個位元組
char速度快但浪費空間
varchar節省空間但是慢
3、select 子句是語句中最後被執行的
4、select distinct cust_id from account; //distinct 產生無重複結果集首先要對資料進行排序,因此相當耗時。盡量避免使用。
5、檢視:虛擬表,不擁有任何資料。當對檢視查詢時,查詢會被繫結到檢視定義上,產生最終被執行的查詢。(感覺就像乙個懶執行的子查詢)
eg:create
view employee_vw as
select emp_id, fname, lname,year(start_date) start_year from
employee;
select emp_id, start_year from employee_vw;
6、使用null的時候應該注意:<1>表示式可以為null但是不能=null<2>兩個null彼此之間不能判斷相等
7、連表時 from 子句中各表出現的順序並不重要,因為最終連線的順序是由優化器決定的。
sql是非過程化的語言,只需要描述要獲取的資料庫物件,如何以最好的方式執行查詢是有資料庫伺服器負責的。
伺服器會根據收集的資料物件資訊,在多個表中選擇乙個表作為開始點(驅動表),然後決定其他標的順序。
分組
8、當查詢全都是聚合的時候,即使不使用group by,也會隱式分組。但如果查詢 聚合+其他字段 時,必須使用group by顯式分組
9、分組過濾條件:
索引
10、無索引時,查詢會全表逐行掃瞄返回結果集
有索引時,會根據條件直接查詢索引列,返回滿足條件的索引行資料結果集
11、mysql中將索引看做是表的屬性(可選部件),因此新增/刪除索引等操作 為 alter table table_name add index index_name (key_name)
其他資料庫一般將索引作為獨立的模型物件,使用 create index index_name on table_name (key_name)的方式建立索引
12、優化器會選擇是否使用索引(資料量少則會不使用),並且會選擇使用哪個索引(當多個索引的時候)。
13、唯一索引:兩個功能:索引功能 + 索引列中的列值不可重複功能。
14、多列索引:如果建立了多列索引,必須注意哪一列作為第一列,哪一列作為第二列。前後順序位置很重要!
eg: alter table employee add index emp_names_idx (lname, fname); 該索引在兩種查詢中是有用的,1、指定姓名 2、指定姓氏。
如果只是指定名字的查詢,則又會逐行掃瞄。因為索引是 姓氏+名字 的組合 ,單獨查名字是無法有效利用索引的
15、索引型別:
b-tree索引:適合表中資料行多且索引列中值很少重複的情況。eg:比如搜尋人名就比較適合。但是如果對於搜尋只有幾種型別的商品,就不適合了。因為如果某一種型別商品比其他商品更受歡迎,那麼二叉樹就難以保持平衡。這樣索引效率就會很低下。
bitmap索引(oracle):適合表中資料行多且索引列中值很多重複的情況。eg:與上相反。因為如果行多且索引列的值很少重複的話,伺服器則需要維護太多的點陣圖,導致索引效率低下。
文字索引:
16、索引屬性說明:show index from employee \g; 拿其中乙個索引舉例。
table: employee //表名
non_unique: 1 //
key_name: fk_e_emp_id //索引名
seq_in_index: 1 //
column_name: superior_emp_id //欄位名
collation: a //
cardinality: 18 //索引列去重值個數 可以估算下是否適合用b-tree索引
sub_part: null //
packed: null //
null: yes //
index_type: btree //索引型別
comment: //
index_comment: //
17、
Linux 學習指南
第乙個話題,嵌入式學習的路徑有哪些.這是乙個初學者常問的問題,也是初學者問嵌入式該如何入門的根源.我感覺有兩個方面,偏硬和偏軟.我不認為嵌入式開發軟體佔絕對比重,相反,軟硬體都懂,才是嵌入式高手所應該追求的,也是高手的必由之路.硬體道路 第一步 pcb設計,一般為開發板的電路裁減和擴充,由開發板原理...
Perl學習指南
首先,請考慮如下問題 如果你學過其他語言,那就可以從學習 perl 的語法開始 perl語言入門 或者是從 perl 的自帶文件。當你對 perl 的語法了解後,嘗試書中的例子,試著寫一些簡單的程式。很快你就會發現 perl 和你以前學過的語言類似。如果你是乙個有經驗的程式設計師,你可能直接會從讀程...
SAP HANA 學習指南
sap hana 學習指南 第一部分 sap hana 概覽 第二部分 sap hana資料庫體系結構 2.1 體系結構概覽 2.2 記憶體結構 2.3 sap hana 多版本併發控制 sap hana mvcc 2.4 列儲存 column store 2.5 行儲存 row store 2.6...