mysql
mysql特點:
1,簡單易用,
2,性能方面,一直是 MySQL 引以爲自豪的一個特點。在權威的第三方評測機構多次測試較
量各種數據庫 TPCC 值的過程中,MySQL 一直都有非常優異的表現,而且在其他所有商用的
通用數據庫管理系統中,僅僅只有 Oracle 數據庫能夠與其一較高下
3,Facebook 這樣大型的網站都是使用 MySQL 數據庫,就可以看出,MySQL在穩定可靠性方面,並不會比我們的商業廠商的產品有太多遜色。而且排在全球前10位的大型網站裏面,大部分都有部分業務是運行在 MySQL數據庫環境上,如 Yahoo,Google 等
MySQL 的主要適用場景
1,Web 網站系統
2,日誌記錄系統
3,數據倉庫系統
4,嵌入式系統
MySQL 各模塊
1,連接進入mysql
mysql -uroot -h192.168.100.7 -p
-u 用戶
-h 主機
-p 密碼
2,mysql的快捷鍵:
Ctrl + w: 刪除光標之前的單詞
Ctrl + u: 刪除光標之前至命令行首的所有內容
Ctrl + y: 粘貼使用Ctrl+w或Ctrl+u刪除的內容
Ctrl + a: 移動光標至行首
Ctrl + e: 移動光標至行尾
3,新建,查看,刪除庫
創建庫
create database wpdb;
create database:關鍵字。
wpdb:要新建的庫。
刪除庫
drop database woo;
woo:要刪除的庫
設定默認庫
use wpdb;
表示設定wpdb爲默認的庫,也就是進入這個庫
4,創建表
create table info(id tinyint auto_increment primary key,name char(12),tel char(15));
create table:關鍵字。
info:要創建的表名。
(id tinyint auto_increment primary key,name char(12),tel char(15)):表每列的名字和類型,用括號括起來,用逗號分隔多個字段。
常用類型有:
數值型:tinyint,smallint,mediumint,int,bigint,decimal,float,doubal
字符型:char,varchar,tinytext,text,mediumtext,longtext,binary,varbinary,tinyblob,blob,mediumblob,longblob
枚舉型:enum
集合型:set
日期時間型:date,time,datetime,timestamp,year
null:允許爲空
default 'string':默認值,不適用於text類型
binary、varbinary和blob幾種字符型常用的屬性修飾符:not null,null,default
整型的常用屬性修飾符:auto_increment(自動增長),unsigned(無符號),null,not null,default
浮點型常用修飾符:not null,null,default,unsigned
日期時間型的修飾符:not null,null,default
enum和set的修飾符: not null,null,default ''
5,查看錶結構
desc info;
desc:關鍵字。
info:表名。
6,在表中插入數據
mysql> insert into info(id,name,tel) values (1,'zheng','32423432'),
-> (2,'wang','234324534'),
-> (3,'zou','345345324'),
-> (4,'huang','896586746'),
-> (5,'shu','32452345');
insert into values:關鍵字。
info(id,name,tel):表名和要插入的字段,如果每列都插入可省。
(1,'zheng','32423432'):每行的內容,字符要加引號,數值不能加引號;用逗號分隔多行。
7,查看錶的內容
select * from info;
select from:關鍵字。
*:要查看的列,*表示所有,如果只查看name,tel寫成select name,tel from info;
info:表名。
8,增加表字段
獲取幫助:help alter table
alter table info add mail char(20);
alter table add:關鍵字。
info:表名。
mail char(20):要新增的字段。
刪除表中字段:alter table info drop mail;
修改表字段屬性:alter table info change mail email char(18) default'[email protected]';
表示把mail改爲email,爲18個字符,默認爲[email protected]。
插入新行測試:insert into info(id,name,tel) values (6,'zao','12345678911');
select * from info;
alter table info add Gender enum('F','M') after name;
添加索引
alter table info add index (name);
查看索引
show indexes from info\G
刪除索引
alter table info drop index name;
9,修改表中數據
獲取幫助:help update
update info set email='[email protected]' where id=1;
update set:關鍵字。
info:表名。
email='[email protected]' :把這個人的email改爲[email protected]。
where id=1:條件,表示id=1就改。
通過mysql庫的user表修改密碼
update user set password=password('cptbuptp') where host='172.16.%.%';
如果不想加密:update user set password='cptbuptp' where host='172.16.%.%';
10,刪除行
查看幫助:help delete
delete from info where id=6;
刪除id=6的行。
11,show
查看所以庫
show databases;
查看庫中所有表
show tables;
查看錶狀態
show table status\G
\G:按行顯示
查看所有全局變量
show global variables;
查看狀態變量
show global status;
12,select查詢
查看當前所在表
select database();
布爾條件表達式操作符:
= <=> <> < <= > >= is null is not null
like: 支持的通配符: %(任意長度的任意字符), _(任意單個字符)
rlike, regexp: 支持使用正則表達式
in: 判斷指定字段的值是否在給定在列表中;
between ... and ...: 位於指定的範圍之間
組合條件測試:
not, !
and, &&
or, ||
聚合函數:
sum(), avg(), max(), min(), count()
準備的表
1,查詢本班平均年齡
select avg(age) from info;
2,查詢男生和女生各自的平均年齡
select gender,avg(age) from info group by gender;
3,查詢年齡大於20的同學
select name,age from info where age>20;
4,求年齡之和
select sum(age) from info ;
5,查詢shu同學,學的什麼課
select name,sourse from info,class where name='shu' and info.classid=class.classid;
定義別名查詢
select name,sourse from info as i,class as c where name='shu' and i.classid=c.classid;
子查詢
select * from (select name,sourse from info as i,class as c where i.classid=c.classid) as cc where name='shu';
上面三條語句的查詢結果是一樣的,一般不用子查詢,因爲效率低。
13,查詢緩存
查看和查詢緩存相關的變量
show global variables like 'query_cache%';
查看當前緩存狀態變量
show global status like 'qcache%';
緩存塊大小計算query_cache_min_res_unit
一般用已使用的緩存空間除以緩存條數
(query_cache_size-qcache_free_memory)/Qcache_queries_in_cache
緩存命中率計算
緩存命中次數除以總查詢數
qcache_hits/(com_select+qcache_hits)
命中和寫入的比率,即Qcache_hits/Qcache_inserts的值,此比值如果能大於3:1,則表明緩存是有效的。
整理緩存碎片:flush query_cache
清空緩存: reset query_cache
緩存優化使用思路:
1、批量寫入而非多次單個寫入;
2、緩存空間不宜過大,因爲大量緩存同時失效時會導致服務器假死;
3、必要時,使用SQL_CACHE和SQL_N0_CACHE手動控制緩存;
4、對寫密集型的應用場景來說,禁用緩存反而能提高性能;
14,相關變量修改
查看默認儲存引擎
show global variables like 'storage_engine'
修改默認儲存引擎
set global storage_engine='innodb';
set storage_engine='innodb';
global是修改的全局的對新登錄的用戶生效,但重啓失效,寫在配置文件會一直生效
沒有global表示當前會話生效
查看innodb使用的表空間
show global variables like 'innodb_file_per_table';
修改爲共享表空間
vim /etc/my.cnf
[mysqld]
innodb_file_per_table
然後重啓mysql生效
查看事務隔離級別
show global variables like 'tx_isolation';
修改隔離級別
set tx_isolation='read-committed';
set global tx_isolation='read-committed';
隔離級別:
read uncommitted (讀未提交)
髒讀,不可重讀,幻讀
read committed (讀提交)
不可重讀,幻讀
repeatable read (可重讀)
幻讀
serializable (可串行化)
強制事務的串行執行避免了幻讀
關閉自動提交,啓動事務
查看是否自動提交
show global variables like 'autocommit';
關閉自動提交
set autocommit=off;
啓動事務
start transaction;
提交事務(保存修改)
commit;
回滾事務 (還原到以前,不保存修改)
rollback;
關閉自動提交可以提高性能,但是不要忘了手動提交,不然白做了。
關於中文字符問題
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
~