MySQL資料庫總結(二)
阿新 • • 發佈:2018-11-19
約束
主鍵約束:
- 單欄位主鍵:student_no char(11) primary key;
- 多欄位主鍵:primary key(欄位1,欄位2...) ---聯合主鍵,確保唯一性
自增:
- auto_increment
主鍵生成策略
- 主鍵自增
- 使用UUID
- 時間戳
- ....
主鍵選擇自增好還是UUID好?
使用自增長做主鍵的優點:
1、很小的資料儲存空間
2、效能最好
3、容易記憶
使用自增長做主鍵的缺點:
1、如果存在大量的資料,可能會超出自增長的取值範圍
2、很難(並不是不能)處理分散式儲存的資料表,尤其是需要合併表的情況下
3、安全性低,因為是有規律的,容易被非法獲取資料
使用UUID做主鍵的優點:
1、它是獨一無二的,出現重複的機會少
2、適合大量資料中的插入和更新操作,尤其是在高併發和分散式環境下
3、跨伺服器資料合併非常方便
4、安全性較高
使用UUID做主鍵的缺點:
1、儲存空間大(16 byte),因此它將會佔用更多的磁碟空間
2、會降低效能
3、很難記憶
拓:UUID生成系統主鍵
package test; import java.util.UUID; /** * 使用uuid自動生成主鍵 * @author Legend * 2018年7月24日 */ public class TestUUID { public static void main(String[] args) { UUID uuid = UUID.randomUUID(); System.out.println(uuid);//e7375574-d87f-43b0-93f5-5915d58d960f String dxmbid = uuid.toString().replaceAll("-", ""); System.out.println(dxmbid);//e7375574d87f43b093f55915d58d960f System.out.println(dxmbid.length());//32 } }
表結構修改
- 複製表結構
- create table 新表名 like 源表 ; --只複製表結構
- create table 新表名 select * from 源表 ; --複製表結構及資料
- 修改表結構
- alter table 表名 drop 欄位名; --刪除欄位
- alter table 表名 add (欄位1 資料型別,欄位2 資料型別,..) ; --增加欄位
- alter table 表名 change 舊欄位名 新欄位名 新資料型別; -- 修改欄位名及型別
- alter table 表名 modify 欄位名 新資料型別 ; --修改某個欄位的資料型別
- alter table 舊錶名 to 新表名 ; --修改表名
索引
參考網址:https://blog.csdn.net/w_xuexi666/article/details/53897007
缺點:佔用空間,維護成本高(增刪改查)
原則:
- 放在where後效率最高,也可以放在select後;
- 離散性高的列;
- 模糊查詢時候最好交給搜尋引擎
注意:
- 使用索引時,SQL語句中的條件前面不能有%,正確如 :where a like 'xxx%';
- 主鍵建立是自動建立索引;
表資料增刪改查操作命令
這個相對比較基礎就不詳細講,可以參考一下:https://blog.csdn.net/wxw20147854/article/details/55549296
限制記錄行數
- Distinct:過濾重複記錄,放在select後面
- Limit: select 欄位列表 from 表名 limit [start,]length;
Sql程式設計
- 常量
- 字串常量,如select 'hello' as coll
- 數值常量:整數常量(2018),小數常量(2.18)
- 日期時間常量:時間常量('14:30:24'),日期時間常量('2018-7-25 14:30:24')
- 布林值:true 和false
- 二進位制: 0和1,如select b'11'
- 十六進位制:select X'41';
- null可用於各種欄位型別
- 變數
- 系統變數(@@開頭)
- 使用者自定義變數:
使用者會話變數(@開頭):會話期間一直有效,不能跨客戶機共享
區域性變數
- 運算子
- 算術運算子(加減乘除,%,div),其中div是求商時取整
- 比較運算子(大於小於這些外,還有!=,is null,in,like,between .. and.. )
- 邏輯運算子(not,!,and,&&,or,||,xor)
- 位運算子(&,|,^,~,>>,<<)
- 流程語句
- Begin--end
declare @r int ,@s int ,@t int
select @r=2,@s=3
print @r
while @r <5
begin
select @t=100*@[email protected]
print @t
select @[email protected]+2
Select @s=1
end
系統函式
- 數學函式,比如三角函式、對數函式等
- 字串函式,比如獲取字串長度:char_length(x),加密函式:MD5(x)等
- 型別轉換函式:convert(x,type) , cast(x as type) ,注意,type是有固定的,比如可以是char ,但不能是varchar
- 系統資訊函式
- 獲取當前服務版本號:version()
- 獲取當前操作資料庫:database();
- 獲取當前時間、日期: current_time() ; current_date();
- 獲取當前日期時間:now(); 這裡需要注意一下,很多人潛意識中是date(),這是錯誤的
- 獲取相隔天數:datediff(x1,x2), adddate(d,n); subdate(d,n);
還有其他常用函式如:Last_insert_id()、IP地址與整數轉換函式(點選可檢視我的另一篇博文)、uuid()等
臨時表
- 儲存位置
- 內容臨時表
- 外存臨時表
- 建立時機
- 自動建立臨時表
- 手動建立臨時表:create temporary table 表名...
感謝閱讀~