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'cento@163.com';
表示把mail改为email,为18个字符,默认为cento@163.com。
插入新行测试: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='zheng@163.com' where id=1;
update set:关键字。
info:表名。
email='zheng@163.com' :把这个人的email改为zheng@163.com。
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
~