mysql命令 用户以及权限管理 root密码恢复 查询数据库 字符串操作

2015-07-11 22:17:00
admin
原创 1697
摘要:mysql命令 用户以及权限管理 root密码恢复 查询数据库 字符串操作

一、mysql命令

连接mysql数据库:

mysql -h127.0.0.1 -uwebadmin -p3scard dbname

mysql -h127.0.0.1 -P3306 -uwebadmin -p3scard dbname


执行sql语句:

mysql -h127.0.0.1 -uwebadmin -p3scard dbname -e "show databases;"

echo "show databases;" | mysql -h127.0.0.1 -uwebadmin -p3scard dbname


常用参数:

--unbuffered, -n Flush the buffer after each query,每次查询数据都从服务器获取;

--quick, -q Do not cache each query result,每次返回少量数据,不进行结果缓存,减少内存使用量

--silent, -s Silent mode,Produce less output,安静模式可以减少日志输出;

--raw, -r,特殊字符不进行转义;

--no-auto-rehash, -A,禁用自动补全功能,加快命令启动速度;


用户表特性:

mysql.user表的主键是host+user,即用户由host和user决定;

用户授权时,如果不指定机器,默认user@'%';

原则上%不包括localhost,但有些版本也包括;


用户以及权限管理:

update user set host='localhost' where user='root';
set password for root@localhost=password('123456');
grant all on *.* to root@'localhost' identified by '123456';

grant select on *.* to root@'localhost' identified by '123456';
revoke all on *.* from root@'localhost';
flush privileges;


细节特性:

1、mysql和mysqldump使用的数据库密码通过ps命令无法查看,操作系统有做特殊处理;

2、mysql客户端会存储操作记录到文件.mysql_history,删除该文件可以删除敏感操作记录;

3、sql注释在客户端解释,不会被发送到服务端,如果通过函数发送则可以发送到服务端;

4、my.cnf文件中配置skip-grant-tables,重启mysqld,由于没有载入权限表,root可以免密登录;


二、常用数据库操作

注释语法:

1、单行注释:#字符开始到行尾;

2、单行注释:--加空白字符开始到行尾;

3、多行注释:/*comment*/,/*开始注释,*/结束注释;


数据库管理

drop database test;

create database test default charset=utf8 collate=utf8_bin; 校对保证排序正确;

show create database test;

show databases; 

use test,使用某个数据库;

select database(); 查看当前数据库;

show tables; 查看数据库所有表名;

show table status\G 查看数据库所有表信息;


drop table test;
create table test(id int, type varchar(32), age int);

alter table test ADD COLUMN school varchar(64);
alter table test DROP COLUMN school;

show create table eps_file;

desc eps_file;


数据操作:

insert into test values(1, 'a', 10);
insert into test values(2, 'b', 11);
insert into test values(3, 'c', 12);

update test SET age=age+10 where type='c';

delete from test where id=3;


查询语句

1、查找库show databases like 'xx%',查找表show tables like 'xx%';

2、查询条件包含比较操作则返回结果不包含NULL;

3、distinct用于唯一查询,返回结果包括NULL;

4、limit [offset],count用于限制查询记录数,offset参数慎用,可能导致性能问题;

5、count(1)、count(*)、count(列名)、count(distinct 列名):

      count(1)比count(*)快速;

      count(列名)不统计NULL;

      count(distinct 列名)不统计NULL,且唯一统计;


select distinct(列名) from test; 

select * from eps_file where title in('location', 'JavaCard') \G

select count(*) from eps_file where create_date between '2014-05-20 00:00:00' and '2015-05-20 23:59:59'\G


字符串操作

1、字符串函数索引从1开始,查找不到返回0;

2、字符串函数不区分大小写,replace除外,如果要区分使用binary关键字,select locate('ad', binary 'admin');

3、substr函数pos可以是负数,表示从尾部开始;

4、like特殊字符,%匹配任意数量字符,_匹配一个字符;

5、like '%key%',这种模糊查询会导致整表搜索,数据量大时谨慎使用;

6、mysql使用C式转义字符,所以rlike使用双反斜杠\\表示单反斜杠\;

7、like、rlike、regexp不区分大小写,如果要区分使用binary关键字,binary name like 'Pi%';

locate(substr, str)

locate(substr, str, pos)

position(substr in str)

instr(str, substr)

substr(str, pos)

substr(str, pos, len)

substring_index(str, delim, count)

replace(str, from_str, to_str)

concat(str1,str2,...)


select * from eps_file where pathname like '%201411%'\G

select * from eps_file where locate('201411', pathname) > 0\G

select * from eps_file where position('201411' in pathname) > 0\G

select * from eps_file where instr(pathname, '201411') > 0\G

select substr('abcdef', 4); 输出def

select substr('abcdef', 4, 2); 输出de

select substr('abcdef', -3); 输出def

select substr('abcdef', -3, 2); 输出de

select substring_index('www.mysql.com', '.', 2); 输出www.mysql

select substring_index('www.mysql.com', '.', -2); 输出mysql.com

select replace('www.mysql.com', 'w', 'Ww'); 输出WwWwWw.mysql.com

select concat('www', '.3scard', '.com'); 输出www.3scard.com


常用数值函数

truncate(X, D),截断小数,保留指定位小数,剩余部分都丢弃。

select truncate(12345.6789, 2); 输出12345.67
select truncate(12345.6789, -2); 输出12300


分组和排序查询

1、分组查询结果只能是组名和聚集函数;

2、只有having可以对分组结果进行过滤;

3、常用聚合函数:sum、avg、group_concat;

4、排序可以使用列名、列别名、列位置,列位置从1开始;

分组查询:select extension,sum(size) from eps_file group by extension order by sum(size) asc\G

分组过滤:select type,sum(size) as total from eps_file group by type having total>1024

多个字段排序:select * from eps_file order by id desc,size desc\G

发表评论
评论通过审核之后才会显示。