国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
終于有人將MySQL講明白了

前言導(dǎo)讀

在日常開(kāi)發(fā)中,存儲(chǔ)數(shù)據(jù)的最常用的方式便是數(shù)據(jù)庫(kù)了,其中最為著名的便是

MySQL數(shù)據(jù)庫(kù),因他簡(jiǎn)便易于上手而且可擴(kuò)展性強(qiáng)大,跨平臺(tái)使得它廣為使用,今天我們就來(lái)具體聊聊。

1.安裝

2.數(shù)據(jù)類(lèi)型

3.庫(kù) 表常見(jiàn)操作

4.索引

5.視圖

6.函數(shù)

7.游標(biāo)

8.觸發(fā)器

9.存儲(chǔ)過(guò)程

10.事務(wù)

11.備份與還原

12.用戶(hù)賬號(hào)

13.其他

一、安裝過(guò)程

我們所使用的是MySQL 5.7版本,這個(gè)版本算是挺不錯(cuò)的。下面我們來(lái)介紹下這個(gè)版本的具體安裝過(guò)程吧。

1.解壓安裝

因?yàn)楣倬W(wǎng)目前下載不了,為了大家安裝過(guò)程中方便,我們下載一個(gè)免安裝版mysql,

地址:
https://590m.com/file/7715018-442009503,下載好后將這個(gè)壓縮包文件解壓到指定的磁盤(pán)下,比如我想解壓到E盤(pán)的mysql文件夾中。如圖:

  1. 配置環(huán)境變量

為了讓mysql 可以在任意目錄運(yùn)行,我們可以將mysql的bin目錄添加到環(huán)境變量,如圖:

3.修改配置文件

在mysql目錄下創(chuàng)建一個(gè)my.ini配置文件,修改配置:

[mysql]# 設(shè)置mysql客戶(hù)端默認(rèn)字符集default-character-set=utf8[mysqld]#設(shè)置3306端口port = 3306# 設(shè)置mysql的安裝目錄basedir='E:\mysql\mysql-5.7.11-winx64'# 設(shè)置mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)的存放目錄datadir='E:\mysql\mysql-5.7.11-winx64\data'# 允許最大連接數(shù)max_connections=200# 服務(wù)端使用的字符集默認(rèn)為8比特編碼的latin1字符集character-set-server=utf8# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎default-storage-engine=INNODB

4.安裝mysql

以管理員身份運(yùn)行命令提示符,輸入mysqld install命令(注意是mysqld而不是mysql)回車(chē),即可安裝MySQL,提示:Service successfully installed,則表示安裝成功,如下圖所示:

移除服務(wù):mysqld remove

5.啟動(dòng)mysql服務(wù)

在命令提示符下執(zhí)行命令,

啟動(dòng)mysql:net start mysql

停止:net stop mysql

發(fā)現(xiàn)啟動(dòng)不了,如圖:

這是怎么回事了,哦~原來(lái)是因?yàn)檫€沒(méi)有初始化,那么我們現(xiàn)在來(lái)進(jìn)行初始化,

執(zhí)行指令:mysqld --initialize-insecure --user=mysql,

mysqld --initialize-insecure:自動(dòng)生成無(wú)密碼的root用戶(hù),

mysqld --initialize:自動(dòng)生成帶隨機(jī)密碼的root用戶(hù),

mysqld --initialize --user=mysql --console:生成隨機(jī)密碼并顯示在控制臺(tái)窗口,

data文件夾不為空是不能執(zhí)行這個(gè)命令的(刪掉data文件即可),

執(zhí)行mysqld --initialize-insecure --user=mysql命令會(huì)自動(dòng)新建data文件夾。執(zhí)行結(jié)果如圖:

可以看到執(zhí)行成功了,再次啟動(dòng)mysql服務(wù),啟動(dòng)成功。如圖:

6.進(jìn)入mysql,修改登陸密碼確保安全

第一次進(jìn)入mysql 是沒(méi)有密碼就可以登陸了,我們可以設(shè)置登陸密碼,

更改root密碼,輸入:

update mysql.user set password=password('123321') where user = 'root';

因?yàn)樾掳鎚ysql數(shù)據(jù)庫(kù)下沒(méi)有password字段,所以需要使用如下命令:

update mysql.user set authentication_string=password('123321') where user='root';
刷新權(quán)限:flush privileges;

這是必須的,不然操作沒(méi)有效果。

也可以這樣修改密碼:

set password = password('123456');

這樣就將root用戶(hù)的密碼設(shè)置為了 123456了,下面我們退出mysql再重新進(jìn)去,順帶說(shuō)下退出命令:

退出mysql:quit;

接下來(lái)在進(jìn)入mysql,如圖:

這樣root用戶(hù)就有了密碼,他的密碼就是123321.

整個(gè)安裝過(guò)程就完成了,是不是很簡(jiǎn)單了。

另外,為了提高交互效果,我們還可以一個(gè)軟件-------sqlyong,他可以和mysql建立鏈接,

下載地址:
https://590m.com/file/7715018-442029096,

然后輸入壓縮包內(nèi)自帶的注冊(cè)碼破解就可以免費(fèi)使用了。

2.mysql 數(shù)據(jù)類(lèi)型

1.數(shù)值類(lèi)型

MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)值數(shù)據(jù)類(lèi)型。

這些類(lèi)型包括嚴(yán)格數(shù)值數(shù)據(jù)類(lèi)型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數(shù)值數(shù)據(jù)類(lèi)型(FLOAT、REAL和DOUBLE PRECISION)。

關(guān)鍵字INT是INTEGER的同義詞,關(guān)鍵字DEC是DECIMAL的同義詞。

BIT數(shù)據(jù)類(lèi)型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

作為SQL標(biāo)準(zhǔn)的擴(kuò)展,MySQL也支持整數(shù)類(lèi)型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了需要的每個(gè)整數(shù)類(lèi)型的存儲(chǔ)和范圍。

類(lèi)型 大小 范圍(有符號(hào)) 范圍(無(wú)符號(hào)) 用途 TINYINT 1 字節(jié) (-128,127) (0,255) 小整數(shù)值 SMALLINT 2 字節(jié) (-32 768,32 767) (0,65 535) 大整數(shù)值 MEDIUMINT 3 字節(jié) (-8 388 608,8 388 607) (0,16 777 215) 大整數(shù)值 INT或INTEGER 4 字節(jié) (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數(shù)值 BIGINT 8 字節(jié) (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數(shù)值 FLOAT 4 字節(jié) (-3.402 823 466 E 38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E 38) 0,(1.175 494 351 E-38,3.402 823 466 E 38) 單精度 浮點(diǎn)數(shù)值 DOUBLE 8 字節(jié) (-1.797 693 134 862 315 7 E 308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E 308) 雙精度 浮點(diǎn)數(shù)值 DECIMAL 對(duì)DECIMAL(M,D) ,如果M>D,為M 2否則為D 2 依賴(lài)于M和D的值 依賴(lài)于M和D的值 小數(shù)值

2.日期和時(shí)間類(lèi)型

表示時(shí)間值的日期和時(shí)間類(lèi)型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每個(gè)時(shí)間類(lèi)型有一個(gè)有效值范圍和一個(gè)'零'值,當(dāng)指定不合法的MySQL不能表示的值時(shí)使用'零'值。

TIMESTAMP類(lèi)型有專(zhuān)有的自動(dòng)更新特性,將在后面描述。

類(lèi)型 大小 (*字節(jié))** 范圍 格式 用途 DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 時(shí)間值或持續(xù)時(shí)間 YEAR 1 1901/2155 YYYY 年份值 DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時(shí)間值 TIMESTAMP 4 1970-01-01 00:00:00/2037 年某時(shí) YYYYMMDD HHMMSS 混合日期和時(shí)間值,時(shí)間戳

3.字符串類(lèi)型

字符串類(lèi)型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。該節(jié)描述了這些類(lèi)型如何工作以及如何在查詢(xún)中使用這些類(lèi)型。

類(lèi)型 大小 用途 CHAR 0-255字節(jié) 定長(zhǎng)字符串 VARCHAR 0-65535 字節(jié) 變長(zhǎng)字符串 TINYBLOB 0-255字節(jié) 不超過(guò) 255 個(gè)字符的二進(jìn)制字符串 TINYTEXT 0-255字節(jié) 短文本字符串 BLOB 0-65 535字節(jié) 二進(jìn)制形式的長(zhǎng)文本數(shù)據(jù) TEXT 0-65 535字節(jié) 長(zhǎng)文本數(shù)據(jù) MEDIUMBLOB 0-16 777 215字節(jié) 二進(jìn)制形式的中等長(zhǎng)度文本數(shù)據(jù) MEDIUMTEXT 0-16 777 215字節(jié) 中等長(zhǎng)度文本數(shù)據(jù) LONGBLOB 0-4 294 967 295字節(jié) 二進(jìn)制形式的極大文本數(shù)據(jù) LONGTEXT 0-4 294 967 295字節(jié) 極大文本數(shù)據(jù)

CHAR和VARCHAR類(lèi)型類(lèi)似,但它們保存和檢索的方式不同。它們的最大長(zhǎng)度和是否尾部空格被保留等方面也不同。在存儲(chǔ)或檢索過(guò)程中不進(jìn)行大小寫(xiě)轉(zhuǎn)換。

BINARY和VARBINARY類(lèi)類(lèi)似于CHAR和VARCHAR,不同的是它們包含二進(jìn)制字符串而不要非二進(jìn)制字符串。也就是說(shuō),它們包含字節(jié)字符串而不是字符字符串。這說(shuō)明它們沒(méi)有字符集,并且排序和比較基于列值字節(jié)的數(shù)值值。

BLOB是一個(gè)二進(jìn)制大對(duì)象,可以容納可變數(shù)量的數(shù)據(jù)。有4種BLOB類(lèi)型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它們只是可容納值的最大長(zhǎng)度不同。

有4種TEXT類(lèi)型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。這些對(duì)應(yīng)4種BLOB類(lèi)型,有相同的最大長(zhǎng)度和存儲(chǔ)需求。

Enum('fds','fsa','fasf') :枚舉類(lèi)型

set(val1,val2,val3):集合類(lèi)型

3.庫(kù)表操作

1、MySQL觸發(fā)器的創(chuàng)建語(yǔ)法:CREATE[DEFINER = { 'user' | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON table_nameFOR EACH ROW[trigger_order]trigger_body2、MySQL創(chuàng)建語(yǔ)法中的關(guān)鍵詞解釋?zhuān)鹤侄?                    含義                                               可能的值DEFINER=           可選參數(shù),指定創(chuàng)建者,                               DEFINER='root@%'             默認(rèn)為當(dāng)前登錄用戶(hù)(CURRENT_USER);             該觸發(fā)器將以此參數(shù)指定的用戶(hù)執(zhí)行,                       DEFINER=CURRENT_USER                 所以需要考慮權(quán)限問(wèn)題;?trigger_name   觸發(fā)器名稱(chēng),最好由表名 觸發(fā)事件關(guān)鍵詞 觸發(fā)時(shí)間關(guān)鍵詞組成; trigger_time     觸發(fā)時(shí)間,在某個(gè)事件之前還是之后;                   BEFORE、AFTER?   INSERT:插入操作觸發(fā)器,INSERT、LOAD DATA、REPLACE時(shí)觸發(fā);   UPDATE:更新操作觸發(fā)器,UPDATE操作時(shí)觸發(fā);trigger_event 觸發(fā)事件,如插入時(shí)觸發(fā)、刪除時(shí)觸發(fā);           DELETE:刪除操作觸發(fā)器,DELETEREPLACE操作時(shí)觸發(fā);   INSERTUPDATE、DELETEtable_name          觸發(fā)操作時(shí)間的表名;  可選參數(shù),如果定義了多個(gè)具有相同觸發(fā)事件和觸法時(shí)間的觸發(fā)器時(shí)( 如:BEFORE UPDATE),默認(rèn)觸發(fā)順序與觸發(fā)器的創(chuàng)建順序一致,可以trigger_order 使用此參數(shù)來(lái)改變它們觸發(fā)順序。mysql 5.7.2起開(kāi)始支持此參數(shù)。 FOLLOWS:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之后激活;                 FOLLOWS、PRECEDES PRECEDES:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之前激活; trigger_body     觸發(fā)執(zhí)行的SQL語(yǔ)句內(nèi)容,一般以begin開(kāi)頭,end結(jié)尾            BEGIN .. END 觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLD,NEW觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLD,NEW:在trigger_body中,我們可以使用NEW表示將要插入的新行(相當(dāng)于MS SQL的INSERTED),OLD表示將要?jiǎng)h除的舊行(相當(dāng)于MS SQL的DELETED)。通過(guò)OLDNEW中獲取它們的字段內(nèi)容,方便在觸發(fā)操作中使用,下面是對(duì)應(yīng)事件是否支持OLD、NEW的對(duì)應(yīng)關(guān)系:事件     OLD   NEWINSERT   ×     √DELETE   √     ×UPDATE   √     √?由于UPDATE相當(dāng)于刪除舊行(OLD),然后插入新行(NEW),所以UPDATE同時(shí)支持OLD、NEW;DELIMITER $... --觸發(fā)器創(chuàng)建語(yǔ)句;$   --提交創(chuàng)建語(yǔ)句;DELIMITER ;??select * FROM information_schema.triggers;SHOW TRIGGERS; #查看觸發(fā)器-- 通過(guò)information_schema.triggers表查看觸發(fā)器:select * FROM information_schema.triggers;-- mysql 查看當(dāng)前數(shù)據(jù)庫(kù)的觸發(fā)器SHOW TRIGGERS;-- mysql 查看指定數(shù)據(jù)庫(kù)'people'的觸發(fā)器SHOW TRIGGERS FROM people;?創(chuàng)建測(cè)試表DROP TABLE IF EXISTS tb;CREATE TABLE IF NOT EXISTS tb(id INT,username CHAR(10),pass VARCHAR(20),ct INT);CREATE TABLE IF NOT EXISTS bt(fid INT,username CHAR(10),pass VARCHAR(20),ct INT);創(chuàng)建觸發(fā)器DELIMITER $#drop trigger if exists df_names$ 刪除前先判斷觸發(fā)器是否存在CREATE DEFINER =CURRENT_USERTRIGGER df_namesBEFORE INSERT ON tbAFTER UPDATE ON btFOR EACH ROWBEGIN   #set new.ct=new.id*5;   #SET @ct=12; 變量   #SET @pass='hjfd';   IF old.type=1 THEN UPDATE bt SET ct=old.ct WHERE fid=old.id;   ELSE IF old.type=2 THEN UPDATE bt SET pass=old.pass WHERE fid=old.id;END$DELIMITER;?測(cè)試INSERT INTO tb(id) VALUES(4);SELECT *FROM tb;?

4.索引

SET AUTOCOMMIT=off ;禁用或啟用事務(wù)的自動(dòng)提交模式  off ONSET SESSION AUTOCOMMIT = OFF; 禁用或啟用事務(wù)的session自動(dòng)提交模式 off ONSHOW VARIABLES LIKE '%auto%'; -- 查看變量狀態(tài)?執(zhí)行DML語(yǔ)句是其實(shí)就是開(kāi)啟一個(gè)事務(wù)只能回滾insert、deleteupdate語(yǔ)句對(duì)于create、drop、alter這些無(wú)法回滾事務(wù)只對(duì)DML有效果rollback,或者commit后事務(wù)就結(jié)束了自動(dòng)提交模式用于決定新事務(wù)如何及何時(shí)啟動(dòng)START TRANSACTION; 啟用自動(dòng)提交模式下顯式地啟動(dòng)事務(wù)COMMITROLLBACK;  禁用自動(dòng)提交模式顯式地提交或回滾-- 事務(wù) transaction 指一組sql語(yǔ)句-- 回退 rollback 指撤銷(xiāo)指定sql語(yǔ)句的過(guò)程-- 提交 commit 指將未存儲(chǔ)的sql語(yǔ)句結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)表-- 保留點(diǎn) savepoint 指事務(wù)處理中設(shè)置的臨時(shí)占位符,可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)?-- 控制事務(wù)處理# 開(kāi)始事務(wù)及回退 SELECT * FROM ordertotals;   # 查看ordertotals表顯示不為空START TRANSACTION;           # 開(kāi)始事務(wù)處理 DELETE FROM ordertotals;     # 刪除ordertotals表中所有行SELECT * FROM ordertotals;   # 查看ordertotals表顯示 為空ROLLBACK;                     # rollback語(yǔ)句回退 SELECT * FROM ordertotals;   # rollback后,再次查看ordertotals表顯示不為空?# commit 提交 START TRANSACTION;DELETE FROM orderitems WHERE order_num = 20010;DELETE FROM orders WHERE order_num = 20010;COMMIT;   # 僅在上述兩條語(yǔ)句不出錯(cuò)時(shí)寫(xiě)出更改 ?# savepoint 保留點(diǎn) # 創(chuàng)建保留點(diǎn)SAVEPOINT delete1;# 回退到保留點(diǎn) ROLLBACK TO delete1;# 釋放保留點(diǎn) RELEASE SAVEPOINT delete1;?-- 更改默認(rèn)的提交行為 SET autocommit = 0;  # 設(shè)置autocommit為0(假)指示MySQL不自動(dòng)提交更改

5.視圖

1、MySQL觸發(fā)器的創(chuàng)建語(yǔ)法:CREATE[DEFINER = { 'user' | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON table_nameFOR EACH ROW[trigger_order]trigger_body2、MySQL創(chuàng)建語(yǔ)法中的關(guān)鍵詞解釋?zhuān)鹤侄?                    含義                                               可能的值DEFINER=           可選參數(shù),指定創(chuàng)建者,                               DEFINER='root@%'             默認(rèn)為當(dāng)前登錄用戶(hù)(CURRENT_USER);             該觸發(fā)器將以此參數(shù)指定的用戶(hù)執(zhí)行,                       DEFINER=CURRENT_USER                 所以需要考慮權(quán)限問(wèn)題;?trigger_name   觸發(fā)器名稱(chēng),最好由表名 觸發(fā)事件關(guān)鍵詞 觸發(fā)時(shí)間關(guān)鍵詞組成; trigger_time     觸發(fā)時(shí)間,在某個(gè)事件之前還是之后;                   BEFORE、AFTER?   INSERT:插入操作觸發(fā)器,INSERTLOAD DATA、REPLACE時(shí)觸發(fā);   UPDATE:更新操作觸發(fā)器,UPDATE操作時(shí)觸發(fā);trigger_event 觸發(fā)事件,如插入時(shí)觸發(fā)、刪除時(shí)觸發(fā);           DELETE:刪除操作觸發(fā)器,DELETE、REPLACE操作時(shí)觸發(fā);   INSERT、UPDATEDELETEtable_name          觸發(fā)操作時(shí)間的表名;  可選參數(shù),如果定義了多個(gè)具有相同觸發(fā)事件和觸法時(shí)間的觸發(fā)器時(shí)( 如:BEFORE UPDATE),默認(rèn)觸發(fā)順序與觸發(fā)器的創(chuàng)建順序一致,可以trigger_order 使用此參數(shù)來(lái)改變它們觸發(fā)順序。mysql 5.7.2起開(kāi)始支持此參數(shù)。 FOLLOWS:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之后激活;                 FOLLOWS、PRECEDES PRECEDES:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之前激活; trigger_body     觸發(fā)執(zhí)行的SQL語(yǔ)句內(nèi)容,一般以begin開(kāi)頭,end結(jié)尾            BEGIN .. END 觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLD,NEW觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLD,NEW:在trigger_body中,我們可以使用NEW表示將要插入的新行(相當(dāng)于MS SQL的INSERTED),OLD表示將要?jiǎng)h除的舊行(相當(dāng)于MS SQL的DELETED)。通過(guò)OLDNEW中獲取它們的字段內(nèi)容,方便在觸發(fā)操作中使用,下面是對(duì)應(yīng)事件是否支持OLD、NEW的對(duì)應(yīng)關(guān)系:事件     OLD   NEWINSERT   ×     √DELETE   √     ×UPDATE   √     √?由于UPDATE相當(dāng)于刪除舊行(OLD),然后插入新行(NEW),所以UPDATE同時(shí)支持OLD、NEW;DELIMITER $... --觸發(fā)器創(chuàng)建語(yǔ)句;$   --提交創(chuàng)建語(yǔ)句;DELIMITER ;??select * FROM information_schema.triggers;SHOW TRIGGERS; #查看觸發(fā)器-- 通過(guò)information_schema.triggers表查看觸發(fā)器:select * FROM information_schema.triggers;-- mysql 查看當(dāng)前數(shù)據(jù)庫(kù)的觸發(fā)器SHOW TRIGGERS;-- mysql 查看指定數(shù)據(jù)庫(kù)'people'的觸發(fā)器SHOW TRIGGERS FROM people;?創(chuàng)建測(cè)試表DROP TABLE IF EXISTS tb;CREATE TABLE IF NOT EXISTS tb(id INT,username CHAR(10),pass VARCHAR(20),ct INT);CREATE TABLE IF NOT EXISTS bt(fid INT,username CHAR(10),pass VARCHAR(20),ct INT);創(chuàng)建觸發(fā)器DELIMITER $#drop trigger if exists df_names$ 刪除前先判斷觸發(fā)器是否存在CREATE DEFINER =CURRENT_USERTRIGGER df_namesBEFORE INSERT ON tbAFTER UPDATE ON btFOR EACH ROWBEGIN   #set new.ct=new.id*5;   #SET @ct=12; 變量   #SET @pass='hjfd';   IF old.type=1 THEN UPDATE bt SET ct=old.ct WHERE fid=old.id;   ELSE IF old.type=2 THEN UPDATE bt SET pass=old.pass WHERE fid=old.id;END$DELIMITER;?測(cè)試INSERT INTO tb(id) VALUES(4);SELECT *FROM tb;?

6.函數(shù)

SET AUTOCOMMIT=off ;禁用或啟用事務(wù)的自動(dòng)提交模式  off ONSET SESSION AUTOCOMMIT = OFF; 禁用或啟用事務(wù)的session自動(dòng)提交模式 off ONSHOW VARIABLES LIKE '%auto%'; -- 查看變量狀態(tài)?執(zhí)行DML語(yǔ)句是其實(shí)就是開(kāi)啟一個(gè)事務(wù)只能回滾insert、deleteupdate語(yǔ)句對(duì)于create、drop、alter這些無(wú)法回滾事務(wù)只對(duì)DML有效果rollback,或者commit后事務(wù)就結(jié)束了自動(dòng)提交模式用于決定新事務(wù)如何及何時(shí)啟動(dòng)START TRANSACTION; 啟用自動(dòng)提交模式下顯式地啟動(dòng)事務(wù)COMMITROLLBACK;  禁用自動(dòng)提交模式顯式地提交或回滾-- 事務(wù) transaction 指一組sql語(yǔ)句-- 回退 rollback 指撤銷(xiāo)指定sql語(yǔ)句的過(guò)程-- 提交 commit 指將未存儲(chǔ)的sql語(yǔ)句結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)表-- 保留點(diǎn) savepoint 指事務(wù)處理中設(shè)置的臨時(shí)占位符,可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)?-- 控制事務(wù)處理# 開(kāi)始事務(wù)及回退 SELECT * FROM ordertotals;   # 查看ordertotals表顯示不為空START TRANSACTION;           # 開(kāi)始事務(wù)處理 DELETE FROM ordertotals;     # 刪除ordertotals表中所有行SELECT * FROM ordertotals;   # 查看ordertotals表顯示 為空ROLLBACK;                     # rollback語(yǔ)句回退 SELECT * FROM ordertotals;   # rollback后,再次查看ordertotals表顯示不為空?# commit 提交 START TRANSACTION;DELETE FROM orderitems WHERE order_num = 20010;DELETE FROM orders WHERE order_num = 20010;COMMIT;   # 僅在上述兩條語(yǔ)句不出錯(cuò)時(shí)寫(xiě)出更改 ?# savepoint 保留點(diǎn) # 創(chuàng)建保留點(diǎn)SAVEPOINT delete1;# 回退到保留點(diǎn) ROLLBACK TO delete1;# 釋放保留點(diǎn) RELEASE SAVEPOINT delete1;?-- 更改默認(rèn)的提交行為 SET autocommit = 0;  # 設(shè)置autocommit為0(假)指示MySQL不自動(dòng)提交更改

7.游標(biāo)

創(chuàng)建、打開(kāi)、關(guān)閉游標(biāo) # 定義名為ordernumbers的游標(biāo),檢索所有訂單DELIMITER //CREATE PROCEDURE processorders()BEGIN    -- decalre the cursor 聲明游標(biāo)     declare ordernumbers CURSOR    FOR    SELECT order_num FROM orders;        -- open the cursor 打開(kāi)游標(biāo)    open ordernumbers;    -- close the cursor 關(guān)閉游標(biāo)    close ordernumbers;END //DELIMITER ;?-- 使用游標(biāo)數(shù)據(jù) # 例1:檢索 當(dāng)前行 的order_num列,對(duì)數(shù)據(jù)不做實(shí)際處理DELIMITER //CREATE PROCEDURE processorders()BEGIN?    -- declare local variables 聲明局部變量    DECLARE o INT;        -- decalre the cursor 聲明游標(biāo)     declare ordernumbers CURSOR    FOR    SELECT order_num FROM orders;        -- open the cursor 打開(kāi)游標(biāo)    open ordernumbers;        -- get order number 獲得訂單號(hào)     FETCH ordernumbers INTO o;    /*fetch檢索 當(dāng)前行 的order_num列(將自動(dòng)從第一行開(kāi)始)到一個(gè)名為o的局部聲明變量中。    對(duì)檢索出的數(shù)據(jù)不做任何處理。*/            -- close the cursor 關(guān)閉游標(biāo)    close ordernumbers;?END //DELIMITER ;?# 例2:循環(huán)檢索數(shù)據(jù),從第一行到最后一行,對(duì)數(shù)據(jù)不做實(shí)際處理DELIMITER //CREATE PROCEDURE processorders()BEGIN    -- declare local variables 聲明局部變量    DECLARE done BOOLEAN DEFAULT 0;    DECLARE o INT;       -- decalre the cursor 聲明游標(biāo)     declare ordernumbers CURSOR    FOR    SELECT order_num FROM orders;       -- declare continue handler    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done =1;    -- SQLSTATE '02000'是一個(gè)未找到條件,當(dāng)REPEAT由于沒(méi)有更多的行供循環(huán)而不能繼續(xù)時(shí),出現(xiàn)這個(gè)條件。        -- open the cursor 打開(kāi)游標(biāo)    open ordernumbers;        -- loop through all rows 遍歷所有行     REPEAT        -- get order number 獲得訂單號(hào)     FETCH ordernumbers INTO o;    -- FETCH在REPEAT內(nèi),因此它反復(fù)執(zhí)行直到done為真        -- end of loop    UNTIL done END REPEAT;        -- close the cursor 關(guān)閉游標(biāo)    close ordernumbers;?END //DELIMITER ;??# 例3:循環(huán)檢索數(shù)據(jù),從第一行到最后一行,對(duì)取出的數(shù)據(jù)進(jìn)行某種實(shí)際的處理DELIMITER //CREATE PROCEDURE processorders()BEGIN    -- declare local variables 聲明局部變量     DECLARE done BOOLEAN DEFAULT 0;    DECLARE o INT;    DECLARE t DECIMAL(8,2);        -- declare the cursor 聲明游標(biāo)    DECLARE ordernumbers CURSOR    FOR    SELECT order_num FROM orders;        -- declare continue handler    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;        -- create a table to store the results 新建表以保存數(shù)據(jù)    CREATE TABLE IF NOT EXISTS ordertotals    (order_num INT,total DECIMAL(8,2));        -- open the cursor 打開(kāi)游標(biāo)    OPEN ordernumbers;        -- loop through all rows 遍歷所有行    REPEAT        -- get order number 獲取訂單號(hào)    FETCH ordernumbers INTO o;        -- get the total for this order 計(jì)算訂單金額    CALL ordertotal(o,1,t);  # 參見(jiàn)23章代碼,已創(chuàng)建可使用        -- insert order and total into ordertotals 將訂單號(hào)、金額插入表ordertotals內(nèi)    INSERT INTO ordertotals(order_num,total) VALUES(o,t);        -- end of loop    UNTIL done END REPEAT;        -- close the cursor 關(guān)閉游標(biāo)    close ordernumbers;?END // DELIMITER ;# 調(diào)用存儲(chǔ)過(guò)程 precessorders()CALL processorders();# 輸出結(jié)果SELECT * FROM ordertotals;?

8.觸發(fā)器

1、MySQL觸發(fā)器的創(chuàng)建語(yǔ)法:CREATE[DEFINER = { 'user' | CURRENT_USER }]TRIGGER trigger_nametrigger_time trigger_eventON table_nameFOR EACH ROW[trigger_order]trigger_body2、MySQL創(chuàng)建語(yǔ)法中的關(guān)鍵詞解釋?zhuān)鹤侄?                     含義                                               可能的值DEFINER=            可選參數(shù),指定創(chuàng)建者,                               DEFINER='root@%'              默認(rèn)為當(dāng)前登錄用戶(hù)(CURRENT_USER);              該觸發(fā)器將以此參數(shù)指定的用戶(hù)執(zhí)行,                       DEFINER=CURRENT_USER                  所以需要考慮權(quán)限問(wèn)題;?trigger_name   觸發(fā)器名稱(chēng),最好由表名 觸發(fā)事件關(guān)鍵詞 觸發(fā)時(shí)間關(guān)鍵詞組成; trigger_time     觸發(fā)時(shí)間,在某個(gè)事件之前還是之后;                   BEFORE、AFTER?                                   INSERT:插入操作觸發(fā)器,INSERT、LOAD DATA、REPLACE時(shí)觸發(fā);                                   UPDATE:更新操作觸發(fā)器,UPDATE操作時(shí)觸發(fā);trigger_event  觸發(fā)事件,如插入時(shí)觸發(fā)、刪除時(shí)觸發(fā);              DELETE:刪除操作觸發(fā)器,DELETE、REPLACE操作時(shí)觸發(fā);                                   INSERT、UPDATE、DELETEtable_name          觸發(fā)操作時(shí)間的表名;         可選參數(shù),如果定義了多個(gè)具有相同觸發(fā)事件和觸法時(shí)間的觸發(fā)器時(shí)(        如:BEFORE UPDATE),默認(rèn)觸發(fā)順序與觸發(fā)器的創(chuàng)建順序一致,可以trigger_order   使用此參數(shù)來(lái)改變它們觸發(fā)順序。mysql 5.7.2起開(kāi)始支持此參數(shù)。        FOLLOWS:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之后激活;                  FOLLOWS、PRECEDES        PRECEDES:當(dāng)前創(chuàng)建觸發(fā)器在現(xiàn)有觸發(fā)器之前激活;                trigger_body     觸發(fā)執(zhí)行的SQL語(yǔ)句內(nèi)容,一般以begin開(kāi)頭,end結(jié)尾            BEGIN .. END         觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLDNEW觸發(fā)執(zhí)行語(yǔ)句內(nèi)容(trigger_body)中的OLD,NEW:在trigger_body中,我們可以使用NEW表示將要插入的新行(相當(dāng)于MS SQL的INSERTED),OLD表示將要?jiǎng)h除的舊行(相當(dāng)于MS SQL的DELETED)。通過(guò)OLD,NEW中獲取它們的字段內(nèi)容,方便在觸發(fā)操作中使用,下面是對(duì)應(yīng)事件是否支持OLD、NEW的對(duì)應(yīng)關(guān)系:事件     OLD   NEWINSERT    ×     √DELETE    √     ×UPDATE    √     √?由于UPDATE相當(dāng)于刪除舊行(OLD),然后插入新行(NEW),所以UPDATE同時(shí)支持OLD、NEW;DELIMITER $... --觸發(fā)器創(chuàng)建語(yǔ)句;$   --提交創(chuàng)建語(yǔ)句;DELIMITER ;??select * FROM information_schema.triggers;SHOW TRIGGERS; #查看觸發(fā)器-- 通過(guò)information_schema.triggers表查看觸發(fā)器:select * FROM information_schema.triggers;-- mysql 查看當(dāng)前數(shù)據(jù)庫(kù)的觸發(fā)器SHOW TRIGGERS;-- mysql 查看指定數(shù)據(jù)庫(kù)'people'的觸發(fā)器SHOW TRIGGERS FROM people;?創(chuàng)建測(cè)試表DROP TABLE IF EXISTS tb;CREATE TABLE IF NOT EXISTS tb(id INT,username CHAR(10),pass VARCHAR(20),ct INT);CREATE TABLE IF NOT EXISTS bt(fid INT,username CHAR(10),pass VARCHAR(20),ct INT);創(chuàng)建觸發(fā)器DELIMITER $#drop trigger if exists df_names$ 刪除前先判斷觸發(fā)器是否存在CREATE  DEFINER =CURRENT_USERTRIGGER df_namesBEFORE INSERT ON tbAFTER UPDATE ON btFOR EACH ROWBEGIN   #set new.ct=new.id*5;   #SET @ct=12; 變量   #SET @pass='hjfd';   IF old.type=1 THEN    UPDATE bt SET ct=old.ct WHERE fid=old.id;   ELSE IF old.type=2 THEN    UPDATE bt SET pass=old.pass WHERE fid=old.id;END$DELIMITER;?測(cè)試INSERT INTO tb(id) VALUES(4);SELECT *FROM tb;?

9.存儲(chǔ)過(guò)程

SET AUTOCOMMIT=off ;禁用或啟用事務(wù)的自動(dòng)提交模式 off ONSET SESSION AUTOCOMMIT = OFF; 禁用或啟用事務(wù)的session自動(dòng)提交模式 off ONSHOW VARIABLES LIKE '%auto%'; -- 查看變量狀態(tài)?執(zhí)行DML語(yǔ)句是其實(shí)就是開(kāi)啟一個(gè)事務(wù)只能回滾insert、deleteupdate語(yǔ)句對(duì)于createdropalter這些無(wú)法回滾事務(wù)只對(duì)DML有效果rollback,或者commit后事務(wù)就結(jié)束了自動(dòng)提交模式用于決定新事務(wù)如何及何時(shí)啟動(dòng)START TRANSACTION; 啟用自動(dòng)提交模式下顯式地啟動(dòng)事務(wù)COMMITROLLBACK; 禁用自動(dòng)提交模式顯式地提交或回滾-- 事務(wù) transaction 指一組sql語(yǔ)句-- 回退 rollback 指撤銷(xiāo)指定sql語(yǔ)句的過(guò)程-- 提交 commit 指將未存儲(chǔ)的sql語(yǔ)句結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)表-- 保留點(diǎn) savepoint 指事務(wù)處理中設(shè)置的臨時(shí)占位符,可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)?-- 控制事務(wù)處理# 開(kāi)始事務(wù)及回退 SELECT * FROM ordertotals;   # 查看ordertotals表顯示不為空START TRANSACTION;           # 開(kāi)始事務(wù)處理 DELETE FROM ordertotals;     # 刪除ordertotals表中所有行SELECT * FROM ordertotals;   # 查看ordertotals表顯示 為空ROLLBACK;                     # rollback語(yǔ)句回退 SELECT * FROM ordertotals;   # rollback后,再次查看ordertotals表顯示不為空?# commit 提交 START TRANSACTION;DELETE FROM orderitems WHERE order_num = 20010;DELETE FROM orders WHERE order_num = 20010;COMMIT;   # 僅在上述兩條語(yǔ)句不出錯(cuò)時(shí)寫(xiě)出更改 ?# savepoint 保留點(diǎn) # 創(chuàng)建保留點(diǎn)SAVEPOINT delete1;# 回退到保留點(diǎn) ROLLBACK TO delete1;# 釋放保留點(diǎn) RELEASE SAVEPOINT delete1;?-- 更改默認(rèn)的提交行為 SET autocommit = 0;  # 設(shè)置autocommit為0(假)指示MySQL不自動(dòng)提交更改

10.事務(wù)

SET AUTOCOMMIT=off ;禁用或啟用事務(wù)的自動(dòng)提交模式  off ONSET SESSION AUTOCOMMIT = OFF; 禁用或啟用事務(wù)的session自動(dòng)提交模式 off ONSHOW VARIABLES LIKE '%auto%'; -- 查看變量狀態(tài)?執(zhí)行DML語(yǔ)句是其實(shí)就是開(kāi)啟一個(gè)事務(wù)只能回滾insert、deleteupdate語(yǔ)句對(duì)于create、drop、alter這些無(wú)法回滾事務(wù)只對(duì)DML有效果rollback,或者commit后事務(wù)就結(jié)束了自動(dòng)提交模式用于決定新事務(wù)如何及何時(shí)啟動(dòng)START TRANSACTION; 啟用自動(dòng)提交模式下顯式地啟動(dòng)事務(wù)COMMITROLLBACK;  禁用自動(dòng)提交模式顯式地提交或回滾-- 事務(wù) transaction 指一組sql語(yǔ)句-- 回退 rollback 指撤銷(xiāo)指定sql語(yǔ)句的過(guò)程-- 提交 commit 指將未存儲(chǔ)的sql語(yǔ)句結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)表-- 保留點(diǎn) savepoint 指事務(wù)處理中設(shè)置的臨時(shí)占位符,可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)?-- 控制事務(wù)處理# 開(kāi)始事務(wù)及回退 SELECT * FROM ordertotals;   # 查看ordertotals表顯示不為空START TRANSACTION;           # 開(kāi)始事務(wù)處理 DELETE FROM ordertotals;     # 刪除ordertotals表中所有行SELECT * FROM ordertotals;   # 查看ordertotals表顯示 為空ROLLBACK;                     # rollback語(yǔ)句回退 SELECT * FROM ordertotals;   # rollback后,再次查看ordertotals表顯示不為空?# commit 提交 START TRANSACTION;DELETE FROM orderitems WHERE order_num = 20010;DELETE FROM orders WHERE order_num = 20010;COMMIT;   # 僅在上述兩條語(yǔ)句不出錯(cuò)時(shí)寫(xiě)出更改 ?# savepoint 保留點(diǎn) # 創(chuàng)建保留點(diǎn)SAVEPOINT delete1;# 回退到保留點(diǎn) ROLLBACK TO delete1;# 釋放保留點(diǎn) RELEASE SAVEPOINT delete1;?-- 更改默認(rèn)的提交行為 SET autocommit = 0;  # 設(shè)置autocommit為0(假)指示MySQL不自動(dòng)提交更改

11.備份與還原

備份一個(gè)數(shù)據(jù)庫(kù):mysqldump -u root -p --opt people> df.txt  #--opt優(yōu)化執(zhí)行速度備份兩個(gè)數(shù)據(jù)庫(kù):mysqldump -u root -p --opt --databases people hw > all.txt備份全部數(shù)據(jù)庫(kù):mysqldump -u root -p --opt --all-DATABASES > all.txt恢復(fù)數(shù)據(jù)庫(kù):mysqldump -u root -p --opt --databases people hw < all.txt1. 導(dǎo)出一張表mysqldump -u用戶(hù)名 -p密碼 庫(kù)名 表名 > 文件名(D:/a.sql)2. 導(dǎo)出多張表mysqldump -u用戶(hù)名 -p密碼 庫(kù)名 表123 > 文件名(D:/a.sql)3. 導(dǎo)出所有表mysqldump -u用戶(hù)名 -p密碼 庫(kù)名 > 文件名(D:/a.sql)4. 導(dǎo)出一個(gè)庫(kù)mysqldump -u用戶(hù)名 -p密碼 --lock-ALL-TABLES --database 庫(kù)名 > 文件名(D:/a.sql)可以-w攜帶WHERE條件

12.用戶(hù)賬號(hào)

創(chuàng)建賬戶(hù):CREATE USER IF NOT EXISTS 'hw'@'localhost' IDENTIFIED BY '5201314'; #創(chuàng)建用戶(hù)hw,密碼5201314?給該用戶(hù)授予所有權(quán)限并可授權(quán)給其他用戶(hù):GRANT ALL PRIVILEGES ON people.df TO 'hw'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;?重命名用戶(hù)名: RENAME USER 'hw' TO 'gh'; 必須將localhost改為%如果希望該用戶(hù)能夠在任何機(jī)器上登陸mysql,則將localhost改為 '%' 授權(quán)給其他用戶(hù) WITH GRANT OPTION privileges包括:    alter:修改數(shù)據(jù)庫(kù)的表    create:創(chuàng)建新的數(shù)據(jù)庫(kù)或表    delete:刪除表數(shù)據(jù)    drop:刪除數(shù)據(jù)庫(kù)/表    index:創(chuàng)建/刪除索引    insert:添加表數(shù)據(jù)    select:查詢(xún)表數(shù)據(jù)    update:更新表數(shù)據(jù)    all:允許任何操作    usage:只允許登錄?刷新權(quán)限,使新創(chuàng)建的用戶(hù)能夠使用:    FLUSH PRIVILEGES;                   收回用戶(hù)權(quán)限: REVOKE ALL PRIVILEGES ON people.df FROM 'root'@'localhost';          刪除用戶(hù):    DROP USER IF EXISTS 'hw'@'localhost';?設(shè)置指定用戶(hù)的密碼:SET PASSWORD FOR'hw'@'localhost' = PASSWORD('123321');                 UPDATE USER SET PASSWORD =  PASSWORD('123321') WHERE USER = 'hw';?                  設(shè)置密碼:    SET PASSWORD = PASSWORD('123321');         

13.其他

SHOW STATUS;顯示廣泛的服務(wù)器狀態(tài)信息SHOW PROCEDURE STATUS;SHOW GRANTS;顯示授予用戶(hù)的安全權(quán)限SHOW ERRORS;顯示服務(wù)器的錯(cuò)誤信息SHOW WARNINGS;顯示服務(wù)器的警告信息SHOW PROCESSLIST;顯示哪些線程正在運(yùn)行SHOW VARIABLES;顯示系統(tǒng)變量信息SELECT DATABASE(); 查看當(dāng)前數(shù)據(jù)庫(kù)SELECT NOW(), USER(), VERSION():顯示當(dāng)前時(shí)間、用戶(hù)名、數(shù)據(jù)庫(kù)版本SHOW ENGINES 引擎名 {LOGS|STATUS}:顯示存儲(chǔ)引擎的日志和狀態(tài)信息SHOW VARIABLES LIKE 'character%'; SHOW VARIABLES LIKE 'collation%'; 確定所用系統(tǒng)的字符集和校對(duì)SHOW VARIABLES LIKE 'character_set_client%';       客戶(hù)端向服務(wù)器發(fā)送數(shù)據(jù)時(shí)使用的編碼SHOW VARIABLES LIKE 'character_set_results%';       服務(wù)器端將結(jié)果返回給客戶(hù)端所使用的編碼SHOW VARIABLES LIKE 'character_set_connection%';    連接層編碼SHOW CHARACTER SET;查看所支持的字符集完整列表SHOW COLLATION;查看所支持校對(duì)的完整列表,以及它們適用的字符集?SET character_set_client = gbk;   SET character_set_results = gbk;SET character_set_connection = gbk;SET NAMES GBK;  -- 相當(dāng)于完成以上三個(gè)設(shè)置?創(chuàng)建window服務(wù):sc CREATE mysql binPath= mysqld_bin_path數(shù)據(jù)文件目錄:DATA DIRECTORY='目錄'索引文件目錄:INDEX DIRECTORY = '目錄'

希望能幫到大家,謝謝?。?!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Oracle系統(tǒng)權(quán)限的分類(lèi)
觸發(fā)器
SQL觸發(fā)器語(yǔ)法
《SQLServer數(shù)據(jù)庫(kù)應(yīng)用基礎(chǔ)教程》第九章觸發(fā)器及其應(yīng)用
SQL中Truncate的用法
規(guī)則和觸發(fā)器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服