一市咽、mysql服務(wù)的啟動和停止
在mac下啟動
一般安裝mysql都會使用dmg安裝包進(jìn)行安裝,在系統(tǒng)偏好設(shè)置里的mysql直接啟動或者利用命令行:
啟動數(shù)據(jù)庫
sudo /usr/local/mysql/support-files/mysql.server start
如果報錯抵蚊,基本上問題出在權(quán)限上
找到文件 /usr/local/mysql/data 設(shè)置為讀寫讀寫模式即可
sudo chmod -R 777 /usr/local/mysql/data
終止數(shù)據(jù)庫
sudo /usr/local/mysql/support-files/mysql.server stop
重啟數(shù)據(jù)庫
sudo /usr/local/mysql/support-files/mysql.server restart
用Homebrew安裝mysql開啟關(guān)閉操作的備注:
查看brew安裝的mysql信息
brew info mysql
cmake如果未鏈接先執(zhí)行以下兩個命令取消鏈接cmake并安裝
brew unlink cmake
brew install cmake
開啟數(shù)據(jù)庫命令示范:
sudo brew services start mysql
二施绎、登陸mysql
語法如下:
mysql -u用戶名 -p用戶密碼
1、登陸本地數(shù)據(jù)庫
鍵入命令mysql -uroot -p贞绳, 回車后提示你輸入密碼谷醉,輸入12345,然后回車即可>進(jìn)入到mysql中了冈闭,mysql的提示符是:
mysql>
2俱尼、連接到遠(yuǎn)程主機(jī)上的MYSQL
假設(shè)遠(yuǎn)程主機(jī)的IP為:0.0.0.0,用戶名為admin,密碼為123拒秘。則鍵入以下命令:
mysql -h0.0.0.0 -uadmin -p123
三号显、增加新用戶
格式:
grant 權(quán)限 on 數(shù)據(jù)庫.* to 用戶名@登錄主機(jī) identified by "密碼"
如,增加一個用戶test密碼為12345躺酒,讓其可以在本機(jī)上登錄押蚤, 并對所有數(shù)據(jù)庫有查詢、插入羹应、修改揽碘、刪除的權(quán)限。首先用以root用戶連入mysql园匹,然后鍵入以下命令:
grant select,insert,update,delete on *.* to test@localhost Identified by "12345";
如果希望該用戶能夠在任何機(jī)器上登陸mysql雳刺,則將localhost改為"%"。
如果你不想test有密碼裸违,可以再打一個命令將密碼去掉掖桦。
grant select,insert,update,delete on mydb.* to test@localhost identified by "";
備注:
全局管理權(quán)限:
FILE: 在MySQL服務(wù)器上讀寫文件。
PROCESS: 顯示或殺死屬于其它用戶的服務(wù)線程供汛。
RELOAD: 重載訪問控制表枪汪,刷新日志等涌穆。
SHUTDOWN: 關(guān)閉MySQL服務(wù)。
數(shù)據(jù)庫/數(shù)據(jù)表/數(shù)據(jù)列權(quán)限:
ALTER: 修改已存在的數(shù)據(jù)表(例如增加/刪除列)和索引雀久。
CREATE: 建立新的數(shù)據(jù)庫或數(shù)據(jù)表宿稀。
DELETE: 刪除表的記錄。
DROP: 刪除數(shù)據(jù)表或數(shù)據(jù)庫赖捌。
INDEX: 建立或刪除索引祝沸。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄越庇。
UPDATE: 修改表中已存在的記錄罩锐。
特別的權(quán)限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄--其它什么也不允許做悦荒。
四: 操作數(shù)據(jù)庫
1唯欣、 顯示數(shù)據(jù)庫列表
show databases;
缺省有兩個數(shù)據(jù)庫:mysql和test嘹吨。 mysql庫存放著mysql的系統(tǒng)和用戶權(quán)限信息,我們改密碼和新增用戶,實際上就是對這個庫進(jìn)行操作枉氮。
2允粤、 顯示庫中的數(shù)據(jù)表:
use mysql;
show tables;
3、 顯示數(shù)據(jù)表的結(jié)構(gòu):
describe 表名;
4问芬、 建庫與刪庫:
create database 庫名;
drop database 庫名;
5悦析、 建表與刪表:
use 庫名;
create table 表名(字段列表);
創(chuàng)建臨時表
create temporary table 表名(字段列表);
檢查是否存在建表
create table if not exists 表名(字段列表);
從已經(jīng)有的表中復(fù)制表的結(jié)構(gòu)
create table 表名2 select * from 表名1 where 條件;
復(fù)制表
create table 表名2 select * from 表名1;
drop table 表名;
6、對表重新命名
alter table table1 rename as table2;
7此衅、修改列的類型
alter table 表名1 modify id int unsigned;//修改列id的類型為int unsigned
alter table 表名1 change id sid int unsigned;//修改列id的名字為sid强戴,而且把屬性修改為int unsigned
8、創(chuàng)建索引
alter table 表名 add index ind_id (id);
create index ind_id on 表名 (id);
創(chuàng)建唯一索引
create unique index ind_id on 表名 (id);//建立唯一性索引
9挡鞍、刪除索引
drop index idx_id on 表名;
alter table 表名 drop index ind_id;
10骑歹、 清空表中記錄:
delete from 表名;
11、 顯示表中的記錄:
select * from 表名;
12墨微、聯(lián)合字符或者多個列(將列id與":"和列name和"="連接)
select concat(id,':',name,'=') from students;
13道媚、limit(選出10到20條)<第一個記錄集的編號是0>
select * from students order by id limit 9,10;
14、往表中加入記錄
insert into 表名 values ("參數(shù)1","參數(shù)2");
15翘县、更新表中數(shù)據(jù)
update 表名 set 參數(shù)1="值1" where 參數(shù)2='值2';
16最域、退出MYSQL
exit
其它:
show processlist;列出每一筆聯(lián)機(jī)的信息。
show varlables;列出mysql的系統(tǒng)設(shè)定锈麸。
show tables from db_name;列出db_name中所有數(shù)據(jù)表;
show [full] columns from table_name;列出table_name中完整信息镀脂,如欄名、類型,包括字符集編碼忘伞。
show index from table_name; 列出table_name中所有的索引薄翅。
show table status;钞馁;列出當(dāng)前數(shù)據(jù)庫中數(shù)據(jù)表的信息。
show table status from db_name;匿刮;列出當(dāng)前db_name中數(shù)據(jù)表的信息僧凰。
alter table table_name engine innodb|myisam|memory ;更改表類型
explain table_name / describe table_name ; 列出table_name完整信息,如欄名熟丸、類型训措。
show create table table_name 顯示當(dāng)前表的建表語句
alter table table_name add primary key (picid) ; 向表中增加一個主鍵
alter table table_name add column userid int after picid 修改表結(jié)構(gòu)增加一個新的字段
alter table table_name character set gb2312 改變表的編碼
select user(); 顯示當(dāng)前用戶。
select password(’root’); 顯示當(dāng)前用戶密碼
select now(); 顯示當(dāng)前日期
flush privileges 在不重啟的情況下刷新用戶權(quán)限
mysqld –default-character-set=gb2312 ;設(shè)置默認(rèn)字符集為gb2312
五光羞、導(dǎo)出和導(dǎo)入數(shù)據(jù)
1绩鸣、 導(dǎo)出數(shù)據(jù):
mysqldump --opt test > mysql.test
即將數(shù)據(jù)庫test數(shù)據(jù)庫導(dǎo)出到mysql.test文件,后者是一個文本文件
如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把數(shù)據(jù)庫dbname導(dǎo)出到文件mysql.dbname中纱兑。
2呀闻、備份數(shù)據(jù)庫
mysqldump -u root 庫名>xxx.data
3、恢復(fù)數(shù)據(jù)庫
mysql -u root -p 庫名 < xxx.data
4潜慎、導(dǎo)入數(shù)據(jù):
mysqlimport -u root -p123456 < mysql.dbname
5捡多、 將文本數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫:
文本數(shù)據(jù)的字段數(shù)據(jù)之間用tab鍵隔開。
use test;
load data local infile "文件名" into table 表名;
6铐炫、用文本方式將數(shù)據(jù)裝入數(shù)據(jù)庫表中(例如~/Desktop/mysql.txt)
LOAD DATA LOCAL INFILE "~/Desktop/mysql.txt" INTO TABLE MYTABLE;
7垒手、導(dǎo)入.sql文件命令(例如~/Desktop/mysql.sql)
use database;
source ~/Desktop/mysql.sql;
六、注意點(diǎn)
1倒信、使用索引的缺點(diǎn)
1)減慢增刪改數(shù)據(jù)的速度科贬;
2)占用磁盤空間;
3)增加查詢優(yōu)化器的負(fù)擔(dān)鳖悠;
當(dāng)查詢優(yōu)化器生成執(zhí)行計劃時榜掌,會考慮索引,太多的索引會給查詢優(yōu)化器增加工作量乘综,導(dǎo)致無法選擇最優(yōu)的查詢方案憎账;
2、分析索引效率
方法:在一般的SQL語句前加上explain瘾带;
分析結(jié)果的含義:
1)table:表名鼠哥;
2)type:連接的類型,(ALL/Range/Ref)看政。其中ref是最理想的朴恳;
3)possible_keys:查詢可以利用的索引名;
4)key:實際使用的索引允蚣;
5)key_len:索引中被使用部分的長度(字節(jié))于颖;
6)ref:顯示列名字或者"const"(不明白什么意思);
7)rows:顯示MySQL認(rèn)為在找到正確結(jié)果之前必須掃描的行數(shù)嚷兔;
8)extra:MySQL的建議森渐;
3做入、使用較短的定長列
1)盡可能使用較短的數(shù)據(jù)類型;
2)盡可能使用定長數(shù)據(jù)類型同衣;
a)用char代替varchar竟块,固定長度的數(shù)據(jù)處理比變長的快些耐齐;
b)對于頻繁修改的表浪秘,磁盤容易形成碎片,從而影響數(shù)據(jù)庫的整體性能埠况;
c)萬一出現(xiàn)數(shù)據(jù)表崩潰耸携,使用固定長度數(shù)據(jù)行的表更容易重新構(gòu)造。使用固定長度的數(shù)據(jù)行辕翰,每個記錄的開始位置都是固定記錄長度的倍數(shù)夺衍,可以很容易被檢測到,但是使用可變長度的數(shù)據(jù)行就不一定了喜命;
d)對于MyISAM類型的數(shù)據(jù)表沟沙,雖然轉(zhuǎn)換成固定長度的數(shù)據(jù)列可以提高性能,但是占據(jù)的空間也大渊抄;
4尝胆、使用not null和enum
盡量將列定義為not null丧裁,這樣可使數(shù)據(jù)的出來更快护桦,所需的空間更少,而且在查詢時煎娇,MySQL不需要檢查是否存在特例二庵,即null值,從而優(yōu)化查詢缓呛;
如果一列只含有有限數(shù)目的特定值催享,如性別,是否有效或者入學(xué)年份等哟绊,在這種情況下應(yīng)該考慮將其轉(zhuǎn)換為enum列的值因妙,MySQL處理的更快,因為所有的enum值在系統(tǒng)內(nèi)都是以標(biāo)識數(shù)值來表示的票髓;
5攀涵、使用optimize table
對于經(jīng)常修改的表,容易產(chǎn)生碎片洽沟,使在查詢數(shù)據(jù)庫時必須讀取更多的磁盤塊以故,降低查詢性能。具有可變長的表都存在磁盤碎片問題裆操,這個問題對blob數(shù)據(jù)類型更為突出怒详,因為其尺寸變化非常大炉媒。可以通過使用optimize table來整理碎片昆烁,保證數(shù)據(jù)庫性能不下降吊骤,優(yōu)化那些受碎片影響的數(shù)據(jù)表。 optimize table可以用于MyISAM和BDB類型的數(shù)據(jù)表静尼。實際上任何碎片整理方法都是用mysqldump來轉(zhuǎn)存數(shù)據(jù)表水援,然后使用轉(zhuǎn)存后的文件并重新建數(shù)據(jù)表;
6茅郎、使用procedure analyse()
可以使用procedure analyse()顯示最佳類型的建議蜗元,使用很簡單,在select語句后面加上procedure analyse()就可以了系冗;例如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二條語句要求procedure analyse()不要建議含有多于16個值奕扣,或者含有多于256字節(jié)的enum類型,如果沒有限制掌敬,輸出可能會很長惯豆;
7、使用查詢緩存
1)查詢緩存的工作方式:
第一次執(zhí)行某條select語句時奔害,服務(wù)器記住該查詢的文本內(nèi)容和查詢結(jié)果楷兽,存儲在緩存中,下次碰到這個語句時华临,直接從緩存中返回結(jié)果芯杀;當(dāng)更新數(shù)據(jù)表后,該數(shù)據(jù)表的任何緩存查詢都變成無效的雅潭,并且會被丟棄揭厚。
2)配置緩存參數(shù):
變量:query_cache _type,查詢緩存的操作模式扶供。有3中模式筛圆,0:不緩存;1:緩存查詢椿浓,除非與select sql_no_cache開頭太援;2:根據(jù)需要只緩存那些以select sql_cache開頭的查詢;query_cache_size:設(shè)置查詢緩存的最大結(jié)果集的大小扳碍,比這個值大的不會被緩存提岔。
8、調(diào)整硬件
1)在機(jī)器上裝更多的內(nèi)存左腔;
2)增加更快的硬盤以減少I/O等待時間唧垦;
尋道時間是決定性能的主要因素,逐字地移動磁頭是最慢的液样,一旦磁頭定位振亮,從磁道讀則很快巧还;
3)在不同的物理硬盤設(shè)備上重新分配磁盤活動;
如果可能坊秸,應(yīng)將最繁忙的數(shù)據(jù)庫存放在不同的物理設(shè)備上麸祷,這跟使用同一物理設(shè)備的不同分區(qū)是不同的,因為它們將爭用相同的物理資源(磁頭)褒搔。
9阶牍、安全
剛安裝好的MySql包含一個含空密碼的root帳戶和一個匿名帳戶,這是很大的安全隱患星瘾,對于一些重要的應(yīng)用我們應(yīng)將安全性盡可能提高走孽,在這里應(yīng)把匿名帳戶刪除、 root帳戶設(shè)置密碼琳状,可用如下命令進(jìn)行:
use mysql;
delete from User where User=”";
update User set Password=PASSWORD(’newpassword’) where User=’root’;
改完重啟 mysql 才能生效.