數(shù)據(jù)庫MySQL的程序員使用指導(dǎo)

2023-01-08 12:09:30 來源:51CTO博客

前言:MySQL是開源數(shù)據(jù)庫的代表,為程序員和整個(gè)IT行業(yè)帶來了巨大貢獻(xiàn)。盡管目前mysql的擁有者對(duì)mysql的未來搖擺不定,但是業(yè)界還是一直關(guān)注mysql的動(dòng)態(tài)。本文首先介紹了mysql的歷史、關(guān)聯(lián)版本、安裝配置,然后介紹常用命令,最后介紹了兩種開發(fā)mysql腳本的工具。


(資料圖片僅供參考)


1.MySQL簡介


?Mysql是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),最早由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件。

MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。

但是,隨著 MySQL 被 Oracle 收購,MySQL 的用戶和開發(fā)者開始質(zhì)疑開源數(shù)據(jù)庫的命運(yùn),與此同時(shí)他們開始尋找替代品。

MySQL數(shù)據(jù)庫的歷史可以追溯到1979年,那時(shí)Bill Gates退學(xué)沒多久,微軟公司也才剛剛起步,而Larry Ellison的Oracle公司 也才成立不久。那個(gè)時(shí)候有一個(gè)天才程序員Monty Widenius為一個(gè)名為TcX的小公司打工,并且用BASIC設(shè)計(jì)了一個(gè)報(bào)表工具,使其可以在4MHz主頻和16KB內(nèi)存的計(jì)算機(jī)上運(yùn)行。沒過多久,Monty又將此工具用C語言進(jìn)行了重新編寫并移植到了UNIX平臺(tái)上。當(dāng)時(shí), 這只是一個(gè)很底層且僅面向報(bào)表的存儲(chǔ)引擎,名叫UNIREG。最初的UNIREG是運(yùn)行在瑞典人制造的ABC800計(jì)算機(jī)上的。ABC800的內(nèi)存只有32KB,CPU是頻率只有4MHz的Z80。在1983年Monty Widenius遇到了David Axmark,兩人相見恨晚,開始合作運(yùn)營TcX,Monty Widenius負(fù)責(zé)技術(shù),David Axmark負(fù)責(zé)搞管理。后來TcX將UNIREG移植到其他更加強(qiáng)大的硬件平臺(tái),主要是Sun的平臺(tái)。雖然TcX這個(gè)小公司資源有限,但Monty Widenius天賦極高,面對(duì)資源有限的不利條件,反而更能發(fā)揮他的潛能。Monty Widenius總是力圖寫出最高效的代碼,并因此養(yǎng)成了習(xí)慣。與Monty Widenius在一起的還有一些別的同事,很少有人能堅(jiān)持把那些代碼持續(xù)寫到20年后,而Monty Widenius卻做到了。

1990年,Monty接到了一個(gè)項(xiàng)目,客戶需要為當(dāng)時(shí)的UNIREG提供更加通用的SQL接口,當(dāng)時(shí)有人提議直接使用商用數(shù)據(jù)庫, 但是Monty Widenius覺得商用數(shù)據(jù)庫的速度難以令人滿意。于是Monty Widenius找到了David Hughes(mSQL的發(fā)明人)商討合作事宜。想借助于mSQL的代碼,將它集成到自己的存儲(chǔ)引擎中。然而令人失望的是,在經(jīng)過一番測試后,他們發(fā)現(xiàn)mSQL的速度并不盡如人 意,無法滿足客戶的需求。于是Monty Widenius雄心大起,決心自己重寫一個(gè)SQL支持。從此MySQL就開始誕生了。

MySQL命名的由來:Monty Widenius有一個(gè)女兒,名叫My Widenius,因此他將自己開發(fā)的數(shù)據(jù)庫命名為MySQL。Monty還有一個(gè)兒子,名為Max,因此在2003年,SAP公司與MySQL公司建立合作伙伴關(guān)系后,Monty Widenius又將與SAP合作開發(fā)的數(shù)據(jù)庫命名為 MaxDB。而現(xiàn)在的MariaDB中的Maria便是Monty Widenius的小孫女的名字。

MaxDB是一種企業(yè)級(jí)數(shù)據(jù)庫管理系統(tǒng)(DBMS),以前稱為SAPDB,是著名的企業(yè)管理軟件供應(yīng)商SAP公司的自有數(shù)據(jù)庫技術(shù),并由SAP公司開發(fā)和支持。2003年,SAP AG和MySQL AB確立了合作伙伴關(guān)系,并將數(shù)據(jù)庫系統(tǒng)重命名為MaxDB。自此以后,MaxDB 的開發(fā)一直由SAP開發(fā)者團(tuán)隊(duì)負(fù)責(zé),MaxDB是能夠承受高負(fù)載的開源數(shù)據(jù)庫,它適合于OLAP和OLTP應(yīng)用,并能提供高可靠性、可用性 、擴(kuò)展性和非常完善的特性集。

MariaDB數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個(gè)分支,主要由開源社區(qū)在維護(hù),采用GPL授權(quán)許可。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲(chǔ)引擎方面,使用XtraDB來代替MySQL的InnoDB。

MySQL官方logo是小海豚,名叫:sakila(塞拉),它是由MySQL AB的創(chuàng)始人從用戶在“海豚命名”的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲斯威士蘭的開源軟件開發(fā)者Ambrose Twebaze提供的。根據(jù)Ambrose所說,Sakila來自一種叫SiSwati 的斯威士蘭方言,也是在Ambrose的家鄉(xiāng)烏干達(dá)附近的坦桑尼亞的Arusha的一個(gè)小鎮(zhèn)的名字。


2.下載安裝和配置?


1、下載mysql?

下載地址:?

??https://dev.mysql.com/downloads/mysql/???

選5.7版本?

2、安裝mysql?

解壓到D:\mysql5727x64?

(注:Ubuntu下使用apt安裝?

sudo apt-get install mysql-server?

sudo apt-get install mysql-client?

sudo apt-get install libmysqlclient-dev?

)?

3、設(shè)置mysql?

修改環(huán)境變量:?

MYSQL_HOME=D:\mysql5727x64?

PATH增加%MYSQL_HOME%\bin?

修改設(shè)置文件D:\mysql5727x64\my.ini為:?

[mysql]?# 設(shè)置mysql客戶端默認(rèn)字符集?default-character-set=utf8 ?[mysqld]?#設(shè)置3306端口?port = 3306 ?# 設(shè)置mysql的安裝目錄?basedir=D:/mysql5727x64?# 設(shè)置mysql數(shù)據(jù)庫的數(shù)據(jù)的存放目錄?datadir=D:/mysql5727x64/data?# 允許最大連接數(shù)?max_cnotallow=10?# 服務(wù)端使用的字符集默認(rèn)為8比特編碼的latin1字符集?character-set-server=utf8?# 創(chuàng)建新表時(shí)將使用的默認(rèn)存儲(chǔ)引擎?default-storage-engine=INNODB?explicit_defaults_for_timestamp=true?# 全局開啟group by?sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

(注:?

Ubuntu 16.02下修改mysql配置?

vim /etc/mysql/mysql.conf.d/mysqld.cnf?

新增一個(gè)大小寫不敏感的配置:?

)?

4、初始化數(shù)據(jù)庫?

以管理員身份進(jìn)入cmd:?

執(zhí)行:?

mysqld --initialize --console?

--initialize也可以使用--initialize-insecure代替,區(qū)別在于--initialize隨機(jī)生成的密碼會(huì)過期。?

5、安裝服務(wù)?

mysqld install?

或者采用--install代替,例如指定服務(wù)名稱:?

mysqld --install mysql-test?

執(zhí)行后會(huì)產(chǎn)生一個(gè)密碼,應(yīng)保存起來:?

6、啟動(dòng)服務(wù)和修改密碼?

啟動(dòng)服務(wù):

net start mysql

修改密碼:

mysqladmin -u root -ppfsJQQhQ1m?p password radar

進(jìn)入命令行:?

mysql -uroot -pradar?

7、jdbc驅(qū)動(dòng)?

在STS中,如果使用maven管理依賴包,則在POM綁定jdbc驅(qū)動(dòng)。?

錯(cuò)誤1:?

Loading class ’com.mysql.jdbc.Driver’. This is deprecated.?

The new driver class is `com.mysql.cj.jdbc.Driver’.?

The driver is automatically registered via the SPI and manual?

loading of the driver class is generally unnecessary.?

解決方案:?

原因是舊版本的‘com.mysql.jdbc.Driver’已經(jīng)棄用?

需要使用新的驅(qū)動(dòng)程序類`com.mysql.cj.jdbc.Driver’?

驅(qū)動(dòng)程序是通過SPI自動(dòng)注冊(cè)的,手動(dòng)加載驅(qū)動(dòng)程序類通常是不必要的。?

錯(cuò)誤2:?

Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value "?й???????" is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the "serverTimezone" configuration property) to use a more specifc time zone value if you want to utilize time zone support.?

解決辦法:?

當(dāng)spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver時(shí),連接串改為:?

spring.datasource.url=jdbc:mysql://localhost:3306/db_activiti?serverTimeznotallow=Asia/Chongqing&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&verifyServerCertificate=false&autoRecnotallow=true&autoRecnotallow=true&allowMultiQueries=true?


2.常用命令?


2.1 基礎(chǔ)命令?

1、顯示數(shù)據(jù)庫列表。

show databases;?

2、顯示庫中的數(shù)據(jù)表:

use mysql;show tables;?

3、顯示數(shù)據(jù)表的結(jié)構(gòu):

describe 表名; --縮寫desc

4、建庫:

create database 庫名;?

5、建表:

use 庫名;create table 表名 (字段設(shè)定列表);?

6、刪庫和刪表:

drop database 庫名;drop table 表名;?

7、將表中記錄清空:

delete from 表名; --這個(gè)清空表只是把數(shù)據(jù)表內(nèi)容數(shù)據(jù)清掉,自增id不會(huì)被清掉,自增id會(huì)保留truncate table 表名; --成功返回0,自增id也一同會(huì)被清掉

truncate與delete的區(qū)別:

a.事務(wù):truncate是不可以rollback的,但是delete是可以rollback的;原因:truncate刪除整表數(shù)據(jù)(ddl語句,隱式提交),delete是一行一行的刪除,可以rollback

b.效果:truncate刪除后將重新水平線和索引(id從零開始) ,delete不會(huì)刪除索引

c.truncate 不能觸發(fā)任何Delete觸發(fā)器。

d.delete 刪除可以返回行數(shù)

8、顯示表中的記錄:

select * from 表名

?9、連接MySQL

mysql -h 主機(jī)地址 -u用戶名 -p用戶密碼

連接到本機(jī)上的 MySQL。

mysql -uroot -pmysql;

連接到遠(yuǎn)程主機(jī)上的 MYSQL。

mysql -h 127.0.0.1 -uroot -pmysql;

連接到遠(yuǎn)程主機(jī)上的MYSQL。假設(shè)遠(yuǎn)程主機(jī)的IP為:110.110.110.110,用戶名為root,密碼為abcd123。則鍵入以下命令:

mysql -h110.110.110.110 -u root -p 123; --(注:u與root之間可以不用加空格,其它也一樣)

10、退出MYSQL命令?

exit --(回車)

11、修改新密碼?

(1)update user set password=PASSWORD("新密碼") where user="用戶名";?

在終端輸入:mysql -u用戶名 -p密碼,回車進(jìn)入Mysql。?

> use mysql;?

> update user set password=PASSWORD("新密碼") where user="用戶名";?

> flush privileges; #更新權(quán)限?

> quit; #退出?

(2)mysqladmin -u用戶名 -p舊密碼 password 新密碼?

(3)alter user test identified by 密碼;?

(4)set password for test=密碼;?

(5)set password for test=password("密碼");?

12、顯示當(dāng)前的user:?

mysql> SELECT USER();?

13、增加新用戶?

格式:grant select on 數(shù)據(jù)庫.* to 用戶名@登錄主機(jī) identified by “密碼”(1)增加一個(gè)用戶test1密碼為abc,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫有查詢、插入、修改、刪除的權(quán)限。首先用root用戶連入MYSQL,然后鍵入以下命令:?

grant select,insert,update,delete on *.* to test1”%" Identified by “abc”;

但增加的用戶是十分危險(xiǎn)的,你想如某個(gè)人知道test1的密碼,那么他就可以在internet上的任何一臺(tái)電腦上登錄你的mysql數(shù)據(jù)庫并對(duì)你的數(shù)據(jù)可以為所欲為了,解決辦法見2。(2)增加一個(gè)用戶test2密碼為abc,讓他只可以在localhost上登錄,并可以對(duì)數(shù)據(jù)庫mydb進(jìn)行查詢、插入、修改、刪除的操作(localhost指本地主機(jī),即MYSQL數(shù)據(jù)庫所在的那臺(tái)主機(jī)),?

這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數(shù)據(jù)庫,只能通過MYSQL主機(jī)上的web頁來訪問了。?

grant select,insert,update,delete on mydb.* to test2@localhost identifiedby “abc”;

如果你不想test2有密碼,可以再打一個(gè)命令將密碼消掉。?

grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;

14、刪除用戶?

mysql -u用戶名 -p密碼?

mysql>delete from user where user="用戶名" and host="localhost";?

mysql>flush privileges;?

2.2 高級(jí)操作?

1、存儲(chǔ)過程?

(1)調(diào)用?

mysql> CALL procedureName(paramentList);例:mysql> CALL addMoney(12, 500);?

(2)查看名稱?

方法一:mysql> SELECT `name` FROM mysql.proc WHERE db = "your_db_name" AND `type` = "PROCEDURE";?

方法二:mysql> show procedure status;?

(3)刪除?

mysql> DROP PROCEDURE procedure_name;?

mysql> DROP PROCEDURE IF EXISTS procedure_name;?

(4)查看定義?

mysql> SHOW CREATE PROCEDURE proc_name;?

mysql> SHOW CREATE FUNCTION func_name;---------- 示例一-----------?

mysql> DELIMITER $$?

mysql> USE `db_name`$$ //選擇數(shù)據(jù)庫?

mysql> DROP PROCEDURE IF EXISTS `addMoney`$$ //如果存在同名存儲(chǔ)過程,則刪除之?

mysql> CREATE DEFINER= `root`@`localhost` PROCEDURE `addMoney`(IN xid INT(5),IN xmoney INT(6))?

mysql> BEGIN?

mysql> UPDATE USER u SET u.money = u.money + xmoney WHERE u.id = xid; //分號(hào)";"不會(huì)導(dǎo)致語句執(zhí)行,因?yàn)楫?dāng)前的分割符被定義為$$?

mysql> END$$ //終止?

mysql> DELIMITER ; //把分割符改回分號(hào)";"mysql> call addMoney(5,1000); //執(zhí)行存儲(chǔ)過程---------- 示例二-----------?

mysql> delimiter //?

mysql> create procedure proc_name (in parameter integer)?

mysql> begin?

mysql> if parameter=0 then?

mysql> select * from user order by id asc;?

mysql> else?

mysql> select * from user order by id desc;?

mysql> end if;?

mysql> end;?

mysql> // //此處“//”為終止符?

mysql> delimiter ;?

mysql> show warnings;?

mysql> call proc_name(1);?

mysql> call proc_name(0);?

2、建表?

命令:create table <表名> (<字段名 1> <類型 1> [,..<字段名 n> <類型 n>]);?

例子:?

mysql> create table MyClass(?

> id int(4) not null primary key auto_increment,?

> name char(20) not null,?

> sex int(4) not null default "0",?

> degree double(16,2));?

3、插入數(shù)據(jù)?

命令:insert into <表名> [( <字段名 1>[,..<字段名 n > ])] values ( 值 1 )[, ( 值 n )]?

例子:?

mysql> insert into MyClass values(1,"Tom",96.45),(2,"Joan",82.99), (2,"Wang", 96.59);?

4、查詢所有行?

mysql> select * from MyClass;?

5、查詢前幾行數(shù)據(jù)?

例如:查看表 MyClass 中前 2 行數(shù)據(jù)?

mysql> select * from MyClass order by id limit 0,2;?

或者?

mysql> select * from MyClass limit 0,2;?

6、刪除表中數(shù)據(jù)?

命令:delete from 表名 where 表達(dá)式?

例如:刪除表 MyClass 中編號(hào)為 1 的記錄?

mysql> delete from MyClass where id=1;?

7、修改表中數(shù)據(jù)?

命令:update 表名 set 字段=新值,... where 條件?

mysql> update MyClass set name="Mary" where id=1;?

8、在表中增加字段?

命令:alter table 表名 add 字段 類型 其他;?

例如:在表 MyClass 中添加了一個(gè)字段 passtest,類型為 int(4),默認(rèn)值為 0?

mysql> alter table MyClass add passtest int(4) default "0"?

9、更改表名?

命令:rename table 原表名 to 新表名;?

例如:在表 MyClass 名字更改為 YouClass?

mysql> rename table MyClass to YouClass;?

10、更新字段內(nèi)容?

命令:update 表名 set 字段名 = 新內(nèi)容?

update 表名 set 字段名 = replace(字段名, "舊內(nèi)容", "新內(nèi)容");?

例如:文章前面加入 4 個(gè)空格?

update article set cnotallow=concat(" ", content);?

11、從數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)庫文件?

用“mysqldump”命令?

首先進(jìn)入 DOS 界面,然后進(jìn)行下面操作。?

1)導(dǎo)出所有數(shù)據(jù)庫?

格式:mysqldump -u [數(shù)據(jù)庫用戶名] -p -A>[備份文件的保存路徑]?

2)導(dǎo)出數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)?

格式:mysqldump -u [數(shù)據(jù)庫用戶名] -p [要備份的數(shù)據(jù)庫名稱]>[備份文件的保存路徑]?

舉例:?

例 1:將數(shù)據(jù)庫 mydb 導(dǎo)出到 e:\MySQL\mydb.sql 文件中。?

打開開始->運(yùn)行->輸入“cmd”,進(jìn)入命令行模式。?

c:\> mysqldump -h localhost -u root -p mydb >e:\MySQL\mydb.sql?

然后輸入密碼,等待一會(huì)導(dǎo)出就成功了,可以到目標(biāo)文件中檢查是否成功。?

例 2:將數(shù)據(jù)庫 mydb 中的 mytable 導(dǎo)出到 e:\MySQL\mytable.sql 文件中。?

c:\> mysqldump -h localhost -u root -p mydb mytable>e:\MySQL\mytable.sql?

例 3:將數(shù)據(jù)庫 mydb 的結(jié)構(gòu)導(dǎo)出到 e:\MySQL\mydb_stru.sql 文件中。?

c:\> mysqldump -h localhost -u root -p mydb --add-drop-table >e:\MySQL\mydb_stru.sql?

備注:-h localhost 可以省略,其一般在虛擬主機(jī)上用。?

3)只導(dǎo)出數(shù)據(jù)不導(dǎo)出數(shù)據(jù)結(jié)構(gòu)?

格式:?

mysqldump -u [數(shù)據(jù)庫w用戶名] -p -t [要備份的數(shù)據(jù)庫名稱]>[備份文件的保存路徑]?

4)導(dǎo)出數(shù)據(jù)庫中的Events?

格式:mysqldump -u [數(shù)據(jù)庫用戶名] -p -E [數(shù)據(jù)庫用戶名]>[備份文件的保存路徑]?

5)導(dǎo)出數(shù)據(jù)庫中的存儲(chǔ)過程和函數(shù)?

格式:mysqldump -u [數(shù)據(jù)庫用戶名] -p -R [數(shù)據(jù)庫用戶名]>[備份文件的保存路徑]?

6)導(dǎo)出數(shù)據(jù)庫中的數(shù)據(jù)結(jié)構(gòu)?

格式:mysqldump -u [數(shù)據(jù)庫用戶名] -p -d要備份的數(shù)據(jù)庫名稱]>[備份文件的保存路徑]?

例如:?

del test-125server-structure.sql?mysqldump -h192.168.1.125 -uroot -pshlx@@2018 -d test>test-125server-structure.sql?del test-125server-event.sql?mysqldump -h192.168.1.125 -uroot -pshlx@@2018 -E test>test-125server-event.sql?del test-125server-pro.sql?mysqldump -h192.168.1.125 -uroot -pshlx@@2018 -R test>test-125server-pro.sql?del test-125server-data.sql?mysqldump -h192.168.1.125 -uroot -pshlx@@2018 -t test>test-125server-data.sql

注意test-125server-event.sql和test-125server-pro.sql大小相同,都比test-125server-data.sql大一點(diǎn),如下:?

12、從外部文件導(dǎo)入數(shù)據(jù)庫中?

)使用“source”命令?

首先進(jìn)入“mysql”命令控制臺(tái),然后創(chuàng)建數(shù)據(jù)庫,然后使用該數(shù)據(jù)庫。最后執(zhí)行下面操作。?

mysql>source [備份文件的保存路徑]?

2)使用“<”符號(hào)?

首先進(jìn)入“mysql”命令控制臺(tái),然后創(chuàng)建數(shù)據(jù)庫,然后退出 MySQL,進(jìn)入 DOS 界面。最后執(zhí)行下面操作。?

mysql -u root –p < [備份文件的保存路徑]?

例如:?

mysql -h127.0.0.1 -uroot -pshlx@@2018 < test-125server-structure.sql?mysql -h127.0.0.1 -uroot -pshlx@@2018 < test-125server-pro.sql

3、備份數(shù)據(jù)庫:?

注意,mysqldump命令在DOS的 mysql\bin 目錄下執(zhí)行,不能在mysql環(huán)境下執(zhí)行,因此,不能以分號(hào)“;”結(jié)尾。若已登陸mysql,請(qǐng)運(yùn)行退出命令mysql> exit(1)導(dǎo)出整個(gè)數(shù)據(jù)庫?

導(dǎo)出文件默認(rèn)是存在mysql\bin目錄下?

mysqldump -u用戶名 -p數(shù)據(jù)庫名 > 導(dǎo)出的文件名?

mysqldump -uroot -p123456 database_name > outfile_name.sql

(2)導(dǎo)出一個(gè)表?

mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名> 導(dǎo)出的文件名?

mysqldump -u user_name -p database_name table_name > outfile_name.sql

(3)導(dǎo)出一個(gè)數(shù)據(jù)庫結(jié)構(gòu)?

mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql

-d 沒有數(shù)據(jù) –add-drop-table 在每個(gè)create語句之前增加一個(gè)drop table(4)帶語言參數(shù)導(dǎo)出?

mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql?

14、將文本數(shù)據(jù)轉(zhuǎn)到數(shù)據(jù)庫中?

(1)文本數(shù)據(jù)應(yīng)符合的格式:字段數(shù)據(jù)之間用tab鍵隔開,null值用\n來代替.例:?

3 rose 大連二中 1976-10-10?

4 mike 大連一中 1975-12-23?

假設(shè)你把這兩組數(shù)據(jù)存為school.txt文件,放在c盤根目錄下。(2)數(shù)據(jù)傳入命令?

mysql> load data local infile "c:\school.txt" into table 表名;?

注意:你最好將文件復(fù)制到mysql\bin目錄下,并且要先用use命令打表所在的庫。?


3.使用SQL Developer來開發(fā)腳本


MySQL開發(fā)工具比較多,例如:?

Navicat for mysql?

PHPMyAdmin?

Mycli?

但是,由于更常用Oracle,我還是習(xí)慣于Oracle SQL Developer,一般使用它來開發(fā)Oracle數(shù)據(jù)庫的PL/SQL腳本,但是對(duì)于Mysql也是適用的。而且SQL Developer也是免費(fèi)的。?

下載?官網(wǎng)下載鏈接為:???https://www.oracle.com/cn/tools/downloads/oracle-sql-developer-download.html???不過有點(diǎn)慢,另外一個(gè)國內(nèi)鏈接:???http://down-ww3.7down.net/pcdown/soft/xiazai/sqldeveloper64.zip???設(shè)置進(jìn)入“工具”--“首選項(xiàng)”菜單:

如上圖,從maven本地庫中找到j(luò)dbc驅(qū)動(dòng)。?

然后,新增連接:?

如上圖,輸入連接名、用戶名、密碼后選擇MySQL標(biāo)簽,這時(shí)候提示錯(cuò)誤:?

The server time zone value is unrecognized or represents more than one time zone.?

解決辦法:肯定和時(shí)區(qū)有關(guān),查詢時(shí)區(qū):?

system_time_zone是空的。?

修改時(shí)區(qū)為中國,如下圖:?

點(diǎn)“測試”就成功了:?

點(diǎn)連接即可在左邊看到數(shù)據(jù)庫:?

3、開始工作

(1)創(chuàng)建表

--創(chuàng)建學(xué)生表drop table if exists student;create table student( id int, name varchar(200), teacher_id int, teacher_name varchar(200)); --創(chuàng)建教師表:drop table if exists teacher;create table teacher( id int, name varchar(200));

(2)創(chuàng)建存儲(chǔ)過程

drop procedure pr_testcursor;create procedure pr_testcursor(in i_name varchar(200))begin     #定義變量    declare v_id varchar(32);     declare v_name varchar(50);     DECLARE v_done INT DEFAULT FALSE;     #創(chuàng)建游標(biāo)并存儲(chǔ)數(shù)據(jù),    DECLARE v_cursor CURSOR FOR ( SELECT id,name FROM teacher where name = i_name);     #游標(biāo)中內(nèi)容執(zhí)行完設(shè)置done為1    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;     #設(shè)置手動(dòng)提交    set autocommit = 0;    #打開游標(biāo)    OPEN v_cursor;     #執(zhí)行循環(huán)    handle_cur: LOOP         #判斷是否結(jié)束循環(huán)        IF v_done THEN             LEAVE handle_cur;         END IF;        #取出游標(biāo)中的值        FETCH v_cursor into v_id, v_name;         #更新數(shù)據(jù)        UPDATE student SET teacher_name = v_name WHERE teacher_id = v_id;     END LOOP handle_cur;     #釋放游標(biāo)    CLOSE v_cursor;     #提交    COMMIT; END

(3)調(diào)試存儲(chǔ)過程?

SQL Developer功能強(qiáng)大,我感覺最強(qiáng)大最方便的還是用SQL Developer來調(diào)試存儲(chǔ)過程,可惜的是sql developer還不支持mysql存儲(chǔ)過程的單步調(diào)試,TOAD for mysql支持單步調(diào)試。?

先插入三條數(shù)據(jù):?

然后,運(yùn)行存儲(chǔ)過程:?

要調(diào)試中間的變量,需要在存儲(chǔ)過程中加入select [變量名],也可以使用臨時(shí)表記錄運(yùn)行過程。?


4.使用TOAD for mysql?來開發(fā)腳本


TOAD本身也是著名的sql腳本開發(fā)工具,用于mysql開發(fā)可能不多,更多用于oracle開發(fā)。

下載鏈接:

??https://www.jb51.net/database/527579.html????

安裝后?

File-->new菜單:?

輸入后:?

連接后,左邊:?

調(diào)試存儲(chǔ)過程,先選中左邊Object Explorer-->procedures里面的已經(jīng)創(chuàng)建好的存儲(chǔ)過程,點(diǎn)右鍵,選中菜單中的Debug:?

執(zhí)行后出現(xiàn):?

點(diǎn)OK:?

輸入?yún)?shù):?

注意本工具使用可能因?yàn)椴僮飨到y(tǒng)原因遇到問題。如果無法正常使用,則推薦使用其他工具。


5.使用Navicat for mysql來開發(fā)腳本


Navicat用于mysql腳本開發(fā)非常普遍。如下圖:

此處暫時(shí)留白,更詳細(xì)的介紹待以后補(bǔ)充。

標(biāo)簽: 存儲(chǔ)過程 備份文件 保存路徑

上一篇:前端三個(gè)實(shí)用小妙招分享給大家
下一篇:Nginx代理配置只允許指定IP訪問