9.高級選擇
9.1 選擇最大值和最小值
GREATEST() //返回列表中最大值
LEAST() //返回列別中最小值
9.2 IF
語法
SELECT IF (condition, return_if_true, return_if_false)
10.執(zhí)行FULLTEXT 查找
10.1 ALTER 語法
ALTER TABLE tb_name CLAUSE
ALTER的子句[CLAUSE]
ADD COLUMN col_name TYPE //添加新列
CHANGE COLUMN c c TYPE //更改列的數據類型和屬性
ADD INDEX
DROP COLUMN
DROP INDEX
RENAME TO //更改表名
10.2 使用\G結尾替代分號,將以縱列的方式返回表格。
10.3 語法
//添加索引
ALTER TABLE tb_name ADD FULLTEXT (col_name1,col_name2,...) //這是在表創(chuàng)建好之后添加FULLTEXT索引,也可以直接在創(chuàng)建表的時候添加
//使用FULLTEXT查找
SELECT * FROM tb_name WHERE MATCH (col_name) AGAINST (terms)
//如
10.4 注意事項
FULLTEXT 查找只能在MyISAM表類型中使用;
SHOW ENGINES可以查看數據庫支持的表類型(或者存儲引擎)。
MATCH()括號中的列名必須和添加索引的列保持一致,不能是單獨中的一個;
10.5 布爾型FULLTEXT查找
語法
SELECT * FROM tb_name WHERE MATCH(col_name) AGAINST('terms' IN BOOLEAN MODE)
運算符
+ //必須存在于每個匹配中
- //絕對不會存在于任何匹配中
~ //如果存在,則降低一個等級
* //通配符
< //降低
> //提升單詞重要性
"" //精確匹配
() //創(chuàng)建子表達式
如:
SELECT * FROM tb_name WHERE
MATCH(col_name) AGAINST('>"Web develop" +html ~JavaScript' IN BOOLEAN MODE);
11. 執(zhí)行事務
事務是指在一次會話中執(zhí)行的一系列語句。如果其中任何一個語句執(zhí)行失敗,將撤銷所有的執(zhí)行語句。具有一定的保護性。
START TRANSACTION;
//執(zhí)行任何語句...
//如果沒有發(fā)生錯誤,
COMMIT; //在commit之后,之前所做的所有操作才會永久保存;
//如果其中任何一個語句執(zhí)行失敗,將撤銷所有的執(zhí)行語句
//還可以手動撤銷
ROLLBACK [TO SAVEPOINT savepoint_name];
//創(chuàng)建保存點 SAVEPOINT savepoint_name;
12.數據庫加密
12.1 SHA1()&SHA2()
函數將會返回一個長度為40的散列數據,可以將存儲的字段類型設置成 VARCHAR(40);
這樣的密碼被保存后無法還原查看。
SHA2()需要MySQL5.5或者更高版本的支持。
12.2 AES_ENCRYPT() & AES_DECRYPT()
函數返回的是長度為16的二進制格式數據,人類不可讀??梢詫⒋鎯Φ淖侄晤愋驮O置成 VARBINARY(16);
語法格式: AES_ENCRYPT('password', salt) //salt為字符串,用作隨機加密,解密時需使用同樣的salt,同??梢詫alt同樣存在數據庫中。
加密舉例://pin列保存的是用戶的密碼,nacl保存的是salt字符串。
UPDATE customers SET nacl = SUBSTRING(MD5(RAND()), -20)
WHERE customer_id =1;
UPDATE customers SET pin = AES_ENCRYPT('1234', nacl)
WHERE customer_id =1;
解密:
SELECT customer_id, AES_DECRYPT(pin, nacl) AS pin
FROM customers WHERE customer_id =1;