mysql
優(yōu)化數(shù)據(jù)庫設計
第一范式(1st NF)
-
第一范式的目標是確保每列的原子性
定義:數(shù)據(jù)庫表中的所有字段都是單一屬性,不可再分的偿警。這個單一屬性是由基本的數(shù)據(jù)類型所構(gòu)成的,如整數(shù)勺拣,浮點數(shù)髓堪,字符串,等表谊;
換句話說 第一范式要求數(shù)據(jù)庫中的表都是二維表。
如果每列都是不可再分的最小數(shù)據(jù)單元(也稱為最小的原子單元)盖喷,則滿足第一范式(1 NF)爆办;
第二范式(2nd NF)
- 第二范式要求每個表只描述一件事情;
- 定義:數(shù)據(jù)庫的表中不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的部分函數(shù)依賴课梳。
- 部分函數(shù)依賴是指存在著組合關(guān)鍵字中的某一關(guān)鍵字決定非關(guān)鍵字的情況距辆。
- 換句話說:所有單關(guān)鍵字段的表都符合第二范式。
第三范式(3nd NF)
- 如果一個關(guān)系滿足2NF暮刃,并且除了主鍵以外的其他列都不傳遞依賴于主鍵列跨算,則滿足第三范式(3 NF);
- 定義:第三范式是在第二范式的基礎之上定義的椭懊,如果數(shù)據(jù)表中不存在非關(guān)鍵字段對任意候選關(guān)鍵字段的傳遞函數(shù)則符合第三范式诸蚕。
1.什么是數(shù)據(jù)庫?
- 數(shù)據(jù)庫(database,簡稱DB):是按照數(shù)據(jù)結(jié)構(gòu)來組織,存儲和管理數(shù)據(jù)的倉庫挫望。
- 數(shù)據(jù)庫管理系統(tǒng)(Databse Management System,DBMS):是指數(shù)據(jù)庫系統(tǒng)中對數(shù)據(jù)進行管理的軟件系統(tǒng)。
2.什么是MySQL?
MySQL一個開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)
-
MySQL由瑞典MySQL AB公司開發(fā)
目前屬于Oracle旗下產(chǎn)品
SQL語言是用于訪問數(shù)據(jù)庫的最常用的標準化語言
3.MySQL常用命令
-
mysqladmin命令用于修改用戶密碼
命令格式:
mysqladmin命令格式:
mysqladmin -u用戶名 -p舊密碼 password
輸入新密碼:
確認新密碼:
show databases; 命令用于顯示所有數(shù)據(jù)庫
use 數(shù)據(jù)庫名狂窑;使用某個數(shù)據(jù)庫(或切換到某個數(shù)據(jù)庫)
-
select命令:
此命令用于顯示當前連接(選擇)的信息
select database(); 顯示當前連接的數(shù)據(jù)庫
select version(); 顯示當前服務器版本
select now(); 顯示當前日期時間
select user(); 顯示當前用戶
4.操作數(shù)據(jù)庫
-
創(chuàng)建數(shù)據(jù)庫是在系統(tǒng)磁盤上劃分一塊區(qū)域用于數(shù)據(jù)的存儲和管理
創(chuàng)建數(shù)據(jù)庫的語法格式:
create database 數(shù)據(jù)庫名
create database if not exists test02 character set utf8; 判斷數(shù)據(jù)庫是否存在并創(chuàng)建默認編碼字符
create datebase dbname charset=utf8; 創(chuàng)建數(shù)據(jù)庫并創(chuàng)建默認編碼字符
-
修改數(shù)據(jù)庫
修改數(shù)據(jù)庫的編碼格式:
alter database test02 character set gb2312;
顯示數(shù)據(jù)庫的編碼格式:
show variables like 'character%';
刪除數(shù)據(jù)庫:
drop database test02;
5.mysql的數(shù)據(jù)類型
- 數(shù)據(jù)類型是指數(shù)據(jù)列媳板,存儲過程參數(shù),表達式和局部變量的數(shù)據(jù)特征泉哈,他決定了數(shù)據(jù)的存儲格式蛉幸,代表了不同的信息類型。
-
整型
數(shù)據(jù)類型 存儲范圍 字節(jié) tinyint 有符號值:-128到127(-27到27-1) 無符號值:0到255(0到2^8-1) 1 smallint 有符號值:-32768到32767(-215到215-1) 無符號值:0到65535(0到2^16-1) 2 mediumint 有符號值:-8388608到8388607(-223到223-1) 無符號值:0到16777215(0到2^24-1) 3 int 有符號值:-2147483648到2147483647(-231到231-1) 無符號值:0到4294967295(0到2^32-1) 4 bigint 有符號值:-9223372036854775808到9223372036854775807(-263到263-1) 無符號值:0到18446744073709551615(0到2^64-1) 8 -
浮點數(shù)類型和定點數(shù)類型(表示小數(shù))
數(shù)據(jù)類型 存儲范圍 浮點數(shù)類型 float[(m,d)] double[(m,d)] 4個字節(jié)存儲 范圍:-3.402823466E+38到3.402823466E+38 8個字節(jié)存儲 范圍:-1.797931348623157E+308 到 1.797931348623157E+308 定點數(shù)類型 decimal[(m,d)] m是精度 (=整數(shù)位數(shù)+小數(shù)位數(shù))丛晦,是標度(小數(shù)點后的位數(shù)) -
日期時間型
列類型 字節(jié)數(shù) 取值范圍 表示形式 year 1 1901~2155 YYYY time 3 -838:59:59~838:59:59 HH:MM:SS date 4 1000-01-01~9999-12-31 YYYY-MM-DD datetime 8 1000-01-01 00:00:00~9999-12-3123:59:59 YYYY-MM-DD HH:MM:SS timestamp 4 1970010108001~20380119111407 YYYY-MM-DD HH:MM:SS -
字符型(字符串類型用來存儲字符串數(shù)據(jù)奕纫,除了可以存儲字符串數(shù)據(jù)之外,還可以存儲其它數(shù)據(jù)烫沙,比如圖片和聲音的二進制數(shù)據(jù))
列類型 存儲需求 char(m) m個字節(jié)匹层,0<=m<=255 varchar(m) l+1個字節(jié),其中l(wèi)<=m且0<=m<=65535 tinytext 0~255 (2^8-1) text 0~65535(2^16-1) mediumtext 0~2^24-1 longtext 0~2^32-1 enum('value1','value2',……) 取決于枚舉的個數(shù)(最多65535個值) set('value1','value2',……) 取決于set成員的數(shù)目(最多64個成員)
數(shù)據(jù)庫表
-
數(shù)據(jù)庫最重要的組成部分之一锌蓄,是其它對象的基礎升筏。
行(記錄) 列(字段)
創(chuàng)建數(shù)據(jù)庫表
-
create table<表名>
(
? 列名1 數(shù)據(jù)類型【列級別約束條件】【默認值】
? 列名2 數(shù)據(jù)類型【列級別約束條件】【默認值】
? ……
? 【表級別約束條件】
);
-
查看數(shù)據(jù)庫表
- 查看數(shù)據(jù)表列表
- show tables [from 數(shù)據(jù)庫名];查看當前庫下的表時[ ]這部分可以省略
-
查看數(shù)據(jù)表基本結(jié)構(gòu)
- show columns from 表名;
- describe 表名/desc 表名;
-
查看表詳細結(jié)構(gòu)語句
- show create table 表名;
修改數(shù)據(jù)庫表
-
在已經(jīng)存在的表添加新的列
alter table 表名 add 新列名 數(shù)據(jù)類型 [約束條件] 【first | after 已存在列名】;// [ ]為可選項
-
修改表列名的命令
alter table表名 change 舊列名 新列名 新數(shù)據(jù)類型
-
修改列的數(shù)據(jù)類型
alter table 表名 modify 列名 數(shù)據(jù)類型 //modify修改的意思
-
修改列的排列位置
alter table 表名 modify 列 1 數(shù)據(jù)類型 first | after 列2;
-
刪除列
alter table 表名 drop 列名;
-
修改表名
alter table 舊表名 rename 【to】新表名
刪除數(shù)據(jù)庫表
- drop table [if exists] 表1,表2瘸爽,表3您访,……表n; //添加括號內(nèi)容不會報錯(將錯誤信息隱藏)
表分區(qū)
當我們創(chuàng)建的表,需要承載的數(shù)據(jù)量很大的時候剪决,就要注意他的性能問題灵汪,比如圖書信息表,有1000萬個圖書信息柑潦,那么我們就得考慮如何優(yōu)化他享言,其中一種方式就是表分區(qū)。
表分區(qū)就是把一張表的數(shù)據(jù)分成多個區(qū)塊渗鬼,這些區(qū)塊可以在同一個磁盤上担锤,也可以在不同的磁盤上,但所有的數(shù)據(jù)還在一個表中乍钻。
-
不過使用表分區(qū)有個前提就是你的數(shù)據(jù)庫必須支持肛循。執(zhí)行下面命令查看是否支持
show plugins;
顯示 partition |active|storage engine | null |gpl | //為支持
-
表分區(qū)方式
-
水平分區(qū)
將表的數(shù)據(jù)按行分割成不同的數(shù)據(jù)文件
-
垂直分區(qū)
將表的數(shù)據(jù)按列分割成不同的數(shù)據(jù)文件
-
MySQL約束
約束是一種限制,它通過對表的行或列的數(shù)據(jù)做出限制银择,來確保表的數(shù)據(jù)的完整性多糠,唯一性。
-
常用的幾種約束類型
約束類型 非空約束 主鍵約束 唯一約束 默認約束 外鍵約束 關(guān)鍵字 not null primary key unique default foreign key not null:這一列不能為空浩考;
值 說明 null 字段值可以為空 not null 字段值禁止為空 - 非空約束(not null constraint)指字段的值不能為空夹孔。對于使用了非空約束的字段如果用戶在添加數(shù)據(jù)時,沒有指定值,數(shù)據(jù)庫系統(tǒng)會報錯搭伤。
- 語法:列名 數(shù)據(jù)類型 not null
- 添加非空約束:alter table 表名 modify 字段名 數(shù)據(jù)類型 not null;
- 刪除非空約束:alter table 表名 modify 字段名 數(shù)據(jù)類型;
primary key:用于約束表當中的一行只怎,通過主鍵約束定位到表中的一行;
- 要求主鍵列的數(shù)據(jù)唯一怜俐,并且不允許為空身堡,主鍵能夠唯一地標識表中的一條記錄。
- 一張表中最多只能擁有一個主鍵列
類型 說明 單字段主鍵 由一個字段列組成 1.在定義列的同時指定主鍵(列名 數(shù)據(jù)類型 primary key); 2.在列定義的后邊指定主鍵([constrant <約束名>])primary key(列名); 多字段聯(lián)合主鍵 主鍵由多個字段(列)聯(lián)合組成 primary key(字段1拍鲤,字段2贴谎,……字段n) create table borrowinfo( book_id int,card_id char(18),primary key(book_id,card_id)); - 通過修改表為列添加主鍵
- alter table bookinfo modfiy book_id int primary key;
- alter table bookinfo add primary key(book_id);
- alter table bookinfo add constarint pk_id primary key(book_id);
- 刪除主鍵
- alter table bookinfo drop primary key;
unique:一張表中指定一列的值不能有重復且唯一;
- 要求該列唯一季稳,允許為空擅这,可以確保一列或者幾列不出現(xiàn)重復值
- 語法規(guī)則:
- 列名 數(shù)據(jù)類型 unique;
- 定義完所有列后
- 【constraint <約束名>】unique(列名)景鼠;
- 修改表時添加唯一約束
- 與主鍵類似
- 刪除表的唯一約束
- alter table bookinfo drop index book_name;
- alter table bookinfo drop key book_name;
default:插入數(shù)據(jù)時如果沒有明確為字段賦值仲翎,就會自動賦予默認值;
- 指定某列的默認值
- 語法規(guī)則:
- 列名 數(shù)據(jù)類型 default 默認值
- 修改表時添加默認約束
- alter table bookinfo modify book_name varchar(20) default '機械工業(yè)出版社';
- alter table bookinfo alter column book_name set default '機械工業(yè)出版社';
- 刪除默認約束
- altre table bookinfo modify book_name varchar(20);
- alter table bookinfo alter column book_name drop default;
foreign key:兩個表的數(shù)據(jù)之間建立連接,通過外鍵約束可以保證數(shù)據(jù)的完整性和一致性铛漓;
- 用來在兩個表的數(shù)據(jù)之間建立連接谭确,它可以是一列或者多列。一個表可以有一個多個外鍵票渠;
- 外鍵對應的是參照完整性逐哈,一個表的外鍵可以為空值,若不為空值问顷,則每一外鍵必須等于另一個表中主鍵的某個值昂秃。
- 外鍵的作用是保持數(shù)據(jù)的一致性,完整性杜窄;
- 語法格式:
- [constraint<外鍵約束名>] foreign key(列名) references<主表名>(主鍵)
約束區(qū)別
- 唯一約束與主鍵約束的區(qū)別
- 一個表中可以有多個unique聲明肠骆,但只能有一個primary key聲明;
- 聲明primary key的列不允許有空值塞耕;
- unique的列允許空值
插入數(shù)據(jù)
- 在使用數(shù)據(jù)庫之前蚀腿,數(shù)據(jù)庫表中必須有數(shù)據(jù),我們需要使用insert語句向數(shù)據(jù)庫表中插入數(shù)據(jù)扫外。
-
為表的所有列插入數(shù)據(jù):
- 語法格式:
- insert into table_name(column_list) values(value_list);
- insert into table_name values(value_list); //插入順序需要跟字段順序?qū)?/li>
-
為表的指定列插入數(shù)據(jù):
- 為表的指定列插入數(shù)據(jù)莉钙,就是在insert語句中只向部分列中插入值,而其他沒有指定值的列所插入的數(shù)據(jù)為表定義時的默認值筛谚。
- 語法格式:
- insert into table_name(column_list//部分字段) values(value_list);
-
同時插入多條記錄:
- 語法格式:
- nsert into table_name(column_list) values (value_list1), (value_list2), (value_list3)…… (value_listn);
-
將查詢結(jié)果插入到表中
- insert可以將select語句查詢的結(jié)果插入到表中磁玉。
- 語法格式:
- insert into table_name1(column_list1) select(column_list2) from table_name2 where (condition);
設置自動編號
-
設置表的屬性值自動增加
語法格式:
列名 數(shù)據(jù)類型 auto_increment;
注意:auto_increment約束的字段可以是任何整數(shù)類型(tinyint,smallint,int等)
自增列的初始值默認是1,每添加一條記錄驾讲,自動增長1蚊伞。在建表時可用‘a(chǎn)uto_increment=n’選項來指定一個自增的初始值席赂。(默認為1)
-
create table table_name(
? id int primary key auto_increment,
? name varchar(10) not nul,
? ) auto_increment=5;
-
為已有的表添加自增列
- 修改表的方式
- alter table table_name modfiy 字段名 數(shù)據(jù)類型 auto_increment;
-
修改自增列的起始值
- alter table table_name auto_increment=x;
- 修改后auto_increment列起始值從x開始;
-
去掉字增列
- alter table table_name modfiy 字段名 數(shù)據(jù)類型 ;
單表數(shù)據(jù)記錄的更新
mysql中使用update語句更新表中的記錄
更新特定的行
-
更新所有的行
-
語法格式
update table_name set column_name1=value1,column_name2=value2,column_name3=value3,column_namen=valuen where (condition);
//不加where條件會更新所有的行
-
單表記錄的刪除
- 使用delete語句刪除滿足條件的記錄,語法格式如下:
- delete from table_name [where <condition>];
- 如果想刪除表中的所有記錄时迫,還可以使用truncate table語句颅停,truncate將直接刪除原來的表,并重新創(chuàng)建一個表掠拳,其語法結(jié)構(gòu)為:
- TRUNCATE TABLE_NAME table_name;
單表記錄的查詢
mysql從數(shù)據(jù)表中查詢數(shù)據(jù)的基本語句為select語句癞揉。
-
語法結(jié)構(gòu):
SELECT select_expr【,select_expr……】
【
? FROM table_references
? 【W(wǎng)HERE where_condition】
? 【GROUP BY {col_name|position} 【ASC|DESC】,……】
? 【HAVING where_condition】
? 【ORDER BY {col_name|expr|position} 【ASC|DESC】,……】
? 【LIMIT {【offset,】row_count|row_count OFFSET offset}】
】
在select語句中使用星號‘*’通配符查詢所有列
如:select * from bookcategory;
指定所有列
如:select category_id, category, parent_id from bookcategory;
查詢單個列
如:select category from bookcategory;
查詢多個列
如:select category_id, category from bookcategory;
-
通過where子句,對數(shù)據(jù)進行過濾碳想,語法格式為:
select 列名1,列名2毁靶,……列名n
from 表名
where 查詢條件
select book_id,book_name,price from bookinfo where press ='機械工業(yè)出版社';
-
使用distinct關(guān)鍵字指示mysql消除重復的記錄值
select distinct 列名 from 表名胧奔;
如:select disyinct press from bookinfo;
使用is null子句,可以查詢某列內(nèi)容為空記錄预吆。
如:select * from readerinfo where age is null;
分組查詢
- 分組查詢是對數(shù)據(jù)按照某個或多個列進行分組
- 【group by 列名】【having<條件表達式>】
創(chuàng)建分組
查詢結(jié)果分組
group by 列名
group 不要通常和聚合函數(shù)一起使用龙填,例如:max(), min(), sum(), avg(), count()
-
例:
select count(*) from readerinfo where sex='男';
select sex ,count(*) from readerinfo group by sex;
[having <條件表達式>]
having限定顯示記錄所需滿足的條件,只有滿足條件的分組才會被顯示拐叉。
-
例:
select sex from readerinfo group by sex having count(sex)>2;
排序
- 對查詢結(jié)果進行排序
- mysql中可以通過order by子句對查詢的結(jié)果進行排序
- order by 列名 [ASC|DESC]
- 單列排序
- 按照指定的某個列進行排序岩遗,默認升序。
- select * from bookinfo order by price;
- 多列排序
- 按照多個列進行排序凤瘦,默認升序
- select * from bookinfo order by price,store;
- 指定排序方向
- 排序分為升序和降序宿礁,默認升序。
- 升序ASC
- 降序DESC
- select * from bookinfo order by price ASC,store DESC;
- 單列排序
限制查詢
-
通過limit語句限制查詢記錄的數(shù)量
limit關(guān)鍵字可以返回指定位置的記錄
limit [位置偏移量蔬芥,] 行數(shù)
說明:第一條記錄的位置偏移量為0梆靖,第二條為1,……以此類推笔诵。
-
顯示圖書信息表的前3行記錄
select * from bookinfo limit 3;
-
顯示從第3條記錄開始后的2條圖書信息記錄
select * from bookinfo limit 2,2;
說明:mysql5.7中也可以使用limit 2 offset 2,實現(xiàn)例2相同的效果返吻。
Mysql中的額運算符
-
熟悉mysql中常用運算符的使用
運算符是告訴mysql執(zhí)行特定算術(shù)或邏輯操作的符號,運算符連接表達式中各個操作數(shù)乎婿,其作用是用來指明對操作數(shù)所進行的運算测僵。
-
常用的運算符
算術(shù)運算符
-
用于各類數(shù)值運算
運算符 作用 + 加法 - 減法 * 乘法 / 除法 % 求余(取模)
比較運算符
運算符 作用 >,< 大于,小于 >=,<= 大于等于谢翎,小于等于 = 等于 <>(!=) 不等于 is(not) null 判斷一個值是否為空(或不為空) between……and 判斷一個值是否在兩個值之間 (not)in 判斷一個值是(或不是)in列表中的值 like 通配符匹配 邏輯運算符
-
運算符 | 作用 |
---|---|
AND | 邏輯與 |
OR | 邏輯或 |
NOT | 邏輯非 |
mysql數(shù)值函數(shù)
函數(shù)
- 函數(shù)表示對輸入?yún)?shù)值返回一個具有特定關(guān)系的值捍靠,mysql提供了大量豐富的函數(shù),在進行數(shù)據(jù)庫管理以及數(shù)據(jù)的查詢和操作時會經(jīng)常用到各種函數(shù)森逮。通過對數(shù)據(jù)的處理剂公,數(shù)據(jù)庫功能可以變得更加強大,更加靈活的滿足不同用戶的需求吊宋。
- 常用函數(shù)
-
數(shù)值函數(shù)(數(shù)學函數(shù))
-
主要是用來處理數(shù)值數(shù)據(jù)的纲辽。
獲取整數(shù)的函數(shù)
-
CEIL(x):向上取整
select ceil(28.55) 結(jié)果:29
-
floor(x):向下取整
select floor(28.55) 結(jié)果:28
-
round(x) :返回最接近于參數(shù)x的整數(shù)颜武,對參數(shù)x進行四舍五入
select round(28.55) 結(jié)果:29
-
round(x,y):返回最接近于參數(shù)x的數(shù),其值保留到小數(shù)點后面的y位拖吼,若y為負值鳞上,則將保留x值到小數(shù)點左邊y位
select round(28.55,1), round(28.55,0), round(28.55,-1);
結(jié)果:28.6 29 30
-
截斷函數(shù) truncate(x,y)返回被舍去至小數(shù)點后y位的數(shù)字x.若y的值為0,則結(jié)果為整數(shù)吊档,若y的值為負數(shù)篙议,則截去x小數(shù)點左起第y位開始后面所有低位的值
select truncate(28.55,1), truncate(28.55,0), truncate(28.55,-1);
結(jié)果: 28.5 28 20
-
取模(求余)
-
mod(x,y)返回x被y除后的余數(shù)
select mod(11,2); 結(jié)果:1
-
-
-
字符函數(shù)
-
用來處理數(shù)據(jù)庫中字符串數(shù)據(jù)
-
字符串連接函數(shù)
concat(s1,s2,...)返回結(jié)果為連接參數(shù)產(chǎn)生的字符串,如果任何一個參數(shù)為null,則返回值為null
select concat('hello','world'); 結(jié)果:helloworld
-
concat_ws(x,s1,s2,...),第一個參數(shù)x是其它參數(shù)的分隔符怠硼,分隔符的位置放在要連接的兩個字符串之間鬼贱,分隔符可以是一個字符串,也可以是其它參數(shù)香璃,如果分隔符為null,則結(jié)果為null这难。
select concat_ws('-','hello','word'); 結(jié)果為:hello-word
-
字母轉(zhuǎn)換大小寫函數(shù)
-
lower(str)可以將字符串str中的字母字符全部轉(zhuǎn)換成小寫字母
select lower('Hello Word'); 結(jié)果:hello word
-
upper(str)可以將字符串str中的字母字符串全部換成大寫字母。
select upper('Hello Word'); 結(jié)果:HELLO WORLD
-
-
求字符長度的函數(shù)
-
length(str)返回值為字符串的字節(jié)長度
select length(' hello '); 結(jié)果:7
-
-
刪除空格的函數(shù)
- ltrim(s)返回字符串s葡秒,字符左側(cè)空格字符被刪除
- rtrim(s)返回字符串s姻乓,字符右側(cè)空格字符被刪除
- trim(s):刪除字符串兩側(cè)的空格
-
截取字符串
substring(s,n,len)帶有l(wèi)en參數(shù)的格式,從字符串s返回一個長度同len字符相同的子字符串眯牧,起始于位置n蹋岩。n如果是負數(shù),則子字符串的位置起始于字符串結(jié)尾的n個字符学少。
select substring('hello,world',1,5); 結(jié)果:hello
select substring('hello world',-3,2); 結(jié)果:rl
-
獲取指定長度的字符串函數(shù)
-
left(s,n)返回字符串s開始的最左邊n個字符
select left('hello world',5); 結(jié)果:hello
-
right(s,n)返回字符串中最右邊n個字符
select right('hello world',5); 結(jié)果:world
-
-
替換函數(shù)
-
replace(str,from_str,to_str)在字符串str中所有出現(xiàn)的字符串from_str均被yo_str替換剪个,然后返回這個字符串。
select replace('hello world','world','mysql'); 結(jié)果:hello mysql
-
-
格式化函數(shù)
-
format(x,n)將數(shù)字x格式化版确,并以四舍五入的方式保留小數(shù)點后n為禁偎,結(jié)果以字符串的形式返回。若n為0阀坏,則返回結(jié)果不含小數(shù)部分如暖。
select format(1234.5678,2), format(1234.5,2),format(1234.5678,0);
結(jié)果:1234.57 1234.50 1235
-
-
-
-
日期時間函數(shù)
- 日期和時間函數(shù)主要是用來處理日期和時間值
- 獲取當前日期的函數(shù)
- curdate()和current_date()函數(shù)作用相同,將當前日期按照‘YYY-MM-DD’或‘YYYMMDD’格式的值返回忌堂,具體格式根據(jù)函數(shù)在字符串或是數(shù)字語境中而定盒至。
- select curdate(); 結(jié)果為:2018-05-16
- select curdate()+0; 結(jié)果為:20180516
- 獲取當前時間的函數(shù)
- curtime()和current_time()函數(shù)作用相同,將當前時間按照‘HH:MM:SS’或‘HHMMSS’格式的值返回士修,具體格式根據(jù)函數(shù)在字符串或是數(shù)字語境中而定枷遂。
- select curdate(); 結(jié)果為:15:03:28
- select curdate()+0; 結(jié)果為:150328
- 獲取當前的日期和時間
- now()和sysdate()函數(shù)作用相同,均返回當前的日期時間值棋嘲。格式為‘YYY-MM-DD HH:MM:SS’或‘YYYMMDDHHMMSS’格式的值返回酒唉,具體格式根據(jù)函數(shù)在字符串或是數(shù)字語境中而定。
- select now(); 結(jié)果為:2018-05-16 15:12:57
- select now()+0; 結(jié)果為:20180516151257
- 執(zhí)行日期的加運算
- date_add(date,interval expr type)其中沸移,date是一個DATETIME或DATE值痪伦,用來指定起始時間侄榴。expr是一個表達式,用來指定從起始時間添加或減去的時間間隔值网沾。type為關(guān)鍵詞癞蚕,它指示了表達式被解釋的方式,如:YEAR,MONTH,DAY,WEEK,HOUR等辉哥。
- select date_add('2018-05-19',interval 3 month); 結(jié)果為:2018-08-19
- 計算兩個日期之間的間隔天數(shù)
- datediff(date1,date2)返回起始時間date1和結(jié)束時間date2之間的天數(shù)桦山。
- select datediff('2018-06-1','2018-05-1'); 結(jié)果為:31
- 日期的格式化
- date_format(date,format)根據(jù)format指定的格式顯示date值。
- date_format時間日期格式:
- %b:月份的縮寫名稱(Jan...Dec)
- %c:月份醋旦,數(shù)字形式(0...12)
- %m:月份恒水,數(shù)字形式(00...12)
- %M:月份名稱(January..December)
- %d:該月日期,數(shù)字形式(00...31)
- %e:該月日期饲齐,數(shù)字形式(0...31)
- %Y:4位數(shù)形式表示年份
- %y:2位數(shù)形式表示年份
-
聚合函數(shù)(分組函數(shù))
- 有時候并不需要返回實際表中的數(shù)據(jù)钉凌,而只是對獲取的數(shù)據(jù)進行分析和總結(jié)。這時候就需要使用聚合函數(shù)箩张。
名稱 描述 AVG() 返回某列的平均值 COUNT() 返回某列的行數(shù) MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列值的和 -
信息函數(shù)
- VERSION():返回當前MySQL服務器版本的版本號甩骏。
- CONNECTION_ID():返回MySQL服務器當前連接的次數(shù)窗市,每個連接都有各自唯一的ID先慷。
- DATABASE()和SCHEMA():返回當前的數(shù)據(jù)庫名
- USER():獲取用戶名的函數(shù),返回當前登錄 的用戶名稱
-
加密函數(shù)
- 加密函數(shù)主要用來對數(shù)據(jù)進行加密和界面處理咨察,以保證某些重要數(shù)據(jù)不被別人獲取
- MD5():信息摘要算法(不可逆)
- MD5(str)函數(shù)可以加密字符串论熙,加密后的值以32位十六進制數(shù)字的二進制字符串形式返回,若參數(shù)為NULL摄狱,則返回NULL脓诡。
- PASSWORD():密碼算法
- PASSWORD(str)從原明文密碼str計算并返回加密后的密碼字符串,當參數(shù)為NULL時媒役,返回NULL祝谚。
-