lunixs 退出mysql_MySQL的基本操作
1、數(shù)據(jù)庫(kù)登錄
格式:mysql -h主機(jī)地址 -u用戶名 -p用戶密碼 -P端口 -D數(shù)據(jù)庫(kù) -e “SQL內(nèi)容”
[root@wulaoer?~]#?mysql?-uroot?-p
2、修改密碼
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
[root@wulaoer?~]#?mysqladmin?-uroot??password?'123456'
注:因?yàn)殚_(kāi)始時(shí)root沒(méi)有密碼,所以-p舊密碼一項(xiàng)就可以省略了。
例2:再將root的密碼改為wulaoer。
[root@wulaoer?~]#?mysqladmin?-uroot??-p'123456'?password?'wulaoer'或[root@wulaoer?~]#?service?mysqld?start[root@wulaoer?~]#?mysqld_safe?--user=mysql?--skip-grant-tables?--skip-networking?如果是安裝版的也可以在安裝目錄下執(zhí)行?./scripts/mysql_install_db?--user=mysql[root@wulaoer?~]#?mysql?-uroot?-p?#直接進(jìn)數(shù)據(jù)庫(kù)不用密碼Enter?password:?Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.Your?MySQL?connection?id?is?1Server?version:?5.1.73?Source?distributionCopyright?(c)?2000,?2013,?Oracle?and/or?its?affiliates.?All?rights?reserved.Oracle?is?a?registered?trademark?of?Oracle?Corporation?and/or?itsaffiliates.?Other?names?may?be?trademarks?of?their?respectiveowners.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.mysql>?use?mysql;?#切換到數(shù)據(jù)庫(kù)Reading?table?information?for?completion?of?table?and?column?namesYou?can?turn?off?this?feature?to?get?a?quicker?startup?with?-ADatabase?changedmysql>?update?user?set?password=PASSWORD("wulaoer")where?user="root";#修改數(shù)據(jù)庫(kù)的密碼Query?OK,?3?rows?affected?(0.01?sec)Rows?matched:?3??Changed:?3??Warnings:?0mysql>?flush?privileges;#更新權(quán)限Query?OK,?0?rows?affected?(0.00?sec)mysql>?quit?#退出Bye[root@wulaoer?~]#?service?mysqld?start正在啟動(dòng)?mysqld:??????????????????????????????????????????[確定][root@wulaoer?~]#?mysql?-uroot?-pEnter?password:?Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.Your?MySQL?connection?id?is?6Server?version:?5.1.73?Source?distributionCopyright?(c)?2000,?2013,?Oracle?and/or?its?affiliates.?All?rights?reserved.Oracle?is?a?registered?trademark?of?Oracle?Corporation?and/or?itsaffiliates.?Other?names?may?be?trademarks?of?their?respectiveowners.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.
3、添加用戶
格式:grant select on 數(shù)據(jù)庫(kù).* to 用戶名@登錄主機(jī) identified by "密碼"
例1、增加一個(gè)用戶root密碼為wullaoer,讓他可以在任何主機(jī)上登錄,并對(duì)所有數(shù)據(jù)庫(kù)有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MySQL,然后鍵入以下命令:
mysql>?grant?select,insert,update,deleteon?on?*.*?to?root@localhost?identified?by?'wulaoer';Query?OK,?0?rows?affected?(0.00?sec)或mysql>?grant?all?privileges?on?*.*?to?root@localhost?identified?by?'wulaoer';Query?OK,?0?rows?affected?(0.00?sec)
如果你不想test2有密碼,可以再打一個(gè)命令將密碼消掉。
mysql>?grant?select,insert,update,delete?on?*.*?to?root@localhost?identified?by?'?';#localhos是本機(jī)登錄Query?OK,?0?rows?affected?(0.00?sec)
4、創(chuàng)建數(shù)據(jù)庫(kù)
格式:create database name; 創(chuàng)建數(shù)據(jù)庫(kù)
mysql>?show?databases;#查看數(shù)據(jù)庫(kù)+--------------------+|?Database???????????|+--------------------+|?information_schema?||?mysql??????????????||?test???????????????||?user???????????????|+--------------------+4?rows?in?set?(0.00?sec)mysql>?create?database?wulaoer;#創(chuàng)建數(shù)據(jù)庫(kù)Query?OK,?1?row?affected?(0.00?sec)mysql>?show?databases;#查看數(shù)據(jù)庫(kù)+--------------------+|?Database???????????|+--------------------+|?information_schema?||?mysql??????????????||?test???????????????||?user???????????????||?wulaoer????????????|+--------------------+5?rows?in?set?(0.00?sec)
格式:use databasename; 選擇數(shù)據(jù)庫(kù)
mysql>?use?wulaoer;#切換數(shù)據(jù)庫(kù)Database?changed
5、備份或恢復(fù)數(shù)據(jù)庫(kù)
5.1格式:mysqldump -h 主機(jī) -u 用戶名 -p 數(shù)據(jù)庫(kù) > 備份地址以及備份名稱
[root@wulaoer?~]#?mysqldump?-uroot?-p?wulaoer?>?wulaoer.sqlEnter?password:?[root@wulaoer?~]#?lsanaconda-ks.cfg??install.log??install.log.syslog??wulaoer.sql
5.2還原格式:mysqldump -h 主機(jī) -u 用戶名 -p 數(shù)據(jù)庫(kù) < 還原的數(shù)據(jù)庫(kù)
這里先把wulaoer這個(gè)數(shù)據(jù)庫(kù)刪除掉
mysql>?drop?database?wulaoer;Query?OK,?0?rows?affected?(0.01?sec)mysql>?show?databases;+--------------------+|?Database???????????|+--------------------+|?information_schema?||?mysql??????????????||?test???????????????||?user???????????????|+--------------------+4?rows?in?set?(0.00?sec)
實(shí)例:
[root@wulaoer?~]#?mysqladmin?-h?localhost?-u?root?-p?create?wulaoer?#新建要還原的數(shù)據(jù)庫(kù)名Enter?password:?[root@wulaoer?~]#?mysqldump?-uroot?-p?wulaoer?
注:如果要還原數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中一定要有要還原的數(shù)據(jù)庫(kù)的名字,
如果只想卸除建表指令,則可以如下:
[root@wulaoer?~]#?mysqladmin?-u?root?-p??databasename?>?a.sqlEnter?password:?[root@wulaoer?~]#?mysqldump?-uroot?-p?test?mytable>./test.txtEnter?password:
將備份數(shù)據(jù)導(dǎo)入到數(shù)據(jù):(導(dǎo)回test數(shù)據(jù)庫(kù))
5.3備份數(shù)據(jù)庫(kù)wulaoer
[root@wulaoer?~]#?mysqldump?-uroot?-p?wulaoer?>?wulaoer.sql
得到的wulaoer.sql是一個(gè)sql腳本,不包括建庫(kù)的語(yǔ)句,所以你需要手工創(chuàng)建數(shù)據(jù)庫(kù)才可以導(dǎo)入恢復(fù)數(shù)據(jù)庫(kù)wulaoer,需要?jiǎng)?chuàng)建一個(gè)空庫(kù)wulaoer
[root@wulaoer?~]#?mysql?-uroot?-p?wulaoer?
如果不希望后來(lái)公共創(chuàng)建wulaoer,可以
[root@wulaoer?~]#?mysqldump?-uroot?-p?--databases?wulaoer?>?wulaoer.sql[root@wulaoer?~]#?mysql?-uroot?-p?>?wulaoer.sql
但這樣的話系統(tǒng)種就不能存在wulaoer庫(kù),且無(wú)法導(dǎo)入其他名字的數(shù)據(jù)庫(kù),當(dāng)然你可以手工修改wulaoer.sql文件
如果只想卸出插入數(shù)據(jù)的sql命令,而不需要建表命令,則命令如下:
[root@wulaoer?~]#?mysqladmin?-uroot?-p?databasename?>?a.sql
那么如果我只想要數(shù)據(jù),而不想要什么sql命令時(shí),應(yīng)該如何操作呢?
可將查詢存儲(chǔ)在一個(gè)文件中并告訴mysql從文件中讀取查詢而不是等待鍵盤輸入。可利用外殼程序鍵入重定向?qū)嵱贸绦騺?lái)完成這項(xiàng)工作。例如,如果在文件my_file.sql 中存放有查
5.4完整備份:
給予mysql的完整恢復(fù),因?yàn)閎in-log記錄著所有的事件的操作,當(dāng)mysql發(fā)生災(zāi)難錯(cuò)誤時(shí),可以通過(guò)bin-log做完整恢復(fù),給予 時(shí)間點(diǎn)和位置的恢復(fù)。例如:每天定義執(zhí)行一點(diǎn)用mysqldump備份數(shù)據(jù)庫(kù),但是在三點(diǎn)由于數(shù)據(jù)庫(kù)出現(xiàn)了故障,數(shù)據(jù)庫(kù)無(wú)法訪問(wèn)需要恢復(fù),先把數(shù)據(jù)庫(kù)恢復(fù) 到一點(diǎn)的完整備份,在使用mysqlbinlog恢復(fù)從一點(diǎn)到mysqldump備份以來(lái)的binlog,這樣數(shù)據(jù)庫(kù)就能恢復(fù)到原來(lái)的狀態(tài)
[root@wulaoer ~]#?/usr/local/mysql/bin/mysqldump?--single-transaction?--flush-logs?--master-data=2?--all-databases?>?fullbackup_sunday_11_PM.sql
5.5增量備份數(shù)據(jù)庫(kù)
用more查看備份的數(shù)據(jù)庫(kù):[root@wulaoer?~]#?more?fullbackup_sunday_11_PM.sql?--?MySQL?dump?10.13??Distrib?5.5.44,?for?Linux?(x86_64)----?Host:?localhost????Database:?--?--------------------------------------------------------?Server?version????5.5.44-cll-lve/*!40101?SET?@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT?*/;/*!40101?SET?@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS?*/;/*!40101?SET?@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION?*/;/*!40101?SET?NAMES?utf8?*/;/*!40103?SET?@OLD_TIME_ZONE=@@TIME_ZONE?*/;/*!40103?SET?TIME_ZONE='+00:00'?*/;/*!40014?SET?@OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,?UNIQUE_CHECKS=0?*/;/*!40014?SET?@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,?FOREIGN_KEY_CHECKS=0?*/;/*!40101?SET?@OLD_SQL_MODE=@@SQL_MODE,?SQL_MODE='NO_AUTO_VALUE_ON_ZERO'?*/;/*!40111?SET?@OLD_SQL_NOTES=@@SQL_NOTES,?SQL_NOTES=0?*/;----?Position?to?start?replication?or?point-in-time?recovery?from----?CHANGE?MASTER?TO?MASTER_LOG_FILE='mysqld-bin.000006',?MASTER_LOG_POS=107;----?Current?Database:?`mysql`...............................省略部分................................................
在上面的信息里可以看到備份后所有的更改都保存在mysqld-bin.000006二進(jìn)制文件中然后在完全備份的每天執(zhí)行下面的命令做一次增量備份
[root@localhost ~]# mysqladmin -uroot -p ?flush-logs
這是需要把二進(jìn)制文件保存到一個(gè)安全的地方,以方便恢復(fù)。
5.6恢復(fù)備份:
舉例說(shuō)明:
如果設(shè)定了每個(gè)星期日早上六點(diǎn)完整備份,每隔一個(gè)小時(shí)進(jìn)行一次增量備份,在八點(diǎn)的時(shí)候數(shù)據(jù)庫(kù)崩潰,這是就需要進(jìn)行恢復(fù)數(shù)據(jù)庫(kù)了。先進(jìn)行完整恢復(fù):
mysql -u root -p < fullbackup_sunday_11_PM.sql
在接 七點(diǎn)、八點(diǎn)的增量備份
[root@wulaoer?~]#?/var/lib/mysql/mysqld-bin.000006?mysqld-bin.000007?|?mysql?-uroot?-p
恢復(fù)完備份之后,就可以找到最新的增量做最新的完整恢復(fù)
mysqlbinlog 后加 --database "具體庫(kù)" 可恢復(fù)具體庫(kù)的增量信息加 --stop-date="2010-12-20 13:15:00" 可恢復(fù)到該日志的具體時(shí)間點(diǎn),如果恢復(fù)一個(gè)時(shí)間段可以--start-date="2010-12-20 13:15:00"--stop-date="2016-1-20 13:15:00"
flush privileges;
6、導(dǎo)入.sql文件命令(例如D:/mysql.sql)
mysql>use?wulaoer;mysql>?source?/home/wulaoer.sql;
UPDATE以新的值更新現(xiàn)存表中行的列。SET 子句指出要修改哪個(gè)列和他們應(yīng)該給定的值。WHERE子句如果被給出,指定哪個(gè)記錄行應(yīng)該被更新。否則,所有的記錄行被更新。如果 ORDER BY 子句被指定,記錄行將被以指定的次序更新。如果你指定關(guān)鍵詞LOW_PRIORITY,UPDATE 的執(zhí)行將被延遲,直到?jīng)]有其它的客戶端正在讀取表。如果你指定關(guān)鍵詞IGNORE,該更新語(yǔ)句將不會(huì)異常中止,即使在更新過(guò)程中出現(xiàn)重復(fù)鍵錯(cuò)誤。導(dǎo)致沖突的記錄行將不會(huì)被更新。如果在一個(gè)表達(dá)式中從tbl_name 中訪問(wèn)一個(gè)列,UPDATE 使用列的當(dāng)前值。舉例來(lái)說(shuō),下面的語(yǔ)句設(shè)置 age 列值為它的當(dāng)前值加 1 :
mysql>?UPDATE?persondata?SETage=age+1;
UPDATE賦值是從左到右計(jì)算的。舉例來(lái)說(shuō),下列語(yǔ)句將 age 列設(shè)置為它的兩倍,然后再加 1 :
mysql>?UPDATE?persondata?SETage=age*2,?age=age+1;
如果你設(shè)置列為其當(dāng)前的值,MySQL 注意到這點(diǎn),并不更新它。UPDATE返回實(shí)際被改變的記錄行數(shù)目。在 MySQL 3.22 或更新的版本中,C API 函數(shù) mysql_info()返回被匹配并更新的記錄行數(shù)目,以及在 UPDATE 期間發(fā)生的警告的數(shù)目。在 MySQL3.23 中,你可以使用 LIMIT # 來(lái)確保只有給定的記錄行數(shù)目被更改。如果一個(gè) ORDER BY 子句被使用(從 MySQL4.0.0 開(kāi)始支持),記錄行將以指定的次序被更新。這實(shí)際上只有連同 LIMIT一起才有用。從 MySQL 4.0.4 開(kāi)始,你也可以執(zhí)行一個(gè)包含多個(gè)表的UPDATE 的操作:
UPDATE?items,month?SETitems.price=month.priceWHERE?items.id=month.id;注意:多表 UPDATE 不可以使用 ORDER BY 或LIMIT。
關(guān)鍵字: mysql
啟動(dòng):net start mySql;
進(jìn)入:mysql -u root -p/mysql -hlocalhost -u root -p databaseName;
列出數(shù)據(jù)庫(kù):show databases;
選擇數(shù)據(jù)庫(kù):use databaseName;
列出表格:show tables;
顯示表格列的屬性:show columns fromtableName;
建立數(shù)據(jù)庫(kù):source fileName.txt;
匹配字符:可以用通配符_代表任何一個(gè)字符,%代表任何字符串;
7、用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫(kù)表中(例如D:/mysql.txt)
mysql>?LOAD?DATA?LOCAL?INFILE/mysql.txt"?INTO?TABLE?MYTABLE;刪除數(shù)據(jù)庫(kù)?drop?database?name?直接刪除數(shù)據(jù)庫(kù)mysqladmin?drop?database?name?刪除數(shù)據(jù)庫(kù)前,有提示數(shù)據(jù)庫(kù)授權(quán)?GRANT?ALL?PRIVILEGES?ON?bdc.*?TObdc@'%'?IDENTIFIEDBY?'bdc123'?WITH?GRANT?OPTION;flush?privileges授權(quán)訪問(wèn)bdc?的所有表?用戶為bdc?任何主機(jī)?,密碼為bdc@123創(chuàng)建一個(gè)用戶custom在特定客戶端it363.com登錄,可訪問(wèn)特定數(shù)據(jù)庫(kù)fangchandbmysql?>grant?select,?insert,update,?delete,?create,drop?on?fangchandb.*?to?custom@it363.com?identified?by?‘passwd’刪除授權(quán):?mysql>?revoke?all?privilegeson?*.*?from?root@”%”;mysql>?delete?from?user?whereuser=”root”?and?host=”%”;mysql>?flush?privileges;顯示當(dāng)前mysql版本和當(dāng)前日期?selectversion(),current_date;查詢時(shí)間:select?now();查詢當(dāng)前用戶:select?user();查詢數(shù)據(jù)庫(kù)版本:select?version();查詢當(dāng)前使用的數(shù)據(jù)庫(kù):select?database();查詢所有數(shù)據(jù)表?>show?tables;查詢表的字段信息?>desc?表名稱;創(chuàng)建表?create?table?s_position(id?int?not?null?auto_increment,name?varchar(20)?not?nulldefault?'經(jīng)理',?#設(shè)定默認(rèn)值description?varchar(100),primary?key?PK_positon?(id)?#設(shè)定主鍵);create?table?department(id?int?not?null?auto_increment,name?varchar(20)?not?nulldefault?'系統(tǒng)部',?#設(shè)定默認(rèn)值description?varchar(100),primary?key?PK_department?(id)?#設(shè)定主鍵);create?table?depart_pos(department_id?int?not?null,position_id?int?not?null,primary?key?PK_depart_pos(department_id,position_id)?#設(shè)定復(fù)和主鍵);create?table?staffer(id?int?not?null?auto_incrementprimary?key,?#設(shè)定主鍵name?varchar(20)?not?nulldefault?'無(wú)名氏',?#設(shè)定默認(rèn)值department_id?int?not?null,position_id?int?not?null,unique?(department_id,position_id)#設(shè)定唯一值);修改結(jié)構(gòu)?mysql>#表position增加列testalter?tableposition?add(test?char(10));#表position修改列testalter?tableposition?modify?test?char(20)?not?null;#表position修改列test默認(rèn)值alter?tableposition?alter?test?set?default?'system';#表position去掉test默認(rèn)值alter?tableposition?alter?test?drop?default;#表position去掉列testalter?tableposition?drop?column?test;#表depart_pos刪除主鍵alter?tabledepart_pos?drop?primary?key;#表depart_pos增加主鍵alter?tabledepart_pos?add?primary?key?PK_depart_pos?(department_id,position_id);
8、操作數(shù)據(jù)庫(kù)
#插入表departmentinsert?into?department(name,description)values('系統(tǒng)部','系統(tǒng)部');insert?into?department(name,description)values('公關(guān)部','公關(guān)部');insert?into?department(name,description)values('客服部','客服部');insert?into?department(name,description)values('財(cái)務(wù)部','財(cái)務(wù)部');insert?into?department(name,description)values('測(cè)試部','測(cè)試部');#插入表s_positioninsert?into?s_position(name,description)values('總監(jiān)','總監(jiān)');insert?into?s_position(name,description)values('經(jīng)理','經(jīng)理');insert?into?s_position(name,description)values('普通員工','普通員工');#插入表depart_posinsert?intodepart_pos(department_id,position_id)select?a.id?department_id,b.id?postion_idfrom?department?a,s_position?b;#插入表stafferinsert?intostaffer(name,department_id,position_id)?values('陳達(dá)治',1,1);insert?into?staffer(name,department_id,position_id)values('李文賓',1,2);insert?intostaffer(name,department_id,position_id)?values('馬佳',1,3);insert?intostaffer(name,department_id,position_id)?values('亢志強(qiáng)',5,1);insert?intostaffer(name,department_id,position_id)?values('楊玉茹',4,1);
9、查詢及刪除操作
#顯示系統(tǒng)部的人員和職位selecta.name,b.name?department_name,c.name?position_namefrom?staffera,department?b,s_position?cwherea.department_id=b.id?and?a.position_id=c.id?and?b.name='系統(tǒng)部';#顯示系統(tǒng)部的人數(shù)select?count(*)from?staffer?a,department?bwherea.department_id=b.id?and?b.name='系統(tǒng)部'#顯示各部門的人數(shù)select?count(*)cou,b.name?from?staffer?a,department?bwherea.department_id=b.idgroup?by?b.name;#刪除客服部delete?fromdepartment?where?name='客服部';#將財(cái)務(wù)部修改為財(cái)務(wù)一部updatedepartment?set?name='財(cái)務(wù)一部'?wherename='財(cái)務(wù)部';
10、清空表
mysql>delete?from?MYTABLE;
11、刪除表:
mysql>drop?TABLE?MYTABLE;
12、添加表字段:
alter?tabletable1?add?transactor?varchar(10)?not?Null;alter?tabletable1?add?id?int?unsigned?not?Null?auto_increment?primary?key修改某個(gè)表的字段類型及指定為空或非空?>alter?table?表名稱?change?字段名稱?字段名稱?字段類型?[是否允許非空];>alter?table?表名稱?modify?字段名稱?字段類型?[是否允許非空];>alter?table?表名稱?modify?字段名稱?字段類型?[是否允許非空];如果要?jiǎng)h除某一字段,可用命令:?ALTER?TABLEmytable?DROP?字段名;
13、添加唯一鍵:
ALTER?TABLE`test2`?ADD?UNIQUE?(?`userid`)
14、修改主鍵:
ALTER?TABLE`test2`?DROP?PRIMARY?KEY?,ADD?PRIMARY?KEY?(?`id`?)alter?tableversion_template?drop?primary?key?,add?primary?key?version,role,type);
15、增加索引
ALTER?TABLE`test2`?ADD?INDEX?(?`id`?)alter?tabletable1?add?index?ind_id?(id);create?indexind_id?on?table1?(id);create?uniqueindex?ind_id?on?table1?(id);//建立唯一性索引
16、刪除索引:
drop?indexidx_id?on?table1;alter?tabletable1?drop?index?ind_id;
17、重命名表:
alter?table?t1?rename?t2;
18、增加一個(gè)字段:
alter?tabletabelName?add?column?fieldName?dateType;
19、增加多個(gè)字段
alter?tabletabelName?add?column?fieldName1?dateType,add?columns?fieldName2?dateType;
多行命令輸入:注意不能將單詞斷開(kāi);當(dāng)插入或更改數(shù)據(jù)時(shí),不能將字段的字符串展開(kāi)到多行里,否則硬回車將被儲(chǔ)存到數(shù)據(jù)中;
增加一個(gè)管理員帳戶:grant all on *.* to user@localhost identified by"password";
每條語(yǔ)句輸入完畢后要在末尾填加分號(hào)';',或者填加'\g'也可以;
20、創(chuàng)建臨時(shí)表:
create?temporarytable?zengchao(name?varchar(10));
21、創(chuàng)建表是先判斷表是否存在
create?table?ifnot?exists?students(……);
22、從已經(jīng)有的表中復(fù)制表的結(jié)構(gòu)
create?tabletable2?select?*?from?table1?where?1<>1;
23、 賦值表
create?tabletable2?select?*?from?table1;
24、對(duì)表重新命名
alter?table?table1?rename?astable2;
25、修改列的類型
alter?table?table1?modify?id?intunsigned;//修改列id的類型為int?unsignedalter?table?table1?change?id?sidint?unsigned;//修改列id的名字為sid,而且把屬性修改為int?unsigned
26、聯(lián)合字符或者多個(gè)列(將列id與":"和列name和"="連接)
select?concat(id,':',name,'=')from?students;
27、limit(選出10到20條)
select?*?from?students?order?byid?limit?9,10;
28、MySQL會(huì)使用索引的操作符號(hào)
=,>,=,between,in,不帶%或者_(dá)開(kāi)頭的like
29、存儲(chǔ)過(guò)程
1)查看存儲(chǔ)過(guò)程
select?name?from?mysql.proc?where?db=’數(shù)據(jù)庫(kù)名’;
或
select?routine_name?frominformation_schema.routines?where?routine_schema='數(shù)據(jù)庫(kù)名';
或
show?procedure?status?where?db='數(shù)據(jù)庫(kù)名';
30、MySQL存儲(chǔ)過(guò)程的修改
ALTER PROCEDURE
更改用CREATEPROCEDURE 建立的預(yù)先指定的存儲(chǔ)過(guò)程,其不會(huì)影響相關(guān)存儲(chǔ)過(guò)程或存儲(chǔ)功能。
31、MySQL存儲(chǔ)過(guò)程的刪除
刪除一個(gè)存儲(chǔ)過(guò)程比較簡(jiǎn)單,和刪除表一樣:
DROP PROCEDURE
從MySQL的表格中刪除一個(gè)或多個(gè)存儲(chǔ)過(guò)程。
32、存儲(chǔ)過(guò)程基本函數(shù)
(1).字符串類
CHARSET(str)?//返回字串字符集CONCAT?(string2?[,...?])?//連接字串INSTR?(string?,substring?)?//返回substring首次在string中出現(xiàn)的位置,不存在返回0LCASE?(string2?)?//轉(zhuǎn)換成小寫LEFT?(string2?,length?)?//從string2中的左邊起取length個(gè)字符LENGTH?(string?)?//string長(zhǎng)度LOAD_FILE?(file_name?)?//從文件讀取內(nèi)容LOCATE?(substring?,?string[,start_position?]?)?同INSTR,但可指定開(kāi)始位置LPAD?(string2?,length?,pad?)?//重復(fù)用pad加在string開(kāi)頭,直到字串長(zhǎng)度為lengthLTRIM?(string2?)?//去除前端空格REPEAT?(string2?,count?)?//重復(fù)count次REPLACE?(str?,search_str?,replace_str)?//在str中用replace_str替換search_strRPAD?(string2?,length?,pad)?//在str后用pad補(bǔ)充,直到長(zhǎng)度為lengthRTRIM?(string2?)?//去除后端空格STRCMP?(string1?,string2?)?//逐字符比較兩字串大小,SUBSTRING?(str?,?position?[,length?])?//從str的position開(kāi)始,取length個(gè)字符,
注:mysql中處理字符串時(shí),默認(rèn)第一個(gè)字符下標(biāo)為1,即參數(shù)position必須大于等于1
mysql>?select?substring('abcd',0,2);?+-----------------------+??|?substring('abcd',0,2)?|?+-----------------------+??|???????????????????????|?+-----------------------+??1?row?in?set?(0.00?sec)??mysql>?select?substring('abcd',1,2);?+-----------------------+??|?substring('abcd',1,2)?|?+-----------------------+??|?????ab????????????????|?+-----------------------+??1?row?in?set?(0.02?sec)?TRIM([[BOTH|LEADING|TRAILING]?[padding]?FROM]string2)?//去除指定位置的指定字符UCASE?(string2?)?//轉(zhuǎn)換成大寫RIGHT(string2,length)?//取string2最后length個(gè)字符SPACE(count)?//生成count個(gè)空格
(2).數(shù)學(xué)類
ABS?(number2?)?//絕對(duì)值BIN?(decimal_number?)?//十進(jìn)制轉(zhuǎn)二進(jìn)制CEILING?(number2?)?//向上取整CONV(number2,from_base,to_base)?//進(jìn)制轉(zhuǎn)換FLOOR?(number2?)?//向下取整FORMAT?(number,decimal_places?)?//保留小數(shù)位數(shù)HEX?(DecimalNumber?)?//轉(zhuǎn)十六進(jìn)制
注:HEX()中可傳入字符串,則返回其ASC-11碼,如HEX('DEF')返回4142143
也可以傳入十進(jìn)制整數(shù),返回其十六進(jìn)制編碼,如HEX(25)返回19
LEAST?(number?,?number2?[,..])?//求最小值MOD?(numerator?,denominator?)?//求余POWER?(number?,power?)?//求指數(shù)RAND([seed])?//隨機(jī)數(shù)ROUND?(number?[,decimals?])?//四舍五入,decimals為小數(shù)位數(shù)]
注:返回類型并非均為整數(shù),如:
(1)默認(rèn)變?yōu)椤痢痢林?/p>
mysql>?select?round(1.23);?+-------------+??|?round(1.23)?|??+-------------+??|???????????1?|?+-------------+??1?row?in?set?(0.00?sec)??mysql>?select?round(1.56);?+-------------+??|?round(1.56)?|??+-------------+??|???????????2?|?+-------------+??1?row?in?set?(0.00?sec)
(2)可以設(shè)定小數(shù)位數(shù),返回浮點(diǎn)型數(shù)據(jù)
mysql>?select?round(1.567,2);??+----------------+??|?round(1.567,2)?|??+----------------+??|???????????1.57?|?+----------------+??1?row?in?set?(0.00?sec)?SIGN?(number2?)?//
(3).日期時(shí)間類
ADDTIME?(date2?,time_interval?)//將time_interval加到date2CONVERT_TZ?(datetime2?,fromTZ?,toTZ?)?//轉(zhuǎn)換時(shí)區(qū)CURRENT_DATE?(?)?//當(dāng)前日期CURRENT_TIME?(?)?//當(dāng)前時(shí)間CURRENT_TIMESTAMP?(?)?//當(dāng)前時(shí)間戳DATE?(datetime?)?//返回datetime的日期部分DATE_ADD?(date2?,?INTERVAL?d_value?d_type?)?//在date2中加上日期或時(shí)間DATE_FORMAT?(datetime?,FormatCodes?)?//使用formatcodes格式顯示datetimeDATE_SUB?(date2?,?INTERVAL?d_value?d_type?)?//在date2上減去一個(gè)時(shí)間DATEDIFF?(date1?,date2?)?//兩個(gè)日期差DAY?(date?)?//返回日期的天DAYNAME?(date?)?//英文星期DAYOFWEEK?(date?)?//星期(1-7)?,1為星期天DAYOFYEAR?(date?)?//一年中的第幾天EXTRACT?(interval_name?FROM?date?)?//從date中提取日期的指定部分MAKEDATE?(year?,day?)?//給出年及年中的第幾天,生成日期串MAKETIME?(hour?,minute?,second?)?//生成時(shí)間串MONTHNAME?(date?)?//英文月份名NOW?(?)?//當(dāng)前時(shí)間SEC_TO_TIME?(seconds?)?//秒數(shù)轉(zhuǎn)成時(shí)間STR_TO_DATE?(string?,format?)?//字串轉(zhuǎn)成時(shí)間,以format格式顯示TIMEDIFF?(datetime1?,datetime2?)?//兩個(gè)時(shí)間差TIME_TO_SEC?(time?)?//時(shí)間轉(zhuǎn)秒數(shù)]WEEK?(date_time?[,start_of_week?])?//第幾周YEAR?(datetime?)?//年份DAYOFMONTH(datetime)?//月的第幾天HOUR(datetime)?//小時(shí)LAST_DAY(date)?//date的月的最后日期MICROSECOND(datetime)?//微秒MONTH(datetime)?//月MINUTE(datetime)?//分返回符號(hào),正負(fù)或0SQRT(number2)?//開(kāi)平方
33、使用索引的缺點(diǎn)
1) ?增刪改數(shù)據(jù)的速度;
2)占用磁盤空間;
3)增加查詢優(yōu)化器的負(fù)擔(dān);
當(dāng)查詢優(yōu)化器生成執(zhí)行計(jì)劃時(shí),會(huì)考慮索引,太多的索引會(huì)給查詢優(yōu)化器增加
34、分析索引效率
方法:在一般的SQL語(yǔ)句前加上explain;
分析結(jié)果的含義:
1)table:表名;
2)type:連接的類型,(ALL/Range/Ref)。其中ref是最理想的;
3)possible_keys:查詢可以利用的索引名;
4)key:實(shí)際使用的索引;
5)key_len:索引中被使用部分的長(zhǎng)度(字節(jié));
6)ref:顯示列名字或者"const"(不明白什么意思);
7)rows:顯示MySQL認(rèn)為在找到正確結(jié)果之前必須掃描的行數(shù);
8)extra:MySQL的建議;
35、使用較短的定長(zhǎng)列
1)盡可能使用較短的數(shù)據(jù)類型;
2)盡可能使用定長(zhǎng)數(shù)據(jù)類型;
a)用char代替varchar,固定長(zhǎng)度的數(shù)據(jù)處理比變長(zhǎng)的快些;
b)對(duì)于頻繁修改的表,磁盤容易形成碎片,從而影響數(shù)據(jù)庫(kù)的整體性能;
c)萬(wàn)一出現(xiàn)數(shù)據(jù)表崩潰,使用固定長(zhǎng)度數(shù)據(jù)行的表更容易重新構(gòu)造。使用固定長(zhǎng)度的數(shù)據(jù)行,每個(gè)記錄的開(kāi)始位置都是固定記錄長(zhǎng)度的倍數(shù),可以很容易被檢測(cè)到,但是使用可變長(zhǎng)度的數(shù)據(jù)行就不一定了;
d)對(duì)于MyISAM類型的數(shù)據(jù)表,雖然轉(zhuǎn)換成固定長(zhǎng)度的數(shù)據(jù)列可以提高性能,但是占據(jù)的空間也大;
36、使用not null和enum
盡量將列定義為notnull,這樣可使數(shù)據(jù)的出來(lái)更快,所需的空間更少,而且在查詢時(shí),MySQL不需要檢查是否存在特例,即null值,從而優(yōu)化查詢;
如果一列只含有有限數(shù)目的特定值,如性別,是否有效或者入學(xué)年份等,在這種情況下應(yīng)該考慮將其轉(zhuǎn)換為enum列的值,MySQL處理的更快,因?yàn)樗械膃num值在系統(tǒng)內(nèi)都是以標(biāo)識(shí)數(shù)值來(lái)表示的;
37、使用optimize table
對(duì)于經(jīng)常修改的表,容易產(chǎn)生碎片,使在查詢數(shù)據(jù)庫(kù)時(shí)必須讀取更多的磁盤塊, 降低查詢性能。具有可變長(zhǎng)的表都存在磁盤碎片問(wèn)題,這個(gè)問(wèn)題對(duì)blob數(shù)據(jù)類型更為突出,因?yàn)槠涑叽缱兓浅4蟆?梢酝ㄟ^(guò)使用optimize table來(lái)整理碎片,保證數(shù)據(jù)庫(kù)性能不下降,優(yōu)化那些受碎片影響的數(shù)據(jù)表。 optimize table可以用于MyISAM和BDB類型的數(shù)據(jù)表。實(shí)際上任何碎片整理方法都是用mysqldump來(lái)轉(zhuǎn)存數(shù)據(jù)表,然后使用轉(zhuǎn)存后的文件并重新建數(shù)據(jù) 表;
38、使用procedure analyse()
可以使用procedure analyse()顯示最佳類型的建議,使用很簡(jiǎn)單,在select語(yǔ)句后面加上procedureanalyse()就可以了;例如:
select?*?from?students?procedureanalyse();select?*?from?students?procedureanalyse(16,256);
第二條語(yǔ)句要求procedure analyse()不要建議含有多于16個(gè)值,或者含有多于256字節(jié)的enum類型,如果沒(méi)有限制,輸出可能會(huì)很長(zhǎng);
39、使用查詢緩存
1)查詢緩存的工作方式:
第一次執(zhí)行某條select語(yǔ)句時(shí),服務(wù)器記住該查詢的文本內(nèi)容和查詢結(jié)果,存儲(chǔ)在緩存中,下次碰到這個(gè)語(yǔ)句時(shí),直接從緩存中返回結(jié)果;當(dāng)更新數(shù)據(jù)表后,該數(shù)據(jù)表的任何緩存查詢都變成無(wú)效的,并且會(huì)被丟棄。
2)配置緩存參數(shù):
變量:query_cache_type,查詢緩存的操作模式。有3中模 式,0:不緩存;1:緩存查詢,除非與 select sql_no_cache開(kāi)頭;2:根據(jù)需要只緩存那些以select sql_cache開(kāi)頭的查詢; query_cache_size:設(shè)置查詢緩存的最大結(jié)果集的大小,比這個(gè)值大的不會(huì)被緩存。
40、調(diào)整硬件
1)在機(jī)器上裝更多的內(nèi)存;
2)增加更快的硬盤以減少I/O等待時(shí)間;
尋道時(shí)間是決定性能的主要因素,逐字地移動(dòng)磁頭是最慢的,一旦磁頭定位,從磁道讀則很快;
3)在不同的物理硬盤設(shè)備上重新分配磁盤活動(dòng);
如果可能,應(yīng)將最繁忙的數(shù)據(jù)庫(kù)存放在不同的物理設(shè)備上,這跟使用同一物理設(shè)備的不同分區(qū)是不同的,因?yàn)樗鼈儗?zhēng)用相同的物理資源(磁頭)。
41、MySQL版本查看:
[root@wulaoer?~]#?mysql?-Vmysql??Ver?14.14?Distrib?5.1.73,?for?redhat-linux-gnu?(x86_64)?using?readline?5.1
或者
[root@wulaoer?~]#?mysql?-uroot?-pEnter?password:?Welcome?to?the?MySQL?monitor.??Commands?end?with?;?or?\g.Your?MySQL?connection?id?is?38Server?version:?5.1.73?Source?distributionCopyright?(c)?2000,?2013,?Oracle?and/or?its?affiliates.?All?rights?reserved.Oracle?is?a?registered?trademark?of?Oracle?Corporation?and/or?itsaffiliates.?Other?names?may?be?trademarks?of?their?respectiveowners.Type?'help;'?or?'\h'?for?help.?Type?'\c'?to?clear?the?current?input?statement.mysql>?status;--------------mysql??Ver?14.14?Distrib?5.1.73,?for?redhat-linux-gnu?(x86_64)?using?readline?5.1Connection?id:????????38Current?database:????Current?user:????????root@localhostSSL:????????????Not?in?useCurrent?pager:????????stdoutUsing?outfile:????????''Using?delimiter:????;Server?version:????????5.1.73?Source?distributionProtocol?version:????10Connection:????????Localhost?via?UNIX?socketServer?characterset:????latin1Db?????characterset:????latin1Client?characterset:????latin1Conn.??characterset:????latin1UNIX?socket:????????/var/lib/mysql/mysql.sockUptime:????????????2?hours?12?min?50?secThreads:?1??Questions:?186??Slow?queries:?0??Opens:?28??Flush?tables:?1??Open?tables:?23??Queries?per?second?avg:?0.23--------------mysql>?select?version();+-----------+|?version()?|+-----------+|?5.1.73????|+-----------+1?row?in?set?(0.00?sec)mysql>?select?@@version;+-----------+|?@@version?|+-----------+|?5.1.73????|+-----------+1?row?in?set?(0.00?sec)
42、二進(jìn)制日志查看
mysql>?show?variables?like?'log_bin';+---------------+-------+|?Variable_name?|?Value?|+---------------+-------+|?log_bin???????|?OFF???|+---------------+-------+1?row?in?set?(0.00?sec)
開(kāi) 啟二進(jìn)制日志,在windows里my.ini或者linux里my.cnf里,在[mysqld]下加上log-bin=日志名,注{等號(hào)后面可以定義 二進(jìn)制日志文件名和位置}。如果只對(duì)某個(gè)庫(kù)進(jìn)行日志文件記錄,那么再添加binlog-do-db=test,這樣就只記錄test數(shù)據(jù)庫(kù)的日志,而放棄 其他的,而binlog-ignore-db=sales 除sales庫(kù)不記錄,其他都記錄。配置文件設(shè)置好需要重啟一下mysql
mysql>?show?master?status;+------------+----------+--------------+------------------+|?File???????|?Position?|?Binlog_Do_DB?|?Binlog_Ignore_DB?|+------------+----------+--------------+------------------+|?log.000001?|??????106?|??????????????|??????????????????|+------------+----------+--------------+------------------+1?row?in?set?(0.00?sec)
43、mysql日志管理
設(shè)置my.cnf中的參數(shù)[mysqld]下的expire_logs_day = 天數(shù) ?。此參數(shù)是設(shè)置日志的過(guò)期天數(shù),過(guò)期的日志將會(huì)被自動(dòng)刪除,
如果日志長(zhǎng)度超過(guò)了max_binlog_size = (大小可以帶單位,默認(rèn)k)的上限(默認(rèn)是1G)也會(huì)創(chuàng)建一個(gè)新的日志文件
①show?variables?like?'log_%';查看所有的log命令②show?variables?like?'log_bin';查看具體的log命令
刪除日志:
mysql>?purge?master?logs?to?'mysql-bin.000009'?;Query?OK,?0?rows?affected?(0.01?sec)mysql>?purge?master?logs?before?'2015-0-22?00:00:00′;Query?OK,?0?rows?affected?(0.05?sec)?RESET?MASTER
#刪除之前所有的mysqld-bin,并重新生成新的mysqld-bin后綴從000001開(kāi)始。注:如果您有一個(gè)活性的從屬服務(wù)器,該服 務(wù)器當(dāng)前正在讀取您正在試圖刪除的日志之一,則本語(yǔ)句不會(huì)起作用,而是會(huì)失敗,并伴隨一個(gè)錯(cuò)誤。不過(guò),如果從屬服務(wù)器是休止的,并且您碰巧清理了其想要讀 取的日志之一,則從屬服務(wù)器啟動(dòng)后不能復(fù)制。當(dāng)從屬服務(wù)器正在復(fù)制時(shí),本語(yǔ)句可以安全運(yùn)行。您不需要停止它們。
44、遠(yuǎn)程使用客戶端連接數(shù)據(jù)庫(kù)
(1)刪除連接的空賬戶
mysql>?delete?from?mysql.user?where?user='';Query?OK,?2?rows?affected?(0.00?sec)
(2)建立客戶端連接:
先在防火墻加如一條,防火墻允許3306端口通過(guò),添加后重啟防火墻。
-A?INPUT?-m?state?--state?NEW?-m?tcp?-p?tcp?--dport?3306?-j?ACCEPT
(3)先看以下mysql的配置文件my.cnf或者my.conf,里面([mysqld])有沒(méi)有bind_address=127.0.0.1,如果有就注釋掉,沒(méi)有的話就不用操作了,
(4)添加允許連接的IP和帳號(hào)密碼.
mysql>?GRANT?ALL?PRIVILEGES?ON?*.*?TO?root@"%"?IDENTIFIED?BY?"root";
更多可以參考3、添加用戶,這里的用戶和密碼是客戶端連接的用戶和密碼。
(5)查看連接的客戶端
mysql>?use?mysql;Reading?table?information?for?completion?of?table?and?column?namesYou?can?turn?off?this?feature?to?get?a?quicker?startup?with?-ADatabase?changedmysql>?select?user,host?from?user;+------+--------------+|?user?|?host?????????|+------+--------------+|?root?|?127.0.0.1????||?root?|?192.168.1.36?||?root?|?localhost????||?root?|?wulaoer??????|+------+--------------+4?rows?in?set?(0.00?sec)
(6)刪除連接的客戶端
關(guān)閉遠(yuǎn)程訪問(wèn):
mysql> use?mysql;mysql> update?user?set?host?=?"localhost"?where?user?=?"root"?and?host=?"%";
(7)刪除連接的IP:
mysql>?select?user,host?from?user;+------+--------------+|?user?|?host?????????|+------+--------------+|?root?|?127.0.0.1????||?root?|?192.168.1.36?||?root?|?localhost????||?root?|?wulaoer??????|+------+--------------+4?rows?in?set?(0.00?sec)mysql>?DELETE?FROM?user?WHERE??Host="localhost";Query?OK,?1?row?affected?(0.00?sec)mysql>?select?user,host?from?user;+------+--------------+|?user?|?host?????????|+------+--------------+|?root?|?127.0.0.1????||?root?|?192.168.1.36?||?root?|?wulaoer??????|+------+--------------+3?rows?in?set?(0.00?sec)
45、查看連接MYSQL數(shù)據(jù)庫(kù)的IP信息
我們通常情況下要統(tǒng)計(jì)數(shù)據(jù)庫(kù)的連接數(shù)指的是統(tǒng)計(jì)總數(shù),沒(méi)有細(xì)分到每個(gè)IP上。現(xiàn)在要監(jiān)控每個(gè)IP的連接數(shù),實(shí)現(xiàn)方式如下:
方法一:1selectSUBSTRING_INDEX(host,':',1)asip , count(*)frominformation_schema.processlistgroupbyip;
方法二:1mysql -u root -h127.0.0.1 -e"show processlist\G;"| egrep"Host\:"| awk -F:'{ print $2 }'| sort | uniq -c
方法三:1mysql -u root -h127.0.0.1 --skip-column-names -e"show processlist;"|awk'{print $3}'|awk -F":"'{print $1}'|sort|uniq –c
以上就是三種監(jiān)控IP連接數(shù)的實(shí)現(xiàn)方式,希望對(duì)大家的學(xué)習(xí)有所幫助。
參考網(wǎng)址http://blog.csdn.net/lxh090821/article/details/9410943
總結(jié)
以上是生活随笔為你收集整理的lunixs 退出mysql_MySQL的基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: react 给一个引用的组件添加新属性_
- 下一篇: PLSQL导入.txt文件