linux下mysql常用操作

6 篇文章 0 订阅
2 篇文章 0 订阅
清屏快捷键 ctrl+l
1,查看系统版本:getconf LONG_BIT
2,linux下解压mysql提示“旧选项f需要参数”  意思是你要加个f参数
    tar xvfz mysql.xx.tar.gz
    这样解压
    如果需要指定目录 后面加上路径 就可以了
3,切换目录 cd $HOME
4,登陆mysql # mysql -u root 
退出: exit
5,进入 mysql mysql -u root -p
展示表空间 show databases;
切换表空间  use 表空间名字;
6,保存编辑文件 按ESC :wq!
7,到根目录 cd /
8,设置utf-8 格式  vim /ect/my.cnf  在[mysqld] 下面添加 character_set_server = utf8 ,如果还是乱码重新创建表空间 因为原来的表空间用的格式还是拉丁文
    windows系统 frm文件 存放表结构
                myd(d =data )文件 存放表数据
                myi(i = index) 文件 存放表索引

MySql 架构层次

 1,连接层 eg:jdbc..等
 2,服务层 DDL,DML,DQL语句
 3,引擎层 相应的语句调用相应的引擎(这样可以优化查询速度,引擎层也可以自己去做)
 4,存储层 与硬盘的底层打交道,那数据写入 或者传输

查看Mysql 引擎 : show engines;
查看关闭的引擎 : show variables like '%storage_engine%';

MyISAM 和 InnoDB 的区别

MyISAM 不支持事务 而 InnoDB 支持事务,这样就导致MyISAM查询较快  而InnoDB事务就会导致查询较慢 

SQL 分析

单值索引:
    Eg:
    给user表中的name 字段建索引
    Create index idx_user_name on user(name)   //idx = 索引 + 表名+ 字段

复值索引:
    Eg:
    给user表中的name ,email字段建索引
    Create index idx_user_nameEmail on user(name,email)   //idx = 索引 + 表名+ 字段

SQL JOINS的几种连接方式

create table tbl_dept(
id int(11) not null auto_increment,
deptName varchar(30) default null, (部门名称)
locAdd varchar(40) default null,(所在楼层)
 primary key(id)
) engine = innodb auto_increment = 1 default charset = utf8;

create table tbl_emp(
id int(11) not null auto_increment,
name varchar(30) default null, 
deptid int(11) default null, (部门ID)
primary key(id),
key fk_dept_id(deptid)
#constraint fk_dept_id foreign key (deptid) references tbl_dept(id)
)
engine = innodb auto_increment = 1 default charset = utf8;


insert into tbl_dept(deptName,locAdd) values('RD',11);
insert into tbl_dept(deptName,locAdd) values('HR',12);
insert into tbl_dept(deptName,locAdd) values('MK',13);
insert into tbl_dept(deptName,locAdd) values('MIS',14);
insert into tbl_dept(deptName,locAdd) values('FD',15);

insert into tbl_emp(name,deptid) values('z3',1);
insert into tbl_emp(name,deptid) values('z4',1);
insert into tbl_emp(name,deptid) values('z5',1);
insert into tbl_emp(name,deptid) values('w5',2);
insert into tbl_emp(name,deptid) values('w6',2);
insert into tbl_emp(name,deptid) values('s7',3);
insert into tbl_emp(name,deptid) values('s8',4);
insert into tbl_emp(name,deptid) values('s9',51);
  为例

Emp表数据如图:
![这里写图片描述](https://img-blog.csdn.net/20180124125343662?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

Dept表数据如图:
![这里写图片描述](https://img-blog.csdn.net/20180124125426871?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)


1.  交集
 即 员工一定部门,部门一定有员工
![这里写图片描述](https://img-blog.csdn.net/20180124125510665?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Select * from tbl_emp a join tbl_dept b on a.deptid = b.id

2.  A的集合(包括A B相等的集合)
即 查询出所有员工对应的部门 没有部门的补null


![这里写图片描述](https://img-blog.csdn.net/20180124125554402?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Select * from tbl_emp a left join tbl_dept b on a.deptid = b.id

3.查询出员工表中 没有部门的员工
![这里写图片描述](https://img-blog.csdn.net/20180124125630341?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Select * from tbl_emp a left join tbl_dept b on a.deptid = b.id
Where  b.id is null

4.查询出所有员工对应的所有部门,员工没有部门的和部门中没有员工的都查出来
![这里写图片描述](https://img-blog.csdn.net/20180124125707355?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

注:mysql 没有full outer 
所以:
Select * from tbl_emp a left join tbl_dept b on a.deptid = b.id
Union
Select * from tbl_emp a right join tbl_dept b on a.deptid = b.id
//查询出A 的集合 和B的集合的并集  就等同于 full outer  
Union 有去重功能


5.查询出员工表中没有部门的人 以及部门表中没有员工的人
![这里写图片描述](https://img-blog.csdn.net/20180124125751745?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
Select * from tbl_emp a left join tbl_dept b on a.deptid = b.id
Union
Select * from tbl_emp a right join tbl_dept b on a.deptid = b.id
Where a.deptid is null
And b.id is null 

索引

官方解释:索引就是数据结构
查看索引:show index from TableName;

执行计划

Explain

| id | select_type | table   | type | possible_keys | key  | key_len | ref  | rows | Extra |

Id 
1)  Id 相同,执行顺序由上至下
2)  Id 不同 id值越高执行顺序越高
3)  Id 相同不同,同时存在 (子查询) 先执行子查询的内容 然后再执行外面的内容
Select_tyle
1)  Primary  最后执行的
2)  Simple 简单的
3)  Union 联合
4)  …
Table
    表名
Type
    从最好到最差依次是:
    System>const>eq_ref>ref>range>index>all
System
 表中只有一条记录
Const 
表中只匹配一条记录  eg. Where id = xxx
Eq_ref 
唯一索引扫描,只匹配到一条记录
Ref 非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找扫描的混合体
    Eg. 在emp 表中 创建复合索引
        1),Create index inde_emp_name_age on tbl_emp(name,age)
        2).select * from tbl_emp e
          Where name = ‘z3’
           注:此处 name 查出来的记录只有一条 (也就是说name = z3 只匹配到一条记录)

Range:
 in, between , > <
Index :  
对btree 遍历 查询的速度肯定会比all快
 possible_keys
    显示可能应用在这张表中的索引,一个或多个.查询设计到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用


key  
    实际使用的索引.如果没null ,则没有使用索引
    查询中若使用了覆盖索引,则该索引仅出现在key列表中
    Eg. 在emp 表中 创建复合索引
        1),.Create index inde_emp_name_age on tbl_emp(name,age)
        2) .explain select name,age from tbl_emp
        3).此时 possible_keys(MySQL认为可能用到的索引没有,实际上查询的字段和建立的复合索引刚好吻合,所以key 用到了inde_emp_name_age 索引 )
![这里写图片描述](http://img.blog.csdn.net/20180124125933471?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

key_len
1)  限制查询的结果越多(where 后面跟的条件越多),key_len精度越大
2)  同样的查询结果  精度越小越好  也就是说限制条件越少越好


Extra
1).Useringfilesort(虽然建了索引,但是还是使用了MySQL自己的索引)

![这里写图片描述](http://img.blog.csdn.net/20180124130103942?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

2).Using temporary (使用临时表)
![这里写图片描述](http://img.blog.csdn.net/20180124130157099?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE5MjA0NDc5Mzk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

Between ,in , type 都输出range
 因为此处查出来的数据会作为一张临时表存在,然而在排序的时候又没有遵循建立索引的先后顺序 所以会出现usingfilesort 又因为此处用到了临时表 所以出现了 , Using temporary

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值