作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/
僅僅是看一些書是零零散散記下的,給自己備忘而已。建議去看專業網站的筆記。
1.主鍵的值必須是唯一的,並且不可為空,這可以提高MySQL從多個表中取得資料或者取得指定索引值對應的行的速度。MySQL通過一個特殊的稱為Index索引的資料結構做到這一點,Index是找到一條記錄的捷徑,就像圖書館的卡片目錄。
2.查看錶的列定義使用describe命令.
3.整數列大小預設是11.
4.Insert時引號的使用:數字數值、函數和NULL不要用,字串數值、時間、日期則要用引號括起來。
5.使用alter修改表定義時,即使沒有改變列的資料類型,列的定義仍然必不可少。
6.在使用select語句時,你應該養成TABLE.COLUMN方式來引用列,這樣可以避免混淆。
7.結果排序用select XX from YY order by zz;
8.使用自然串連natural join可以避免輸入很長的命令:MySQL可以把兩個表中的同名域串連起來。可以使用左串連方式將表串連起來。
9.join on也是串連,但是需要指定要進行串連的列。SELECT * FROM books JOIN authors ON (books.title_id = authors.title_id);
10.使用別名可以將長的表名換成較短的,還可以讓你在同一個查詢中兩次引用同一個表而區分你究竟是引用的第一個還是第二個。
SELECT * FROM books AS b,authors AS a WHERE b.title_id = a.title_id;
11.SQL語句特點:做什麼+ 大概從哪+具體從哪,例如select from * where title_id=1;
12.尋找:SELECT * FROM authors WHERE author LIKE "%b%"; 百分比符號是萬用字元,表示一個或多個。而底線_則表示一個字元。
12.通過包含另外一張表的主鍵而形成的表之間的串連被稱為外鍵關係。
13.資料庫的關係有三種:一對一、一對多、多對多。以一個線上書店為例,使用者和其郵寄地址(假設只能設定一個地址)時一對一的關係,而圖書的類型與具體書籍則是一對多的關係,使用者對書則是多對多的關係。多對多的關係被轉換為兩個一對多關聯性的變換表才能在資料庫中體現出來。
14.正常化:
理清資料之間的關係並找出組織資料的最有效方式的過程被稱作正常化。要正常化一個資料庫,需要從最基礎的規則開始,分為三個階段——第一範式、第二範式、第三範式,後者必須在前者完成的基礎上才可得以進行。
第一範式:解決資料在同一行內的冗餘,要求所有的表不能重複的包含同樣的資料列,所有的列中只能包含一個值,必須存在一個主鍵可以唯一指定一行資料,主鍵可以是一列或者多列,這取決於需要多少列才能唯一指定一行資料。
第二範式:解決資料在列中的冗餘,要求不包含重複數值的列,這樣的列要在其單獨的表中,使用原有表中的主鍵來引用。
第三範式:滿足前兩個範式後第三範式是可選滿足的條件,要求你找出表中不完全依賴於主鍵而依賴於其它域的資料,將這些資訊單獨放在一個表中。但這樣的結果會產生太多的表,所以正常化也是需要把握度。
15.備份資料庫:mysqldump -u root -p store > my_backup_of_store.sql
備份其中一個表:mysqldump -u root -p store authors > authors.sql
完全備份一個資料庫:mysqldump -u root -p --all-databases > my_backup.sql
建立一個空的副本:mysqldump -u root -p --no-data store > structure.sql
只備份資料庫資料而不備份資料庫結構:mysqldump -u root -p --no-create-info store > data.sql
註:定期備份是best practise
16.恢複:
mysql -u root -p < my_backup.sql
要是有選擇性的備份,則需要使用-D,mysql -u root -p -D store < my_backup.sql
17.匯入:
mysqlimport -u root -p --fields-terminated-by=',' store books.txt
18.索引:
Index的資料是經過排序的,資料群組織方式對查詢進行了最佳化。我們要決定對哪些資料域進行索引,每個索引在儲存上都是一個單獨的資料檔案。索引必須先定義後使用。使用索引的好處總結起來兩點:匹配索引列的查詢可以非常快,檢查索引值的唯一性非常快,壞處在於對被索引的表的插入和刪除操作會比較慢,而且需要額外的儲存空間。
建立索引:CREATE UNIQUE INDEX authind ON authors (author) ;可以為多個列建立索引。適合用來索引的列是那些有可能被用在where子句中的列,特別是如果你知道某些特定列的組合會被用到時,就可以為這些列建立一個多列索引。
19.group by指定使用哪一列或者哪幾列進行分組。
20.concat可以將多個域串連起來在結果中表示。SELECT CONCAT(title,' has ',pages,' pages.') FROM books;
+----------------------------------------+
| concat(title,' has ',pages,' pages.') |
+----------------------------------------+
| Linux in a Nutshell has 476 pages. |
| Classic Shell Scripting has 256 pages. |
+----------------------------------------+
21.使用預定義分隔字元串連:SELECT CONCAT_WS(',',author_id,title_id,author) FROM authors;
+------------------------------------------+
| CONCAT_WS(',',author_id,title_id,author) |
+------------------------------------------+
| 1,1,Ellen Siever |
| 2,1,Aaron Weber |
| 3,2,Arnold Robbins |
| 4,2,Nelson Beebe |
+------------------------------------------+
22.字串長度:
SELECT CONCAT(title,' has ',LENGTH(title), ' characters.') FROM books;
+-----------------------------------------------------+
| CONCAT(title,' has ',LENGTH(title), ' characters.') |
+-----------------------------------------------------+
| Linux in a Nutshell has 19 characters. |
| Classic Shell Scripting has 23 characters. |
+-----------------------------------------------------+
23.字串填充
SELECT LPAD(title,30,'.') FROM books;
+--------------------------------+
| LPAD(title,30,'.') |
+--------------------------------+
| ...........Linux in a Nutshell |
| .......Classic Shell Scripting |
+--------------------------------+
24.事務
強制資料庫把幾個更改操作看做一個工作單元,要麼全部成功,要麼全部失敗。若使用儲存引擎支援事務,比如InnoDB或者BDB,可以使用“start transaction”命令開始一個事務,事物結束時通過commit提交更改或rollback取消更改來完成。
作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/