數據庫表結構設計,常見的數據庫管理系統( 三 )


  • 外鍵關聯
用處:外鍵關聯的作用保證多個數據表的數據一致性和完整性,建表時先有主表,后有從表;刪除數據表,需要先刪從表,再刪主表 。復雜場景不建議使用,實際開發中用的也不多 。
添加外鍵
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;
刪除外鍵
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ;四、表結構管理1、查看結構DESC ms_user_status ;SHOW CREATE TABLE ms_user_status ;2、字段結構
  • 添加字段
ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT '刪除時間' ;
  • 刪除字段
ALTER TABLE ms_user_status DROP COLUMN delete_time ;3、修改表名ALTER TABLE ms_user_center RENAME ms_user_info ;4、存儲引擎
  • 存儲引擎
SELECT VERSION() ; SHOW ENGINES ;MySQL 5.6 支持的存儲引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等 。一般默認使用InnoDB,支持事務管理 。該模塊MySQL核心,后續詳解 。
  • 修改引擎
數據量大的場景下,存儲引擎修改是一個難度極大的操作,容易會導致表的特性變動,引起各種后續反應,后續會詳說 。
ALTER TABLE ms_user_sso ENGINE = MyISAM ;5、修改編碼表字符集默認使用utf8,通用,無亂碼風險,漢字3字節,英文1字節,utf8mb4是utf8的超集,有存儲4字節例如表情符號時使用 。
  • 查看編碼
SHOW VARIABLES LIKE 'character%';
  • 修改編碼
ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4; 五、數據管理1、增刪改查
添加數據
INSERT INTO ms_user_sso ( user_id,sso_id,sso_code,create_time,update_time,login_ip,state)VALUES ('1','SSO7637267','SSO78631273612','2019-12-24 11:56:57','2019-12-24 11:57:01','127.0.0.1','1' );
更新數據
UPDATE ms_user_sso SETuser_id = '1',sso_id = 'SSO20191224',sso_code = 'SSO20191224', create_time = '2019-11-24 11:56:57',update_time = '2019-11-24 11:57:01', login_ip = '127.0.0.1',state = '1'WHERE user_id = '1';
查詢數據
一般情況下都是禁止使用 select* 操作 。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id = '1';
刪除數據
DELETE FROM ms_user_sso WHERE user_id = '2' ;不帶where條件,就是刪除全部數據 。原則上不允許該操作,優化篇會詳解 。TRUNCATE TABLE也是清空表數據,但是占用的資源相對較少 。
2、數據安全
  • 不可逆加密
這類加密算法,多用來做數據驗證操作,比如常見的密碼驗證 。
SELECT MD5('cicada')='94454b1241ad2cfbd0c44efda1b6b6ba' ;SELECT SHA('cicada')='0501746a2e4fd34e1d14015fc4d58309585edc7d';SELECT PASSWORD('smile')='*B4FB95D86DCFC3F33A3852714DC742C77504479D' ;
  • 可逆加密
安全性要求高的系統,需要做三級等保,對數據的安全性極高,數據在存儲時必須加密入庫,取出時候需要解密,這些就需要可逆加密 。
SELECT DECODE(ENCODE('123456','key_salt'),'key_salt') ;SELECT AES_DECRYPT(AES_ENCRYPT('cicada','salt123'),'salt123');上述數據安全的管理,也可以基于應用系統的服務(代碼)層進行處理,相對專業的流程是從數據生成源頭處理,規避數據傳遞過程泄露,造成不必要的風險 。

推薦閱讀