mysql權威指南學習筆記
1,mysql的標示符最多就64個字符 www.2cto.com
2,drop table table1,table2,table3;刪除多個table的時候用,號分隔開,為了避免不必要的錯誤,我們盡量用
DROP TABLE IF IXISTS table1;
3,關於varchar,雖然他是可變類型,但是他的最大也是255個字符,經測試他最多是255個字符,510個漢字
但是其中如果你設置了具體的varchar的長度就不能超過這個長度了,這時候我定義了一個char類型的數據,查看他的數據的長度
還是會隨之變化的,不明白的地方是用varchar類型有在節省空間嗎?5版本以後的MySQL都是可變的數據類型了嗎?
下面的數據表格就解決了我這個疑問:存儲相應的字節所需的存儲空間
數據類型 存儲144字節的字符串 存儲30個字符的字符串 最大字符串長度
char(150) 150 150 255
varchar(150) 145 31 255
tinytext(150) 145 31 255
text(150) 146 32 65535
mediumtext(150) 147 33 16777215
longtext(150) 148 34 4294967295
4,創建索引的兩種方式
mysql> create table test_index(id int not null primary key auto_increment,name c
har(54) not null, index index1 (id,name),unique index index2(name));
create index index3 on test_index(id);
5,查詢並且插入數據可以直接這樣做:
insert into user (name) select name from user limit 1;
只要讓前後的數據匹配就可以了
同時可以在select裡面使用各種限制語句
insert into user (name) select name from user order by id desc limit 1;
6,last_insert_id()函數的使用:
update user set id = last_insert_id(id+1) where id = 19;
7,auto_increment=9;關於主鍵遞增的問題,可以再auto_increment後面直接添加相應的數值,實現在這個數值上的遞增
8,MySQL的運算符包括+-*/=<>!=<><=>=
9,between and 和in與僅用基礎運算符實現的同樣的效果性能要好
10,MySQL的正則用regexp表示,可以的regexp替換我們所熟知的like語句
模式 描述
. 匹配任意單個字符
[] 匹配括號內的任意字符
* 匹配該符號前面的字符的零個或者多個
^ 跟在該符號後面的內容必須是值的開頭
$ 跟在該符號前面的內容必須是值的結尾
11,計算從哪天到哪天的具體的天數
select to_days(now())-to_days('2010-12-19');
12,MySQL提供了日期格式的函數date_format()函數
13,MySQL的一些函數:soundex可以檢查字符串的讀音,trim可以去掉多余的空格,這樣可以控制登陸的時候的‘空格’輸入
14,(優化)最大程度的減少數據庫的連接和斷開,推薦使用連接池
www.2cto.com
15,(優化)索引的使用,通常在in,between,等中使用索引,在使用公式的查詢中不使用索引,在like語句用%在前面不使用所
以,只有單獨在後面的時候才使用索引,如果過多的使用索引增加的維護開銷,但是適當的再where地方的多出現字段使用索
引,大大的提高了查詢的效率;對於嵌套查詢的語句的查詢次數是兩個子語句查詢次數的乘積,這樣大大的增加了查詢效率,
所以適當的增加索引大大的提高了效率;
16,(優化)服務器優化,配置,可能會影響到其他的應用程序:
table_cache 控制MySQL表高速緩存的大小,增加這個參數可以使MySQL有更多可以同時打開的表,無需打開和關閉文件
key_buffer_size
控制用來保存索引的緩沖區大小,增加這個參數能夠索引的創建和修改,可以使MySQL內存中保存更多的索引 www.2cto.com
17,(優化)靜態的MySQL版本比動態的版本要快
18,(安全)常用的數據庫角色創建分類
角色 環境 特權 描述
developer 開發 delete,insert,select,update developer編寫應用代碼,他們的特權應該只涉及正在開發的應用
architect 開發 alter,create,delete,drop,index,insert,select,update architect為特定的應用設計數據庫結構,他們的特權應當只涉及正在涉及的應用
QA 測試 delete,insert,select,update QA負責測試應用是否正常工作,他們需要與應用用於相同的特權,以支持產品環境的應用
immigrator 測試,試運行,產品
alter,create,delete,drop,index,insert,select,update
immigrator升級數據庫結構,以反映開發過程中所需要的改動。
emigrator 開發,測試,試運行 select emigrator將數據庫模式從一個環境中抽取出來,從而可以移植到另一個環境中
DBA DBA 全部 DBA管理MySQL的安裝,運行
19,(安全)grant(特權,對象,用戶)和revoke授予特權命令和收回特權
特權:alter,create,delete,drop,file(訪問服務器文件),index(創建,修改,刪除索引),insert,process(授予用戶訪問MySQL進程線程特權,提供show processlist和kill sql等語句),reload,select,shutdown,update,usage(建立連接),privileges(所有特權,通常使用all替代)
對象:數據庫名.表名,或者當前數據庫下面的表名,或者*表示當前數據庫下面的所有表,或者*.*指的是所有數據庫的所有表
用戶:具體的用戶後面加上@然後寫上具體的訪問路徑,如果是隨意的就是"%",如果不是就寫清楚具體的地址 www.2cto.com
具體的實例:
grant:grant select on yb.staff to primos;
revoke:revoke select on yb.staff from primos;
20,(安全)在做登陸驗證的時候,盡量不要把密碼取出來以免洩露,而是如下的直接比較,同時也可以用password()方法
select id from user where name = "user" and password = password("password");
從而避免口令在不同的緩沖區內復制傳遞
21,(設計)實體(第一范式1NF,第二范式2NF,第三范式3NF),數據模型,
對於數據庫建立表的關系我們可以通過具體的cd來表示,例子源於本書(第七章)
22,(應用)事務隔離層:
名稱 描述
READ UNCOMMITTED 事務允許髒,非重復和幻想讀取
COMMITTED 事務不允許髒讀取,但允許非重復的幻象讀取
REPEATABLE READ 事務允許提交的重復讀取和幻象讀取,非重復讀取是不允許的
SERIALIZABLE 事務只允許提交的重復讀取,幻象讀取是不允許的
23,UDF函數,主要還是依賴C進行編程
24,如果希望與ASNI兼容,則應該一直使用單引號引字符串
25,類型轉換
指定varchar列的大小少於四個字符時,他被轉換為char
只要表中至少有一列是變長的,則所有長度大於三個字符的char列都將被轉換為varchar