資料庫-DML(資料操作語言)和DQL(資料查詢語言)
MySQL的儲存引擎
什麼是儲存引擎?
關係資料庫表是用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式。有的表簡單,有的表複雜,有的表根本不用來儲存任何長期的資料,有的表讀取時非常快,但是插入資料時很差;而我們在實際開發過程中,就可能需要各種各樣的表,不同的表,就意味著儲存不同型別的資料,資料的處理上也會存在著差異,那麼。對於MySQL來說,它提供了很多種型別的儲存引擎,我們可以根據對資料處理的需求,選擇不同的儲存引擎,從而最大限度的利用MySQL強大的功能。
儲存引擎的型別
MyISAM、InnoDB 、Memory、CSV等9種
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 <排序的列名>[ASC或DESC]]; |
示例:
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 `studentNo` AS 學生編號,`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) |
返回日期引數date1和date2之間相隔的天數 |
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 <欄位名列表
MySQL的儲存引擎
什麼是儲存引擎?
關係資料庫表是用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式。有的表簡單,有的表複雜,有的表根本不用來儲存任何長期的資料,有的表讀取時非常快,但是插入資料時很差;而我們在實際開發過程
函式
函式就是重複執行的程式碼片。
1、函式定義與執行
<script type="text/javascript">
// 函式定義
function aa(){
alert('hello!');
}
// 函式執行
DML包含對資料的增加、修改刪除
1、插入資料INSERT INTO
Insert into 表名 (列名) values (值列表);
-----------------
INSERT INTO table_name ( field1, field2,...fieldN )
linux c 編譯運行 函數 code 計算 urn 解決 情況 結果 皇冠體育平臺出租 haozbbs.com Q1446595067 open()和creat()創建文件時,文件權限說明
首先了解一下 umask 命令,該命令用來設置限制新文件權限的掩碼。當新文件被
http://blog.csdn.net/xingjiarong/article/details/47282817
一、scanf()和gets()
1.scanf()
所在標頭檔案:stdio.h
語法:scanf(“格式控制字串”,變數地址列表);
接受字 統計從鍵盤輸入一行字元的個數:
1 //用了getchar() 語句
2 //這裡的\n表示回車
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main()
4 {
5 int n =
open()和creat()建立檔案時,檔案許可權說明
首先了解一下 umask 命令,該命令用來設定限制新檔案許可權的掩碼。當新檔案被建立時,其最初的許可權由檔案建立掩碼決定。簡單地來說,umask和open()及creat()函式的許可權碼(mode_t mode引數)共同決定你
前段時間在做使用者畫像的時候,遇到了這樣的一個問題,記錄某一個商品的使用者購買群,剛好這種需求就可以用到Redis中的Set,key作為productID,value
就是具體的customerid集合,後續的話,我就可以通過productid來檢視該cust
Gson和fastjson分別為谷歌和阿里巴巴對JSON資料進行處理封裝的jar包
Gson(谷歌)和fastjson(阿里巴巴)兩者異同點:
相同點:都是根據JSON資料建立相應的類
不同點
Oracle主備庫資料同步使用DataGuard。Data Guard 是Oracle的遠端複製技術,它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨立的系統,這是兩套硬體配置可以不同的系統,但是這兩套系統的軟體結構保持一致,包括軟體的版本,目錄儲存結構,以及資料的
scanf( )函式和gets( )函式都可用於輸入字串,但在功能上有區別。若想從鍵盤上輸入字串"hi hello",則應該使用__gets__函式。
gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。
char stri
圖的概念
為什麼要有圖
在學習圖之前我們應該學習了,線性表和樹;但是我們有沒有考慮過為什麼要有圖,線性表和圖的侷限性優勢上面呢?
線性表他僅僅侷限於一個直接前驅和一個直接後繼的關係。
樹呢?樹也僅僅只能有一個直接前驅也就是父節點。
那麼這種多對
SSM 實訓筆記 -08- 使用 Spring JDBC Template 對資料庫查詢(登入)和刪除(maven)
Spring JDBC 提供了 Spring JDBC Template,大大簡化了對資料庫的操作,其中JdbcTemplate 是最常用的,下面介紹
本篇內容: 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 語言切片是對陣列的抽象。切片的單詞來源於可以對其他陣列和切片進行片段擷取
// Go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,
// Go中提供了一種靈活,功能強悍的內建型別切片("動態陣列"),
// 與陣列相比切片的長度是不固定的,可以追加
轉
第一步是用".bytes"的副檔名儲存二進位制檔案,Unity將把這個檔案作為一個TextAsset文字資源,這樣就可以打包成AssetBundles。一旦下載了AssetBundle資源包並且載入了TextAsset文字資源物件,我們就可以使用TextAsset文
這一篇將介紹怎樣把頁面資料儲存的MySql資料庫,並將資料庫內容展示到頁面上。
首先做一個基礎工作,新增以下jar到lib:
2: spring-jdbc-4.3.3.RELEASE.jar
3: spring-tx-4.3.3.RELEASE.jar
2和3從sprin
例題:
1.製作login.jsp頁面,要求實現提供使用者登陸的介面,
使用者通過該介面輸入使用者名稱(控制元件名userName)和密碼(控制元件名password),
然後點選“登入”按鈕實現登陸操作.
2.製作welcome.jsp頁面,要求在該 get err 實例 分享 切面 簡介 () lee XML 一 簡介
(1)過濾器:
依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取 |