2018-05-24

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祝谚。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酣衷,隨后出現(xiàn)的幾起案子交惯,更是在濱河造成了極大的恐慌,老刑警劉巖穿仪,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件席爽,死亡現(xiàn)場離奇詭異,居然都是意外死亡啊片,警方通過查閱死者的電腦和手機只锻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來紫谷,“玉大人齐饮,你說我怎么就攤上這事捐寥。” “怎么了沈矿?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵上真,是天一觀的道長。 經(jīng)常有香客問我羹膳,道長睡互,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任陵像,我火速辦了婚禮就珠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘醒颖。我一直安慰自己妻怎,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布泞歉。 她就那樣靜靜地躺著逼侦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腰耙。 梳的紋絲不亂的頭發(fā)上榛丢,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音挺庞,去河邊找鬼晰赞。 笑死,一個胖子當著我的面吹牛选侨,可吹牛的內(nèi)容都是我干的掖鱼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼援制,長吁一口氣:“原來是場噩夢啊……” “哼戏挡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起晨仑,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤褐墅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后寻歧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掌栅,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年码泛,在試婚紗的時候發(fā)現(xiàn)自己被綠了猾封。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡噪珊,死狀恐怖晌缘,靈堂內(nèi)的尸體忽然破棺而出齐莲,到底是詐尸還是另有隱情,我是刑警寧澤磷箕,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布选酗,位于F島的核電站,受9級特大地震影響岳枷,放射性物質(zhì)發(fā)生泄漏芒填。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一空繁、第九天 我趴在偏房一處隱蔽的房頂上張望殿衰。 院中可真熱鬧,春花似錦盛泡、人聲如沸闷祥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凯砍。三九已至,卻和暖如春拴竹,著一層夾襖步出監(jiān)牢的瞬間悟衩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工殖熟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留局待,地道東北人斑响。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓菱属,卻偏偏與公主長得像,于是被迫代替她去往敵國和親舰罚。 傳聞我的和親對象是個殘疾皇子纽门,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容