linux下mysql常用操作
2018-01-24 13:02
381 查看
清屏快捷键 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); d0f1 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
相关文章推荐
- Linux常用命令二 之 Mysql相关操作
- Linux操作系统操作MySQL常用命令小结
- Linux终端操作MySQL常用命令
- Linux终端操作MySQL常用命令
- linux下mysql常用操作
- Linux 操作MySQL常用命令行
- Linux 操作MySQL常用命令行
- Linux命令行操作MySQL常用命令
- Linux安装Mysql及常用操作
- mysql常用操作命令 linux系统环境
- linux下mysql常用基本操作
- mysql 常用数据库命令 (linux 下特殊操作)
- 详解Linux终端 MySQL常用操作指令
- Linux 操作MySQL常用命令行(转)
- linux操作系统操作MySQL常用命令
- Linux 操作MySQL常用命令行
- Linux 下 MySql 常用操作命令
- Linux下操作mysql的常用语句,以及解决在putty中不能够输入中文的问题
- Linux常用MySQL操作命令
- linux mysql 常用操作命令