mysql+秘密_mysql不被人知的秘密

http://blog.csdn.net/yueguanghaidao/article/details/6933387

2011

先建立两张表。

1.student表

75583838_1.gif

2.grade表

75583838_2.gif

一: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;

执行结果如下:

75583838_3.gif

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

执行结果如下:

75583838_4.gif

通过比较,我们发现,第二个的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服务器的次数

Uptime:mysql服务器的上线时间

Slow_queries:慢查询的次数

Com_select:查询操作的次数

Com_insert:插入操作的次数

Com_update:更新操作的次数

Com_delete:删除操作的次数

#2.优化查询

##2.1用explain和describe分析查询语句

注使用索引查询记录时,一定要注意索引的使用情况  ->>见上面使用索引的注意事项

我们将上面用过的explain来分析

explain select  * from student where num=2;

执行结果如下:

75583838_3.gif

1.id :select语句的编号

2.select_type:select语句的类型

#simple:简单查询,不包含连接查询和子查询

#primary:主查询或最外层的查询语句

#union:连接查询的第二个或后面的查询语句

2.table:查询的表

4.type:表的连接类型

#system:表中只有一条记录

#const:表中有多条记录,但只从表中查询一条

#all:对表进行了完整的扫描

#eq_ref:多表连接时,后面的表使用了union或者primary key

#ref:多表连接时,后面使用了普通索引

#unique_subquery:子查询使用了unique或者primary key

#index_subquery:子查询使用了普通索引

#range:查询语句给出了查询范围

#index:对表中的索引进行了完整的扫描

5.possible_keys:查询中可能使用的索引

6.key:查询使用的索引

7.key_len:索引字段的长度

8.ref:表示使用哪个列或常数与索引一起查询记录

9.rows:查询的行数

10:extra:查询附加信息

describe 语句使用方法和explain一样。

##2.2 优化子查询

多用连接查询来代替子查询

为什么呢?

因为子查询时,mysql需要为内层查询结果建立一个临时表,然后外层查询在临时表中查找,查询完后需要撤销临时表。

而连接查询不需要建立临时表,所以比子查询快。

##2.3优化插入记录的速度

插入记录时,索引,唯一性校验等都会影响到插入记录的速度。而且,一次插入多条记录和多次插入记录所耗费的时间也不同。

1.禁用索引

插入数据时,mysql会根据表的索引对插入的记录进行排序,降低插入速度。解决这个问题可以在插入记录之前禁用索引,等到插入完毕后在开启。

alter table 表名 disable keys;    //禁用索引

alter table 表名 enable keys;    //开启索引

2.禁用唯一性检查

插入数据时,mysql会对插入的记录进行唯一性检查,会降低插入速度。

set unique_checks=0;     //禁用唯一性

set unique_checks=1;    //开启唯一性

3.优化insert语句

insert into 表名 values

(......),

(......);

insert into 表名 values (......);

insert into 表名 values (......);

上面两种插入方法,第一种与数据库的连接等操作,明显比第二种快。

##2.3分析表,检查表和优化表

分析表:分析关键字的分布

检查表:检查表是否存在错误

优化表:消除删除或者更新造成的空间浪费

当执行下面三个操作时,mysql数据库会给表加一个只读锁,只能读取记录,不能更新和插入记录。

1.分析表

analyze table 表名1 [,表名2....];

2.检查表

check table 表名1 [,表名2....] [option];

option有五个参数:quick,fast,changed,medium,extended  ->>执行效率依次降低

-->option选项只对MyISAM类型的表有效。

3.优化表

optimize table 表名1 [,表名2....];

-->只能优化表中的varchar,blob和text字段

如果一个表使用了text或blob这样的数据类型,那么更新,删除等就会造成的磁盘空间的浪费。操作完成后,以前分配的磁盘空间不会自动回收。

使用optimize可以将磁盘碎片整理出来,以便利用。

下面是一些mysql基本使用命令。

一:mysql查看基本命令

(1):查看当前有哪些数据库

show databases;

(2):使用mysql数据库

use test;

(3):查看当前数据库下的表

show tables;

(4):查看上述grade表建立的命令

show  create table grade;

(5):查看student表的结构

desc student;

(6):查看数据库支持的存储引擎

show engines;

show engines \G ;      //  \G让结果更美观

(7):查看默认存储引擎

show variables like 'storage_engine';

二:mysql的修改表

(1)将grade表的course字段的数据类型修改为varchar(20)

alter table grade modify course varchar(20);

(2)将s_num字段的位置改到course前面

alter table grade modify  s_num  int(10) after id;

(3)将grade字段改名为score

alter table grade change grade score varchar(10);

(4)删除grade的外键约束

alter table grade drop foreign key grade_fk;

(5)将grade的存储引擎修改为INnoDB

alter grade engine=INnoDB;

(6)将student的address字段删除

alter table student drop address;

(7)在student表中增加名位phone的字段

alter table student add phone int (10);

(8)将grade的表名修改为gradeinfo

lter table grade rename gradeinfo;

(9):删除student表

drop table student;         //由于先前已经删除外键,所以才能删除父表studnet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?

背景及目标:现有数据1000w单表,为压力测试准备1亿条数据。步骤:1.将1000w条记录,除id外都导入到多个文件中://DELIMITERDROP PROCEDURE if EXISTS createManyTable;create PROCEDURE createManyTable()BEGINDECLARE i …

windows键盘在mac上怎么识别_Mac电脑怎么使用pc键盘?

苹果电脑一般需要使用配套的mac键盘,毕竟按键和普通pc键盘不一样。但是总会遇到一些情况,比如配套的mac键盘坏了,而刚好有一个pc键盘,那么这时候苹果电脑要怎么用pc键盘呢?这边小编跟大家介绍mac电脑连接pc键盘以及设置…

LOJ#6002. 「网络流 24 题」最小路径覆盖

模板。 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 //#include<time.h>5 //#include<complex>6 //#include<set>7 //#include<queue>8 #include<algorithm>9 #include<stdlib.h>10 using namespace s…

zabbix mysql设置中文乱码_解决zabbix监控因php问题导致图形界面中文乱码方法

解决因编译php中添加了-enable-gd-jis-conv选项导致Zabbix监控系统图形界面中文乱码问题现象&#xff1a;php编译参数&#xff1a;说明&#xff1a;如果PHP编译时启用–enable-gd-jis-conv选项的话&#xff0c;那么非ASCII字符(例如汉字、拼音、希腊文和箭头) 会被当成EUC-JP编…

熟悉常用的HDFS操作

一、Hadoop提供的Shell命令完成相同任务&#xff1a; 在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件txt&#xff0c;里面可以随意输入一些单词.在本地查看文件位置&#xff08;ls&#xff09;在本地显示文件内容使用命令把本地文件系统中的“txt”上传到HDFS中的当…

mysql 低端_mysql入门

相关了解(重点内容从标题一开始)目前主流数据库有:sqlserver, mysql, Qracle, SQLite, Access, MS SQL Server等, 我主要说的是mysql;以下几点需要记住!!!SQL包括了所有对数据库的操作, 主要由4个部分组1. 数据库定义语言(DDL): 用于定义和管理数据库对象, 包括数据库, 基本表,…

阿里云服务器由于被检测到对外攻击,已阻断该服务器对其它服务器端口的访问...

问题&#xff1a; (系统&#xff1a;CentOS 7.2 ) 前几天在阿里云服务器安装了Redis, 刚开始没有设置redis密码, 后台阿里云发送多次邮件提示如下&#xff1a; 经过几次波折才发现并彻底解决了问题&#xff1a; 原因&#xff1a; 估计是因为 Redis服务开启时没有设置密码 &…

批量找注入 python3+sqlmap结合

注入一直都是用sqlmap 导致本来就不怎么精通的手工注入现在就忘的一干二净 想实战练习 却一时又找不到有注入的网站 于是便有了这篇文章 想找个批量获取域名链接的工具 但都是只是获取域名而已 都没获取后面的参数 于是自己写了个只获取bing前10页的结果 输入q 结束循环…

golang 反射

参考&#xff1a;|--http://blog.51cto.com/speakingbaicai/1707637 |--https://studygolang.com/articles/6324 反射是在golang程序运行时检查变量所具有类型的一种机制。由于反射可以得出关于变量结构的数据&#xff08;即“关于数据的数据”&#xff09;&#xff0c;所以这也…

java硬件编程_关于JAVA并发编程你需要知道的——硬件篇

无论程序语言如何千变万化&#xff0c;他们都深深地根植于目前的计算机体系结构。左图是intel CPU的三级高速缓存设计&#xff0c;由于高速缓存对程序员基本不可见&#xff0c;因此可以抽象为右图。缓存的设计首先还是先谈谈左图。L1-cache分为两部分&#xff0c;i-cache存储指…

net Core做一个webApi的简单实例

用NetCore 和Dapper 和mySql做一个简单的实例&#xff0c; 一准备工作 1&#xff1a;VS2017windos系统&#xff0c;也可以用其他的操作系统和工具 2&#xff1a;一台Cenetos的虚拟机或者虚拟机 二&#xff1a;开始 1&#xff1a;用微软官方的netCore的ToDo项目改造&#xff0c;…

java 文件输出流_Java 文件输出流

Java IO教程 - Java文件输出流创建输出流要写入文件&#xff0c;我们需要创建一个FileOutputStream类的对象&#xff0c;它将表示输出流。// Create a file output streamString destFile "test.txt";FileOutputStream fos new FileOutputStream(destFile);当写入文…

MySQL5.7参数log_timestamps

最近测试MySQL 5.7.21 Community Server这个版本的MySQL数据库时&#xff0c;发现其错误日志的时间跟系统当前时间不一致&#xff0c;后面检查发现日期时间格式都是UTC时间&#xff0c;查了一下相关资料&#xff0c;原来在MySQL 5.7.2 之后日志文件里面的时间戳从默认的本地系…

Tidb集群加mysql_TiDB - 快速入门,集群搭建

TiDB 是开源分布式关系型数据库&#xff0c;是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP)的融合型分布式数据库产品&#xff0c;具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 …

python递归函数

递归函数简单来说就是函数的自我调用。使用递归函数很多时候可以使得代码简洁&#xff0c;优雅。可以把复杂的问题分解成简单的子问题。递归有无与伦比的魅力&#xff0c;从著名的计算机名言就可以看出递归的奇妙&#xff1a; To iterate is human,to recurse divine. 迭代者为…

java知识体系 servlet_03-Servlet 体系结构知识梳理

一、Servlet体系结构Java Web应用是基于Servlet规范运行&#xff0c;Servlet顶层类的关联如下图&#xff1a;从图可看出&#xff0c;Servlet规范基本围绕这几个类运行&#xff0c;其中&#xff0c;与Servlet主动关联的有3个类&#xff0c;分别是ServletRequest、ServletRespons…

testlink自带java api_java如何连接testlink

1.下载相关的jar包2.获取到testlink的url和key&#xff0c;注意&#xff1a;url不是testlink的连接地址&#xff0c;是连接地址/lib/api/xmlrpc.php3.测试是否连接成功public static void main(String args[]) {String url "http://test.tl.gmsd.lan/lib/api/xmlrpc.php&…

lr背景虚化_lr背景虚化_怎样拍出背景模糊的照片

除了锐化之外&#xff0c;要获得独特的&#xff0c;令人难忘的图像&#xff0c;还可以使用其他方法&#xff0c;例如&#xff0c;相反的效果-单个细节的模糊。这样的方法将使人们有可能专注于整个构图的中心人物&#xff0c;为图片增加情感色彩&#xff0c;动作&#xff0c;并为…

在线五子棋JAVA网络编程_实验五 Java网络编程及安全

一、实验内容1&#xff0e;掌握Socket程序的编写&#xff1b;2&#xff0e;掌握密码技术的使用&#xff1b;3&#xff0e;设计安全传输系统。二、实验步骤1. 基于Java Socket实现安全传输2. 基于TCP实现客户端和服务器&#xff0c;结对编程一人负责客户端&#xff0c;一人负责服…

rnn中文语音识别java_语音识别算法阅读之RNN-T-2018

论文&#xff1a;EXPLORING ARCHITECTURES, DATA AND UNITS FOR STREAMING END-TO-END SPEECH RECOGNITION WITH RNN-TRANSDUCER,2018CTC的一个问题在于&#xff0c;其假设当前帧的输出与历史输出之间的条件独立性&#xff1b;RNN-T引入预测网络来弥补CTC这种条件独立性假设带来…