Mysql5.X重点难点速记
生活随笔
收集整理的這篇文章主要介紹了
Mysql5.X重点难点速记
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
瀏覽了一遍入門到精通,把常用的重要的又難記的內(nèi)容記錄稍微留了一下。基于版本為5.7,實(shí)際上5.x大部分都是通用的。
參考了許多資料,在此不一一感謝,知識(shí)在于分享,下面的內(nèi)容大家也可以自由轉(zhuǎn)載。
#數(shù)據(jù)庫創(chuàng)建 CREATE DATABASE yourdbname; --原句 CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; --一些常用選項(xiàng)#數(shù)據(jù)表創(chuàng)建 CREATE TABLE IF NOT EXISTS `tb1`(`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL,`author` VARCHAR(40) NOT NULL,`date` DATE DEFAULT '2017-12-25',PRIMARY KEY ( `id` ) )ENGINE=InnoDB DEFAULT CHARSET=utf8; --常用選項(xiàng),指定引擎和默認(rèn)字符字段編碼#數(shù)據(jù)類型 DECIMAL--以近似值保存的嚴(yán)格小數(shù)位數(shù),字段建立語法為DECIMAL(M,D)。 ·M是數(shù)字的最大數(shù)(精度)。其范圍為1~65(在較舊的MySQL版本中,允許的范圍是1~254),M 的默認(rèn)值是10。 ·D是小數(shù)點(diǎn)右側(cè)數(shù)字的數(shù)目(標(biāo)度)。其范圍是0~30,但不得超過M。--實(shí)際存儲(chǔ)時(shí)一共占M+2個(gè)字節(jié),M為總數(shù)據(jù)長度,D為小數(shù)的精度。如果替換NUMERIC數(shù)據(jù)類型,會(huì)自動(dòng)轉(zhuǎn)為DECIMAL類型進(jìn)行存儲(chǔ)。--在插入數(shù)據(jù)時(shí),首先會(huì)用精度函數(shù)進(jìn)行小數(shù)控制轉(zhuǎn)換,后實(shí)際存儲(chǔ)為字符串,這意味著DECIMAL(3,2)可存儲(chǔ)5字節(jié)的數(shù)字。也就是最小值為-9.99(length("-9.99")==5),最大值為99.99(length("99.99")==5) 一看便知的存儲(chǔ)范圍對比: DECIMAL(4,1) -999.9 到 9999.9 DECIMAL(5,1) -9999.9 到 99999.9 DECIMAL(6,1) -99999.9 到 999999.9 DECIMAL(6,2) -9999.99 到 99999.99 DECIMAL(6,3) -999.999 到 9999.999#關(guān)鍵字 REGEXP --使用正則表達(dá)式驗(yàn)證值,返回是否--示例:SELECT * FROM th1 WHERE tb1.column REGEXP('exp');#自定義函數(shù)--小例子:模擬隨機(jī)日期,時(shí)間范圍從1990年~2017年。 CREATE FUNCTION randomTime() RETURNS VARCHAR(20) RETURN CONCAT(FLOOR(1990 + (RAND() * 28)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(3 + (RAND() * 8)),2,0));--小例子:模擬隨機(jī)時(shí)間,00:00:00~23:59:59 CREATE FUNCTION randomTime() RETURNS VARCHAR(20) RETURN CONCAT(LPAD(FLOOR(0 + (RAND() * 23)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0),':',LPAD(FLOOR(0 + (RAND() * 59)),2,0));--小例子:隨機(jī)手機(jī)號(hào)(未嚴(yán)格處理真實(shí)手機(jī)號(hào)段,僅生成1開頭的11位隨機(jī)字符串) CREATE FUNCTION randomPhone() RETURNS VARCHAR(20) RETURN UNIX_TIMESTAMP()*10+floor(rand()*4000000000);#存儲(chǔ)過程--最佳適用范圍:因?yàn)?lt;b>性能需要</b>而進(jìn)行編寫,將眾多操作流程統(tǒng)一編寫在一個(gè)存儲(chǔ)過程中完成。如果采用外部語言進(jìn)行編寫,可能會(huì)因?yàn)镸ysql和語言之間的Socket傳輸而使性能損耗。--不應(yīng)該把業(yè)務(wù)都封裝為存儲(chǔ)過程,不同DB之間的存儲(chǔ)過程語法幾乎全無共通性,這會(huì)加大遷移難度。--練習(xí)的小例子:用上面的函數(shù)生成任意大數(shù)據(jù)表,包含id,phone,time三個(gè)字段 DROP PROCEDURE IF EXISTS `proc_inc_id`; DELIMITER ;; --防止定義語句中的;符號(hào)與實(shí)際輸入語句的;符號(hào)沖突 CREATE PROCEDURE `proc_inc_id`(IN start int, IN n int) BEGINDECLARE i int;DECLARE phone VARCHAR(20);DECLARE time VARCHAR(30);SET i = start;SET phone = randomPhone();SET time = CONCAT(randomDate(), ' ', randomTime());WHILE i <= n DOINSERT INTO `test` VALUES(i, phone, time);SET i = i + 1;SET phone = randomPhone();SET time = CONCAT(randomDate(), ' ', randomTime());END WHILE; END;; DELIMITER ; --還原語句分隔符--如何調(diào)用:call proc_inc_id(1, 100); --第一參數(shù)是起始值--生成結(jié)果:效果還不錯(cuò)~ id phone time 1 17353812960 1993-12-05 21:32:00 2 16627556306 2013-01-09 14:54:42 3 18411883028 2015-02-10 09:12:44 4 15776347886 2004-02-03 03:20:21 5 18166751923 2009-02-08 03:36:36 6 16064327817 1998-10-03 19:12:26 7 17560492889 2008-07-09 04:41:51 8 16349305149 2014-05-06 01:01:52 9 16755050365 1998-05-10 07:04:18 10 16495763250 2011-10-07 12:57:17#性能優(yōu)化:索引的重要性(100W數(shù)據(jù)量,上下分別為加索引之前和加索引之后) mysql> select * from test order by phone limit 1; +--------+-------------+---------------------+ | id | phone | datetime | +--------+-------------+---------------------+ | 796917 | 15147847086 | 2012-01-08 11:25:34 | +--------+-------------+---------------------+ 1 row in set (0.40 sec)mysql> select * from test order by phone limit 1; +--------+-------------+---------------------+ | id | phone | datetime | +--------+-------------+---------------------+ | 796917 | 15147847086 | 2012-01-08 11:25:34 | +--------+-------------+---------------------+ 1 row in set (0.01 sec) <-冷啟動(dòng),后續(xù)就是0.00了往后為主從、集群的配置,此處不具體實(shí)踐。
627/627
轉(zhuǎn)載于:https://my.oschina.net/u/2953734/blog/1594685
總結(jié)
以上是生活随笔為你收集整理的Mysql5.X重点难点速记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue.js 2.0 官方文档学习笔记
- 下一篇: ecshop百度编辑器远程下载无后缀的图