设为首页 加入收藏

TOP

mysql不被人知的秘密(一)
2014-11-24 07:28:07 来源: 作者: 【 】 浏览:2
Tags:mysql 秘密

先建立两张表。

1.student表

\

2.grade表

\

一:mysql的复制技术

1.表与数据的复制->>实现表结构和数据的同步

create table desttable select * from srctable;

(desttable:目标表,srctable:原表)

2.表结构的复制->>只实现表结构的同步

create table desttable select * from srctable where 0>1;

想想为什么???

select语句既产生了表结构又产生了结果集,如果后面限制条件不成立,那么结果集为空,就实现了只复制表结构。

3.全表记录的复制->>将一个表的全部记录插入另外一个表

insert into desttable select * from srctable;

4.部分字段的复制

insert into desttable(字段一,字段二.......) select (字段一,字段二.......) from srctable;

二:索引注意事项

(1):使用FULLTEXT参数可以设置索引为全文索引,全文索引只能创建在CHAR ,VARCHAR ,TEXT类型字段上。->>但只有MyISAM存储引擎支持全文索引。

(2):多列索引:在表的多列字段上建立一个索引,但只有在查询这些字段的第一个字段时,索引才会被使用。

(3):查询语句使用like关键字进行查询,如果匹配的第一个字符为”%“时,索引不会被使用

select * from student where num like '%4'; //索引不会被使用

select * from student where num like '4%'; //索引会被使用

(4):查询语句中使用or关键字时,只有or前后两个条件的列都是索引时,查询时才使用索引

(5): 学会使用explain检查索引是否被使用,我们用explain命令检验(2)的说法

先创建索引:create index index_nu_name on student(num,name);

#1. explain select * from student where num=2;

执行结果如下:

\

#2.explain select * from student where name=‘lwy’;

执行结果如下:

\

通过比较,我们发现,第二个的possible-key和key等都为空,而且Extra显示查询用where子句没有用索引。

我们关注一下rows信息,如果用where子句,则查询行数为2,如果使用索引,则查询行数为1(这张表只有2条记录,可以想象如果记录为上万条,用索引真的很快)

所以,通过实实验证明了我们(2)的说法。

三:权限管理

mysql中的权限分配是按照user表,db表,tables_priv表,columns_priv表的顺序进行分配的。数据库系统中,

先判断user表中的值是否是Y,如果是Y则就不需要检查下面的表了。如果user表的为N,则依次检查db表,tables_priv表,和columns_priv表。

简单的说,就是user表存储的是对所有数据库的权限,db表存储的是对某一数据库的权限,tables_privs存储的是对数据库表的权限,columns_privs存储的是表中列的权限。

比如我们新建一用户:

#1.create user 'test1' identified by 'admin'; //注意:用户名和密码要交引号,为什么->>字符串

注意下面的:create user 'test2'@localhost identified by 'admin';

这两句有什么区别呢?

有localhost标识的代表该用户只能在本地连接mysql数据库,而不能通过远程连接。不带localhsot的可以通过远程连接mysql数据库。

显著的区别就是在user表的Host字段一个是localhost一个是%

这时我们用test1用户连接mysql,发现成功连接,用命令show databases 发现只有information_schema这个数据库,为什么会有这个数据库呢??

information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,

如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。在MySQL中,

把information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。

如数据库名,数据库的表,表栏的数据类型与访问权限等。在information_schema中,有数个只读表。它们实际上是视图,而不是基本表,

因此,你将无法看到与之相关的任何文件。

我们用root用户查看一下发现在user表中的权限全是N,也就是说什么都做不了。

这时给用户授予权限:grant seelct ,update on *.* to test1;

## *.*:第一个*代表数据库,第二个*代表表,所以*.*就是所有数据库的所有表。

这时会发现user表的select_priv和update_priv字段的值变为了Y。

这时再用test1用户连接mysql数据库,show database ,发现所有的数据库都可以查看和更新了。

#2.这时我们再给test2授权:grant select ,update on mysql.* to test2; //只能查询和更新mysql的所有表。

这时就会发现user表中用户test2的所有权限都是N,而db表中test2用户对mysql数据库的select_priv和update_priv的值为Y。

下面tables_priv表,和columns_priv表的权限由自己分析。

经过以上分析,我们对mysql的权限有了更深一点的认识。

四:mysql日志

mysql日志有四种:

#1.二进制文件:以二进制的形式记录了数据库中的操作,但不记录查询语句

#2.错误日志:记录mysql的启动,关闭和运行错误等信息,默认开启且无法停止

#3.通用查询日志:记录用户登录和记录查询的信息

#4.慢查询日志:记录查询时间超过指定时间的操作

默认情况下,只开启了错误日志的功能,其余的根据需要管理员设置

##使用二进制日志还原数据库

因为二进制文件存储更新数据库的语句,所以可以用来还原数据库

mysqlbinlog filename.number | mysql -uroot -p //mysqlbinlog 用于打开二进制文件

使用mysqlbinlog进行还原数据库时,必须是编号(number)小的先还原。

五:性能优化

#1.性能参数:

show status ; //查询mysql的性能参数

show status like 'value' ; //查看某一参数

常用参数介绍如下:

Connections:连接mysql服务器的次数

Uptim

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇解决MySQL无法远程访问的方法 下一篇MySQL远程访问授权及快速修复

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Libevent C++ 高并发 (2025-12-26 00:49:30)
·C++ dll 设计接口时 (2025-12-26 00:49:28)
·透彻理解 C 语言指针 (2025-12-26 00:22:52)
·C语言指针详解 (经典 (2025-12-26 00:22:49)
·C 指针 | 菜鸟教程 (2025-12-26 00:22:46)