1. 程式人生 > >MySQL資料庫總結(二)

MySQL資料庫總結(二)

約束

主鍵約束:

  • 單欄位主鍵: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
	    }
}

表結構修改

  • 複製表結構
  1. create table 新表名 like 源表 ;  --只複製表結構
  2. create table 新表名 select * from 源表  ;  --複製表結構及資料
  • 修改表結構
  1. alter table 表名 drop 欄位名; --刪除欄位
  2. alter table 表名 add (欄位1 資料型別,欄位2 資料型別,..) ;  --增加欄位
  3. alter table 表名 change 舊欄位名 新欄位名 新資料型別;  -- 修改欄位名及型別
  4. alter table 表名 modify 欄位名 新資料型別 ;  --修改某個欄位的資料型別
  5. 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程式設計

  • 常量
  1. 字串常量,如select 'hello' as coll
  2. 數值常量:整數常量(2018),小數常量(2.18)
  3. 日期時間常量:時間常量('14:30:24'),日期時間常量('2018-7-25  14:30:24')
  4. 布林值:true 和false
  5. 二進位制: 0和1,如select b'11'
  6. 十六進位制:select X'41';
  7. null可用於各種欄位型別
  • 變數
  1. 系統變數(@@開頭)
  2. 使用者自定義變數:

           使用者會話變數(@開頭):會話期間一直有效,不能跨客戶機共享

            區域性變數

  • 運算子
  1. 算術運算子(加減乘除,%,div),其中div是求商時取整
  2. 比較運算子(大於小於這些外,還有!=,is null,in,like,between .. and.. )
  3. 邏輯運算子(not,!,and,&&,or,||,xor)
  4. 位運算子(&,|,^,~,>>,<<)
  • 流程語句
  1. 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

系統函式

  1. 數學函式,比如三角函式、對數函式等
  2. 字串函式,比如獲取字串長度:char_length(x),加密函式:MD5(x)等
  3. 型別轉換函式:convert(x,type)  ,  cast(x as type) ,注意,type是有固定的,比如可以是char ,但不能是varchar
  4. 系統資訊函式
  • 獲取當前服務版本號:version()
  • 獲取當前操作資料庫:database();
  • 獲取當前時間、日期: current_time() ; current_date();
  • 獲取當前日期時間:now(); 這裡需要注意一下,很多人潛意識中是date(),這是錯誤的
  • 獲取相隔天數:datediff(x1,x2), adddate(d,n); subdate(d,n);

還有其他常用函式如:Last_insert_id()、IP地址與整數轉換函式(點選可檢視我的另一篇博文)、uuid()等

臨時表

  • 儲存位置
  1. 內容臨時表
  2. 外存臨時表
  • 建立時機
  1. 自動建立臨時表
  2. 手動建立臨時表:create temporary table 表名...

 

感謝閱讀~