我所理解的MySQL

何为MySQL?

 

 

MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。

MySQL的发展如何?

MySQL 数据库开源免费,能够跨平台,支持分布式,性能也不错,可以和 PHP、Java 等 Web 开发语言完美配合,非常适合中小型企业作为 Web 数据库(网站数据库)。

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

MySQL干什么用的?

MySQL 软件采用了双授权政策(本词条"授权政策"),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
由于其社区版的性能卓越,搭配 PHP ,Linux和 Apache 可组成良好的开发环境,经过多年的web技术发展,在业内被广泛使用的一种web服务器解决方案之一,称之为LAMP。

posted @ 2021-01-25 10:15  阜城小柳  阅读(390)  评论(0)    收藏  举报