1. 程式人生 > >資料庫-DML(資料操作語言)和DQL(資料查詢語言)

資料庫-DML(資料操作語言)和DQL(資料查詢語言)

MySQL的儲存引擎

什麼是儲存引擎?

關係資料庫表是用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式。有的表簡單,有的表複雜,有的表根本不用來儲存任何長期的資料,有的表讀取時非常快,但是插入資料時很差;而我們在實際開發過程中,就可能需要各種各樣的表,不同的表,就意味著儲存不同型別的資料,資料的處理上也會存在著差異,那麼。對於MySQL來說,它提供了很多種型別的儲存引擎,我們可以根據對資料處理的需求,選擇不同的儲存引擎,從而最大限度的利用MySQL強大的功能。

儲存引擎的型別

MyISAMInnoDB MemoryCSV9

MyISAM
InnoDB型別主要區別

名稱

InnoDB

MyISAM

事務處理

支援

不支援

資料行鎖定

支援

不支援

外來鍵約束

支援

不支援

全文索引

不支援

支援

表空間大小

較大,2

較小

MyISAM表是獨立於作業系統的,這說明可以輕鬆地將其從Windows伺服器移植到Linux伺服器;每當我們建立一個MyISAM引擎的表時,就會在本地磁碟上建立三個檔案,檔名就是表明。例如,我建立了一個MyISAM引擎的tb_Demo表,那麼就會生成以下三個檔案:

1.tb_demo.frm,儲存表定義;

2.tb_demo.MYD,儲存資料;

3.tb_demo.MYI,儲存索引。

MyISAM表無法處理事務,這就意味著有事務處理需求的表,不能使用MyISAM儲存引擎。MyISAM儲存引擎特別適合在以下幾種情況下使用:

1.選擇密集型的表。MyISAM儲存引擎在篩選大量資料時非常迅速,這是它最突出的優點。

2.插入密集型的表。MyISAM的併發插入特性允許同時選擇和插入資料。例如:MyISAM儲存引擎很適合管理郵件或Web伺服器日誌資料。

InnoDB是一個健壯的事務型儲存引擎,這種儲存引擎已經被很多網際網路公司使用,為使用者操作非常大的資料儲存提供了一個強大的解決方案。一般電腦上安裝的MySQL版,InnoDB就是作為預設的儲存引擎。InnoDB還引入了行級鎖定和外來鍵約束,在以下場合下,使用InnoDB是最理想的選擇:

1.更新密集的表。InnoDB儲存引擎特別適合處理多重併發的更新請求。

2.事務。InnoDB儲存引擎是支援事務的標準MySQL儲存引擎。

3.自動災難恢復。與其它儲存引擎不同,InnoDB表能夠自動從災難中恢復。

4.外來鍵約束。MySQL支援外來鍵的儲存引擎只有InnoDB。

5.支援自動增加列AUTO_INCREMENT屬性。

一般來說,如果需要事務支援,並且有較高的併發讀取頻率,InnoDB是不錯的選擇。

<適用場合

  使用MyISAM:   不需事務,空間小,以查詢訪問為主

  使用InnoDB:     多刪除、更新操作,安全性高,事務處理及併發控制>

檢視當前預設儲存引擎

語法

SHOW VARIABLES LIKE ‘storage_engine%’; 

修改儲存引擎:修改my.ini配置檔案

設定表的儲存引擎

語法:

CREATE TABLE 表名(

    #省略程式碼

)ENGINE=儲存引擎;

示例:

CREATE TABLE `myisam` (
   id  INT(4)
)ENGINE=MyISAM;

資料表的儲存位置

MyISAM型別表文件

*.frm:表結構定義檔案

*.MYD:資料檔案

*.MYI:索引檔案

InnoDB型別表文件

*.frm:表結構定義檔案

ibdata1檔案

注意:

儲存位置->因作業系統而異,可查my.ini

datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

innodb_data_home_dir="D:/MySQL Datafiles/"

DML語句——插入單條資料記錄

語法:

INSERT INTO 表名 [(欄位名列表)] VALUES (值列表);

注意:

1.欄位名是可選的,如省略則依次插入所有欄位

2.多個列表和多個值之間使用逗號分隔

3.值列表和欄位名列表一一對應

4.如插入的是表中部分資料,欄位名列表必填

示例:

INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)

VALUES('123','黃小平',1,'13956799999','1996-5-8');

DML語句——插入資料記錄

語法:

INSERT INTO 新表(欄位名列表

 VALUES(值列表1),(列表2),……,(值列表n);

示例:

INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)

VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

< 為避免表結構發生變化引發的錯誤,建議插入資料時寫明具體欄位名!>

DML語句——將查詢結果插入新表

編寫SQL語句實現從學生表提取姓名、手機號兩列資料儲存到通訊錄表中

語法:

CREATE TABLE (SELECT 欄位1,欄位2……  FROM );

示例:

CREATE TABLE `phoneList`(

    SELECT `studentName`,`phone`

    FROM `student`);

< 如新表已存在,將會報錯!>

資料更新

更新資料記錄-語法:

UPDATE 表名

SET 欄位1=1,欄位2=2,…,欄位n=n

[WHERE 條件];

示例:

UPDATE student SET sex = ‘’;

UPDATE student SET address = ‘北京女子職業技術學校家政班

WHERE address = ‘北京女子職業技術學校刺繡班’;

資料刪除

刪除資料記錄-語法:

DELETE FROM 表名 [WHERE條件];

<可以選擇性刪除表中的某些記錄>

TRUNCATE TABLE 表名;

<刪除整個表,無法選擇條件>

<TRUNCATE語句刪除後將重置自增列,表結構及其欄位、約束、索引保持不變,執行速度比DELETE語句快>

示例:

DELETE FROM student WHERE studentName = ‘王寶寶’;

TRUNCATE TABLE student;

什麼是查詢

<查詢產生一個虛擬表

看到的是表形式顯示的結果,但結果並不真正儲存

每次執行查詢只是從資料表中提取資料,並按照表的形式顯示出來>

查詢語法

SELECT    <|表示式|函式|常量>

FROM      <表名>

[WHERE    <查詢條件表示式>]

[ORDER BY <排序的列名>[ASCDESC]];

示例:

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`

FROM `student`

WHERE `gradeId` = 1

ORDER BY `studentNo`;

資料查詢基礎

查詢全部的行和

SELECT * FROM `student`;

查詢部分列

SELECT `studentNo`,`studentName`,`address`

FROM `student`

WHERE `address`=‘河南新鄉’;

資料查詢-列別名

使用AS命名列

SELECT `studentNoAS 學生編號,`studentName` AS 學生姓名,

        `address `AS 學生地址 

FROM `student`

WHERE `address` <> '河南新鄉‘;

SELECT `firstName` + '.' + `lastName` AS 姓名

FROM `employees`;

<注意:

1. + 連線的資料型別必須相容

2. 如果 + 連線字元型資料,結果為字串資料的連線

3. 如果 + 連線數值型資料,結果為數值的和>

資料查詢-空行、常量列

查詢空行

SELECT `studentName` FROM `student` WHERE `email` IS     NULL;

原來有資料,但資料被清除的列如何查詢?

使用常量列

SELECT `studentName` AS 姓名,`address` AS 地址,

北京資訊中心’ AS 學校名稱

FROM `student`;

常用函式——聚合函式

               函式名

                               作用

 AVG()

返回某欄位的平均值

COUNT()

返回某欄位的行數

MAX()

返回某欄位的最大值

MIN()

返回某欄位的最小值

SUM()

返回某欄位的和

常用函式——字串函式

      函

              作   

                     舉   

CONCAT(str1,

       str1...strn)

字串連線

SELECT    CONCAT('My','S','QL');

返回MySQL

INSERT(str,

pos,len,

newstr)

字串替換

SELECT INSERT(

    'SQL Server資料庫',

    3,10,'MySQL');

返回:這是MySQL資料庫

LOWER(str)

將字串轉為小寫

SELECT LOWER('MySQL');

返回mysql

UPPER(str)

字串轉為大寫

SELECT UPPER('MySQL');

 返回MYSQL

SUBSTRING

  (str,num,len)

字串擷取

SELECT SUBSTRING(

    'JavaMySQLOracle',5,5);

返回MySQL

常用函式——時間日期函式

函式名

                作用

舉例(結果與當前時間有關)

CURDATE()

獲取當前日期

SELECT CURDATE();

返回2016-08-08

CURTIME()

獲取當前時間

SELECT CURTIME();

返回19:19:26

NOW()

獲取當前日期和時間

SELECT NOW();

返回2016-08-08 19:19:26

WEEK(date)

返回日期date為一年中的第幾周

SELECT WEEK(NOW());

返回26

YEAR(date)

返回日期date的年份

SELECT YEAR(NOW());

返回2016

HOUR(time)

返回時間time的小時值

SELECT HOUR(NOW());

返回9

MINUTE(time)

返回時間time的分鐘值

SELECT MINUTE(NOW());

返回43

DATEDIFF(date1,date2)

返回日期引數date1date2之間相隔的天數

SELECT DATEDIFF(NOW(),

     '2008-8-8');

返回2881      

ADDDATE(date,n)

計算日期引數date加上n天后的日期

SELECT ADDDATE(NOW(),5);

返回2016-09-02  09:37:07 

常用函式——數學函式

函式名

   

       

CEIL(x)

返回大於或等於數值x的最小整數

SELECT CEIL(2.3)

返回:3

FLOOR(x)

返回小於或等於數值x的最大整數

SELECT FLOOR(2.3)

返回:2

RAND()

返回0~1間的隨機數

SELECT RAND()

返回:0.5525468583708134

ROUND()                  返回四捨五入數                            SELECT  ROUND(5.6)     返回:6  

ORDER BY子句實現按一定順序顯示查詢結果

示例:把成績都降低10%後加5分,再查詢及格成績,並按照成績從高到低排序

SELECT `studentNo` AS 學生編號,(studentResult*0.9+5 ) AS 綜合成績

FROM `result`

WHERE (`studentResult`*0.9+5) >=60

ORDER BY studentResult DESC;

LIMIT子句

MySQL查詢語句中使用LIMIT子句限制結果集

語法:

SELECT  <欄位名列表

相關推薦

資料庫-DML資料操作語言DQL資料查詢語言

MySQL的儲存引擎 什麼是儲存引擎? 關係資料庫表是用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式。有的表簡單,有的表複雜,有的表根本不用來儲存任何長期的資料,有的表讀取時非常快,但是插入資料時很差;而我們在實際開發過程

JavaScript的函式定義與解析、匿名函式、函式傳參、return關鍵字陣列操作資料的方法、多維陣列、陣列去重

函式 函式就是重複執行的程式碼片。 1、函式定義與執行 <script type="text/javascript"> // 函式定義 function aa(){ alert('hello!'); } // 函式執行

DML資料操縱語言DQL查詢

DML包含對資料的增加、修改刪除 1、插入資料INSERT INTO Insert into 表名 (列名) values (值列表); ----------------- INSERT INTO table_name ( field1, field2,...fieldN )

C語言opencreat函皇冠數體育平臺出租創建文件時,文件權限設置相關

linux c 編譯運行 函數 code 計算 urn 解決 情況 結果 皇冠體育平臺出租 haozbbs.com Q1446595067 open()和creat()創建文件時,文件權限說明 首先了解一下 umask 命令,該命令用來設置限制新文件權限的掩碼。當新文件被

C語言scanfgets及printfputs的區別

http://blog.csdn.net/xingjiarong/article/details/47282817 一、scanf()和gets()   1.scanf() 所在標頭檔案:stdio.h 語法:scanf(“格式控制字串”,變數地址列表); 接受字

c語言程式設計:用strcpy比較陣列銀行卡密碼程式設計,strcpy複製陣列內容getchar敲鍵盤字元,統計不想要的字元的個數

統計從鍵盤輸入一行字元的個數:   1 //用了getchar() 語句 2 //這裡的\n表示回車 1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int n =

C語言opencreat函式建立檔案時,檔案許可權設定相關

open()和creat()建立檔案時,檔案許可權說明 首先了解一下 umask 命令,該命令用來設定限制新檔案許可權的掩碼。當新檔案被建立時,其最初的許可權由檔案建立掩碼決定。簡單地來說,umask和open()及creat()函式的許可權碼(mode_t mode引數)共同決定你

redis大幅效能提升之使用管道PipeLine批量Batch操作

       前段時間在做使用者畫像的時候,遇到了這樣的一個問題,記錄某一個商品的使用者購買群,剛好這種需求就可以用到Redis中的Set,key作為productID,value 就是具體的customerid集合,後續的話,我就可以通過productid來檢視該cust

JSON資料解析:Gson谷歌fastjson阿里巴巴的異同點

Gson和fastjson分別為谷歌和阿里巴巴對JSON資料進行處理封裝的jar包 Gson(谷歌)和fastjson(阿里巴巴)兩者異同點: 相同點:都是根據JSON資料建立相應的類 不同點

oracle叢集RAC主備資料同步DataGuard思路

Oracle主備庫資料同步使用DataGuard。Data Guard 是Oracle的遠端複製技術,它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨立的系統,這是兩套硬體配置可以不同的系統,但是這兩套系統的軟體結構保持一致,包括軟體的版本,目錄儲存結構,以及資料的

C語言 getsscanf函式的區別

scanf( )函式和gets( )函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串"hi hello",則應該使用__gets__函式。 gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。 char stri

資料結構——圖—概念儲存鄰接矩陣,鄰接表

圖的概念 為什麼要有圖 在學習圖之前我們應該學習了,線性表和樹;但是我們有沒有考慮過為什麼要有圖,線性表和圖的侷限性優勢上面呢? 線性表他僅僅侷限於一個直接前驅和一個直接後繼的關係。 樹呢?樹也僅僅只能有一個直接前驅也就是父節點。 那麼這種多對

SSM 實訓筆記 -08- 使用 Spring JDBC Template 對資料庫查詢登入刪除maven

SSM 實訓筆記 -08- 使用 Spring JDBC Template 對資料庫查詢(登入)和刪除(maven) Spring JDBC 提供了 Spring JDBC Template,大大簡化了對資料庫的操作,其中JdbcTemplate 是最常用的,下面介紹 本篇內容:

python資料處理之numpypandas

import numpy as np a = np.random.random((2,4)) print(a) print(np.sum(a)) print(np.max(a)) print(np.min(a)) print(np.sum(a,axis=1)) print(np.min(a,axis=0))

資料結構 找樹根孩子

樹的儲存結構: •方法1:陣列,稱為“父親表示法”。   constint m = 10;           //樹的結點數   struct node   {       int data, parent;        //資料域,指標域   };   nod

Go語言學習八:切片slice範圍range

// Go 語言切片是對陣列的抽象。切片的單詞來源於可以對其他陣列和切片進行片段擷取 // Go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用, // Go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"), // 與陣列相比切片的長度是不固定的,可以追加

Unity5.4 Assetbundles官方說明七在AssetBundle中儲存載入二進位制資料

轉 第一步是用".bytes"的副檔名儲存二進位制檔案,Unity將把這個檔案作為一個TextAsset文字資源,這樣就可以打包成AssetBundles。一旦下載了AssetBundle資源包並且載入了TextAsset文字資源物件,我們就可以使用TextAsset文

SpringMVC4+thymeleaf3的一個簡單例項篇五:頁面MySql的資料互動-展示以及儲存

這一篇將介紹怎樣把頁面資料儲存的MySql資料庫,並將資料庫內容展示到頁面上。 首先做一個基礎工作,新增以下jar到lib: 2: spring-jdbc-4.3.3.RELEASE.jar 3: spring-tx-4.3.3.RELEASE.jar 2和3從sprin

製作login.jsp頁面,要求實現提供使用者登陸的介面, 使用者通過該介面輸入使用者名稱控制元件名userName密碼控制元件名password, 然後點選“登入”按鈕實現登陸操作.

例題: 1.製作login.jsp頁面,要求實現提供使用者登陸的介面, 使用者通過該介面輸入使用者名稱(控制元件名userName)和密碼(控制元件名password), 然後點選“登入”按鈕實現登陸操作. 2.製作welcome.jsp頁面,要求在該

SpringMVC的攔截器Interceptor過濾器Filter的區別與聯系

get err 實例 分享 切面 簡介 () lee XML 一 簡介 (1)過濾器: 依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取