1. 程式人生 > >mysql命令

mysql命令

設備 利用 管理員 變化 lte 爭用 ont 性別 enum

啟動:net start mySql;
進入:mysql -u root -p 或者 mysql -h localhost -u root -p databaseName;
列出數據庫:show databases;
選擇數據庫:use databaseName;
列出表格:show tables。
顯示表格列的屬性:show columns from tableName;
建立數據庫:source fileName.txt;
匹配字符:能夠用通配符_代表不論什麽一個字符,%代表不論什麽字符串;
添加一個字段:alter table tabelName add column fieldName dateType;

添加多個字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
多行命令輸入:註意不能將單詞斷開;當插入或更改數據時。不能將字段的字符串展開到多行裏,否則硬回車將被儲存到數據中;
添加一個管理員帳戶:grant all on *.* to [email protected] identified by "password";
每條語句輸入完成後要在末尾填加分號‘;‘。或者填加‘\g‘也能夠。
查詢時間:select now();

查詢當前用戶:select user();
查詢數據庫版本號:select version();
查詢當前使用的數據庫:select database();

1、刪除student_course數據庫中的students數據表:
rm -f student_course/students.*

2、備份數據庫:(將數據庫test備份)
mysqldump -u root -p test>c:\test.txt
備份表格:(備份test數據庫下的mytable表格)
mysqldump -u root -p test mytable>c:\test.txt

將備份數據導入到數據庫:(導回test數據庫)
mysql -u root -p test

3、創建暫時表:(建立暫時表zengchao)
create temporary table zengchao(name varchar(10));

4、創建表是先推斷表是否存在
create table if not exists students(……);

5、從已經有的表中復制表的結構
create table table2 select * from table1 where 1<>1;

6、復制表
create table table2 select * from table1;

7、對表又一次命名
alter table table1 rename as table2;

8、改動列的類型
alter table table1 modify id int unsigned;//改動列id的類型為int unsigned
alter table table1 change id sid int unsigned;//改動列id的名字為sid,並且把屬性改動為int unsigned

9、創建索引
alter table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引

10、刪除索引
drop index idx_id on table1;
alter table table1 drop index ind_id;

11、聯合字符或者多個列(將列id與":"和列name和"="連接)
select concat(id,‘:‘,name,‘=‘) from students;

12、limit(選出10到20條)<第一個記錄集的編號是0>
select * from students order by id limit 9,10;

13、MySQL不支持的功能
事務,視圖,外鍵和引用完整性,存儲過程和觸發器


14、MySQL會使用索引的操作符號
<,<=,>=,>,=,between,in,不帶%或者_開頭的like

15、使用索引的缺點
1)減慢增刪改數據的速度;
2)占用磁盤空間。
3)添加查詢優化器的負擔;
當查詢優化器生成運行計劃時。會考慮索引,太多的索引會給查詢優化器添加工作量,導致無法選擇最優的查詢方案;

16、分析索引效率
方法:在一般的SQL語句前加上explain;
分析結果的含義:
1)table:表名。
2)type:連接的類型,(ALL/Range/Ref)。

當中ref是最理想的;
3)possible_keys:查詢能夠利用的索引名。
4)key:實際使用的索引。
5)key_len:索引中被使用部分的長度(字節)。
6)ref:顯示列名字或者"const"(不明確什麽意思);
7)rows:顯示MySQL覺得在找到正確結果之前必須掃描的行數;
8)extra:MySQL的建議;

17、使用較短的定長列
1)盡可能使用較短的數據類型;
2)盡可能使用定長數據類型;
a)用char取代varchar。固定長度的數據處理比變長的快些;
b)對於頻繁改動的表,磁盤easy形成碎片,從而影響數據庫的總體性能;
c)萬一出現數據表崩潰,使用固定長度數據行的表更easy又一次構造。使用固定長度的數據行。每一個記錄的開始位置都是固定記錄長度的倍數。能夠非常easy被檢測到,可是使用可變長度的數據行就不一定了。
d)對於MyISAM類型的數據表,盡管轉換成固定長度的數據列能夠提高性能。可是占領的空間也大;

18、使用not null和enum
盡量將列定義為not null,這樣可使數據的出來更快。所需的空間更少,並且在查詢時,MySQL不須要檢查是否存在特例,即null值,從而優化查詢;
假設一列僅僅含有有限數目的特定值,如性別,是否有效或者入學年份等,在這樣的情況下應該考慮將其轉換為enum列的值,MySQL處理的更快,由於全部的enum值在系統內都是以標識數值來表示的;

19、使用optimize table
對於常常改動的表,easy產生碎片。使在查詢數據庫時必須讀取很多其它的磁盤塊。減少查詢性能。

具有可變長的表都存在磁盤碎片問題。這個問題對 blob數據類型更為突出,由於其尺寸變化很大。能夠通過使用optimize table來整理碎片,保證數據庫性能不下降,優化那些受碎片影響的數據表。 optimize table能夠用於MyISAM和BDB類型的數據表。實際上不論什麽碎片整理方法都是用mysqldump來轉存數據表,然後使用轉存後的文件並又一次建數據 表;

20、使用procedure analyse()
能夠使用procedure analyse()顯示最佳類型的建議,使用非常easy,在select語句後面加上procedure analyse()就能夠了。比如:
select * from students procedure analyse();
select * from students procedure analyse(16,256);
第二條語句要求procedure analyse()不要建議含有多於16個值,或者含有多於256字節的enum類型,假設沒有限制,輸出可能會非常長;

21、使用查詢緩存
1)查詢緩存的工作方式:
第一次運行某條select語句時。server記住該查詢的文本內容和查詢結果,存儲在緩存中。下次碰到這個語句時,直接從緩存中返回結果;當更新數據表後,該數據表的不論什麽緩存查詢都變成無效的,而且會被丟棄。
2)配置緩存參數:
變量:query_cache _type,查詢緩存的操作模式。

有3中模式。0:不緩存。1:緩存查詢。除非與 select sql_no_cache開頭;2:依據須要僅僅緩存那些以select sql_cache開頭的查詢。 query_cache_size:設置查詢緩存的最大結果集的大小,比這個值大的不會被緩存。

22、調整硬件
1)在機器上裝很多其它的內存;
2)添加更快的硬盤以降低I/O等待時間;
尋道時間是決定性能的主要因素。逐字地移動磁頭是最慢的。一旦磁頭定位。從磁道讀則非常快;
3)在不同的物理硬盤設備上又一次分配磁盤活動。
假設可能。應將最繁忙的數據庫存放在不同的物理設備上。這跟使用同一物理設備的不同分區是不同的,由於它們將爭用同樣的物理資源(磁頭)。

mysql命令