mysql 用户的创建:必须是root用户
1,进入到mysql数据库下
mysql> use mysql
Database changed
2,对新用户的增删改查:
创建新用户;
# 指定ip:192.118.1.1的mjj用户登录
create user 'mjj'@'192.118.1.1' identified by '123';
# 指定ip:192.118.1.开头的mjj用户登录
create user 'mjj'@'192.118.1.%' identified by '123';
# 指定任何ip的mjj用户登录
create user 'mjj'@'%' identified by '123';
3,删除用户:
drop user '用户名'@'ip地址'
4,修改密码:
set password for '用户名'@'ip地址'=password('新密码');
授权用户:
show grants for '用户'@'ip地址' 查看用户的权限
连接数据库: mysql -h 192.168.19.200 -utest -p
#授权 mjj用户仅对db1.t1文件有查询、插入和更新的操作 grant select ,insert,update on db1.t1 to "mjj"@'%'; # 表示有所有的权限,除了grant这个命令,这个命令是root才有的。mjj用户对db1下的t1文件有任意操作 grant all privileges on db1.t1 to "mjj"@'%';
#mjj用户对db1数据库中的文件执行任何操作
grant all privileges on db1.* to "mjj"@'%';
#mjj用户对所有数据库中文件有任何操作
grant all privileges on *.* to "mjj"@'%';
#取消权限
# 取消mjj用户对db1的t1文件的任意操作
revoke all on db1.t1 from 'mjj'@"%";
# 取消来自远程服务器的mjj用户对数据库db1的所有表的所有权限
revoke all on db1.* from 'mjj'@"%";
取消来自远程服务器的mjj用户所有数据库的所有的表的权限 revoke all privileges on *.* from 'mjj'@'%';
4,mysql备份命令行操作 默认会存到自己前方的地址
数据结构 + 数据
mysqldump -u root db1> db1.sql -p
数据表结构
mysqldump -u root -d db1>db1.sql -p
导入现有的某个数据库
create database db10 新创建
mysql -u root db10 < db1.aql -p
4索引 index
有索引:创建索引的本质,就是创建额外的文件(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询。但是创建索引越多,会对硬盘也是有损耗。
a.额外的文件保存特殊的数据结构
b.查询快,但是插入更新删除依然慢
c.创建索引之后,必须命中索引才能有效
作用:约束和加速查询
300w套数据
select name from user where id =200000;
设置索引之后,会额外生成一个额外的索引文件夹
1,普通索引:
作用:加速查询
创建 create index ix_name on userinfo(name)
或者:create table userinfo(
nid int not null auto_increment primary key,
name varchar(32) not null,
email varchar(64) not null,
index ix_name(name)
);
删除 : drop 索引的名字 on 表名
查看 index from 表名
唯一的索引
加速查找和唯一约束
create unique index ix_emial on userinfo(email)
drop index ix_email on userinfo
主键索引
约束 加速查询
索引名词 :
覆盖索引(直接从索引文件中获取数据)
select name from userinfo where name = 'alex111' name 和后边的条件
索引合并:(两个单列索引)
select * form userinfo where id=2 and name = 'alex2'
create table userinfo( id int not null auto_increment primary key, name varchar(32) not null, email varchar(64) not null, unique index ix_name(name) ) or create table userinfo( id int not null auto_increment, name varchar(32) not null, email varchar(64) not null, primary key(nid), unique index ix_name(name) ) 创建表+主键索引
创建 alter table 表名 add primary key(列名)
联合索引
联合普通索引
create index ix_name_emial on userinfo (name,email)
在左边的大于右边的,单独拿出来的话两个可以一起更为快
正确使用索引:
- like '%xx' select * from userinfo where name like '%al'; - 使用函数 select * from userinfo where reverse(name) = 'alex333'; - or select * from userinfo where id = 1 or email = 'alex122@oldbody'; 特别的:当or条件中有未建立索引的列才失效,以下会走索引 select * from userinfo where id = 1 or name = 'alex1222'; select * from userinfo where id = 1 or email = 'alex122@oldbody' and name = 'alex112' - 类型不一致 如果列是字符串类型,传入条件是必须用引号引起来,不然... select * from userinfo where name = 999; - != select count(*) from userinfo where name != 'alex' 特别的:如果是主键,则还是会走索引 select count(*) from userinfo where id != 123 - > select * from userinfo where name > 'alex' 特别的:如果是主键或索引是整数类型,则还是会走索引 select * from userinfo where id > 123 select * from userinfo where num > 123 - order by select email from userinfo order by name desc; 当根据索引排序时候,选择的映射如果不是索引,则不走索引 特别的:如果对主键排序,则还是走索引: select * from userinfo order by nid desc; - 组合索引最左前缀 如果组合索引为:(name,email) name and email -- 使用索引 name -- 使用索引 email -- 不使用索引
左前缀:
create index ix_name_email on userinfo(name,email);
select * from userinfo where name = 'alex';
select * from userinfo where name = 'alex' and email='alex@oldBody';
(1)name和email ---使用索引
(2)name ---使用索引
(3)email ---不适用索引
对于同时搜索n个条件时,组合索引的性能好于多个单列索引
******组合索引的性能>索引合并的性能*********
(1)避免使用select * (2)count(1)或count(列) 代替count(*) (3)创建表时尽量使用char代替varchar (4)表的字段顺序固定长度的字段优先 (5)组合索引代替多个单列索引(经常使用多个条件查询时) (6)尽量使用短索引 (create index ix_title on tb(title(16));特殊的数据类型 text类型) (7)使用连接(join)来代替子查询 (8)连表时注意条件类型需一致 (9)索引散列(重复少)不适用于建索引,例如:性别不合适