mysql
mysql特点:
   1,简单易用,
   2,性能方面,一直是 MySQL 引以为自豪的一个特点。在权威的第三方评测机构多次测试较
      量各种数据库 TPCC 值的过程中,MySQL 一直都有非常优异的表现,而且在其他所有商用的
      通用数据库管理系统中,仅仅只有 Oracle 数据库能够与其一较高下
   3,Facebook 这样大型的网站都是使用 MySQL 数据库,就可以看出,MySQL在稳定可靠性方面,并不会比我们的商业厂商的产品有太多逊色。而且排在全球前10位的大型网站里面,大部分都有部分业务是运行在 MySQL数据库环境上,如 Yahoo,Google 等
MySQL 的主要适用场景
   1,Web 网站系统
   2,日志记录系统
   3,数据仓库系统
   4,嵌入式系统


MySQL 各模块


mysql基本用法_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:要新建的库。

mysql基本用法_mysql_02

删除库
drop database woo;
woo:要删除的库

设定默认库
use wpdb;
表示设定wpdb为默认的库,也就是进入这个库

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

mysql基本用法_mysql_03

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

mysql基本用法_mysql_04

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

mysql基本用法_mysql_05

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

7,查看表的内容
select * from info;
select from:关键字。
*:要查看的列,*表示所有,如果只查看name,tel写成select name,tel from info;
info:表名。

mysql基本用法_mysql_06

8,增加表字段
获取帮助:help alter table
alter table info add mail char(20);
alter table add:关键字。
info:表名。
mail char(20):要新增的字段。

mysql基本用法_mysql_07

删除表中字段:alter table info drop mail;
修改表字段属性:alter table info change mail email char(18) default'cento@163.com';
                 表示把mail改为email,为18个字符,默认为cento@163.com。
插入新行测试:insert into info(id,name,tel) values (6,'zao','12345678911');
select * from info;

mysql基本用法_mysql_08

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='zheng@163.com' where id=1;
update set:关键字。
info:表名。
email='zheng@163.com' :把这个人的email改为zheng@163.com。
where id=1:条件,表示id=1就改。

mysql基本用法_mysql_09

通过mysql库的user表修改密码
update user set password=password('cptbuptp') where host='172.16.%.%';

mysql基本用法_mysql_10

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

10,删除行
查看帮助:help delete

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

11,show
查看所以库
show databases;


mysql基本用法_mysql_11

查看库中所有表
show tables;


查看表状态
show table status\G
\G:按行显示

mysql基本用法_mysql_12

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

准备的表

mysql基本用法_mysql_13

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

mysql基本用法_mysql_14

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

mysql基本用法_mysql_15

3,查询年龄大于20的同学
select name,age from info where age>20;

mysql基本用法_mysql_16

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


5,查询shu同学,学的什么课
select name,sourse from info,class where name='shu' and info.classid=class.classid;

mysql基本用法_mysql_17


定义别名查询
select name,sourse from info as i,class as c where name='shu' and i.classid=c.classid;

mysql基本用法_mysql_18

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

mysql基本用法_mysql_19

上面三条语句的查询结果是一样的,一般不用子查询,因为效率低。

13,查询缓存
查看和查询缓存相关的变量
show global variables like 'query_cache%';

mysql基本用法_mysql_20

查看当前缓存状态变量
show global status like 'qcache%';

mysql基本用法_mysql_21

缓存块大小计算query_cache_min_res_unit    
一般用已使用的缓存空间除以缓存条数
(query_cache_size-qcache_free_memory)/Qcache_queries_in_cache

缓存命中率计算
缓存命中次数除以总查询数

mysql基本用法_mysql_22

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

mysql基本用法_mysql_23

修改为共享表空间
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
~