mysql基本用法

mysql
mysql特點:
   1,簡單易用,
   2,性能方面,一直是 MySQL 引以爲自豪的一個特點。在權威的第三方評測機構多次測試較
      量各種數據庫 TPCC 值的過程中,MySQL 一直都有非常優異的表現,而且在其他所有商用的
      通用數據庫管理系統中,僅僅只有 Oracle 數據庫能夠與其一較高下
   3,Facebook 這樣大型的網站都是使用 MySQL 數據庫,就可以看出,MySQL在穩定可靠性方面,並不會比我們的商業廠商的產品有太多遜色。而且排在全球前10位的大型網站裏面,大部分都有部分業務是運行在 MySQL數據庫環境上,如 Yahoo,Google 等
MySQL 的主要適用場景
   1,Web 網站系統
   2,日誌記錄系統
   3,數據倉庫系統
   4,嵌入式系統


MySQL 各模塊


wKioL1NHzU7yROWtAAJiyrG71VE713.png

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:要新建的庫。

wKiom1NHzeKSBs5vAAAV0BKLTEM817.png

刪除庫
drop database woo;
woo:要刪除的庫

設定默認庫
use wpdb;
表示設定wpdb爲默認的庫,也就是進入這個庫

4,創建表
create table info(id tinyint auto_increment primary key,name char(12),tel char(15));

wKioL1NHzgPy5rkIAAAacZjLGnk408.png

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:表名。

wKioL1NHzizAVJWxAAAxiFglzbs126.png

6,在表中插入數據
mysql> insert into info(id,name,tel) values (1,'zheng','32423432'),
   -> (2,'wang','234324534'),
   -> (3,'zou','345345324'),
   -> (4,'huang','896586746'),
   -> (5,'shu','32452345');

wKiom1NHzoSDkNOhAAA3MBuwtsw920.png

insert into values:關鍵字。
info(id,name,tel):表名和要插入的字段,如果每列都插入可省。
(1,'zheng','32423432'):每行的內容,字符要加引號,數值不能加引號;用逗號分隔多行。

7,查看錶的內容
select * from info;
select from:關鍵字。
*:要查看的列,*表示所有,如果只查看name,tel寫成select name,tel from info;
info:表名。

wKioL1NHzr7AQIxoAAAvEnpO-Ik734.png

8,增加表字段
獲取幫助:help alter table
alter table info add mail char(20);
alter table add:關鍵字。
info:表名。
mail char(20):要新增的字段。

wKiom1NHz5zBGZ7gAAAZhKThtHc672.png

刪除表中字段: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;

wKioL1NHzzPCzZ5MAAA8572nZAg637.png

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就改。

wKiom1NH0BDgfSeZAABqWgaQfr4253.png

通過mysql庫的user表修改密碼
update user set password=password('cptbuptp') where host='172.16.%.%';

wKioL1NH0BKDweOIAACwuGTPBKk869.png

如果不想加密:update user set password='cptbuptp' where host='172.16.%.%';

10,刪除行
查看幫助:help delete

delete from info where id=6;
刪除id=6的行。

11,show
查看所以庫
show databases;


wKioL1NH0IzA2wGIAAAuQTEUa1Y243.png

查看庫中所有表
show tables;


查看錶狀態
show table status\G
\G:按行顯示

wKioL1NH0Q2jDph_AADjQbOl2Fc180.png

查看所有全局變量
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()

準備的表

wKiom1NH0VWQr2RDAABkS5LZl4Q483.png

1,查詢本班平均年齡
select avg(age) from info;

wKiom1NH0cTgeJMrAAAZGxhXllE517.png

2,查詢男生和女生各自的平均年齡
select gender,avg(age) from info group by gender;

wKioL1NH0bTRpwGPAAAjtdq_6BU078.png

3,查詢年齡大於20的同學
select name,age from info where age>20;

wKiom1NH0fbjrewbAAAdWbGV4ns000.png

4,求年齡之和
select sum(age) from info ;


5,查詢shu同學,學的什麼課
select name,sourse from info,class where name='shu' and info.classid=class.classid;

wKioL1NH0jeAp_tbAAAd4afqWWc668.png


定義別名查詢
select name,sourse from info as i,class as c where name='shu' and i.classid=c.classid;

wKiom1NH0nSycuHfAAA9OGEDZoU317.png

子查詢
select * from (select name,sourse from info as i,class as c where i.classid=c.classid) as cc  where name='shu';

wKiom1NH0qnCtMAsAAAou3OWBt0930.png

上面三條語句的查詢結果是一樣的,一般不用子查詢,因爲效率低。

13,查詢緩存
查看和查詢緩存相關的變量
show global variables like 'query_cache%';

wKioL1NH0r-wlr_LAAB4iM0rlLM299.png

查看當前緩存狀態變量
show global status like 'qcache%';

wKioL1NH0xSSt4BqAACCKYizDN4602.png

緩存塊大小計算query_cache_min_res_unit    
一般用已使用的緩存空間除以緩存條數
(query_cache_size-qcache_free_memory)/Qcache_queries_in_cache

緩存命中率計算
緩存命中次數除以總查詢數

wKiom1NH04Syd-ECAAA_zx-kqEo951.png

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';

wKiom1NH0-ii7Dj5AAAvcnLLAFM379.png

修改爲共享表空間
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
~                           

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章