MySQL之mysqlcheck、check、optimize和analyze

MySQL之mysqlcheckcheck、optimize和analyze




    ㈠ optimize         
        optimize可以回收空间、减少碎片、提高I/O
        目前支持的存储引擎有:InnoDB、MyASIM和ARCHIVE
        
        如果是Replication环境、可加NO_WRITE_TO_BINLOG(或者LOCAL、意思完全相同)、比如:
        optimize local table table_name;
        

        以下是一个简单测试:



[plain]   view plain  copy
  1. [mysql@odd employees]$ ls -alh t.ibd  
  2. -rw-rw---- 1 mysql dba 24M 05-22 16:48 t.ibd  
  3.   
  4. 未optimize前、有24M  
  5.   
  6. mysql> optimize table t;  
  7. +-------------+----------+----------+-------------------------------------------------------------------+  
  8. | Table       | Op       | Msg_type | Msg_text                                                          |  
  9. +-------------+----------+----------+-------------------------------------------------------------------+  
  10. | employees.t | optimize | note     | Table does not support optimize, doing recreate + analyze instead |  
  11. | employees.t | optimize | status   | OK                                                                |  
  12. +-------------+----------+----------+-------------------------------------------------------------------+  
  13. 2 rows in set (3.82 sec)  
  14.   
  15. --对于InnoDB的表、上面的内容并非报错、这是MySQL会帮你映射到:alter table table_name engine='InnoDB';  
  16. --MyISAM不会有这种情况  
  17.   
  18.   
  19. [mysql@odd employees]$ ls -alh t.ibd  
  20. -rw-rw---- 1 mysql dba 14M 05-22 16:49 t.ibd  
  21.     
  22. optimize后、剩14M  




     ㈡ check        
        检查表或视图的有无错误
        支持表引擎有:InnoDB和MyISAM
        
        下面简单模拟一个测试:



[plain]   view plain  copy
  1. mysql> check table t;  
  2. +-------------+-------+----------+----------+  
  3. | Table       | Op    | Msg_type | Msg_text |  
  4. +-------------+-------+----------+----------+  
  5. | employees.t | check | status   | OK       |  
  6. +-------------+-------+----------+----------+  
  7. 1 row in set (0.63 sec)  
  8.   
  9. --没有错误的情况是这样的  
  10.   
  11. --用vim打开t.frm随意编辑两把  
  12.   
  13. mysql> check table t\G;  
  14. *************************** 1. row ***************************  
  15.    Table: employees.t  
  16.       Op: check  
  17. Msg_type: Error  
  18. Msg_text: Incorrect information in file: './employees/t.frm'  
  19. *************************** 2. row ***************************  
  20.    Table: employees.t  
  21.       Op: check  
  22. Msg_type: error  
  23. Msg_text: Corrupt  
  24. 2 rows in set (0.00 sec)  
  25.   
  26. --报错了  




     
     ㈢ analyze        
        用于收集优化器统计信息、和tuning相关、
        这个命令对 MyISAM、BDB、InnoDB 存储引擎的表有作用
        如果不想记录到binlog、也可加关键字local或者另外一个



[plain]   view plain  copy
  1. mysql> analyze table t\G;  
  2. *************************** 1. row ***************************  
  3.    Table: employees.t  
  4.       Op: analyze  
  5. Msg_type: Error  
  6. Msg_text: Incorrect information in file: './employees/t.frm'  
  7. *************************** 2. row ***************************  
  8.    Table: employees.t  
  9.       Op: analyze  
  10. Msg_type: error  
  11. Msg_text: Corrupt  
  12. 2 rows in set (0.00 sec)  




分析表主要作用是分析关键字的分布。检查表主要作用是检查表是否存在错误。优化表主要作用是消除删除或者更新造成的空间浪费。本小节将为读者介绍分析表、检查表和优化表的方法。
 
1.分析表
 
MySQL中使用ANALYZE TABLE语句来分析表,该语句的基本语法如下:
 
ANALYZE TABLE 表名1 [,表名2…] ;
使用ANALYZE TABLE分析表的过程中, 数据库 系统 会对表加一个只读锁。在分析期间,只能读取表中的记录,不能更新和插入记录。ANALYZE TABLE语句能够分析InnoDB和MyISAM类型的表。
 
【示例18-8】 下面使用ANALYZE TABLE语句分析score表,分析结果如下:
 
mysql > ANALYZE TABLE score; 
+-------------+-----------+--------------+---------------+ 
| Table    | Op     | Msg_type | Msg_text  | 
+-------------+-----------+--------------+---------------+ 
| test.score | analyze | status    | OK       | 
+-------------+-----------+--------------+---------------+ 
1 row in set (0.05 sec)
上面结果显示了4列信息,详细介绍如下:
 
Table:表示表的名称;
 
Op:表示执行的操作。analyze表示进行分析操作。check表示进行检查查找。optimize表示进行优化操作;
 
Msg_type:表示信息类型,其显示的值通常是状态、警告、错误和信息这四者之一;
 
Msg_text:显示信息。
 
检查表和优化表之后也会出现这4列信息。
 
2.检查表
 
MySQL中使用CHECK TABLE语句来检查表。CHECK TABLE语句能够检查InnoDB和MyISAM类型的表是否存在错误。而且,该语句还可以检查视图是否存在错误。该语句的基本语法如下:
 
CHECK TABLE 表名1 [,表名2…] [option] ;
其中,option参数有5个参数,分别是QUICK、FAST、CHANGED、MEDIUM和EXTENDED。这5个参数的执行效率依次降低。option选项只对MyISAM类型的表有效,对InnoDB类型的表无效。CHECK TABLE语句在执行过程中也会给表加上只读锁。
 
3.优化表
 
MySQL中使用OPTIMIZE TABLE语句来优化表。该语句对InnoDB和MyISAM类型的表都有效。但是,OPTILMIZE TABLE语句只能优化表中的VARCHAR、BLOB或TEXT类型的字段。OPTILMIZE TABLE语句的基本语法如下:
 
OPTIMIZE TABLE 表名1 [,表名2…] ;
通过OPTIMIZE TABLE语句可以消除删除和更新造成的磁盘碎片,从而减少空间的浪费。OPTIMIZE TABLE语句在执行过程中也会给表加上只读锁。
 
说明:如果一个表使用了TEXT或者BLOB这样的数据类型,那么更新、删除等操作就会造成磁盘空间的浪费。因为,更新和删除操作后,以前分配的磁盘空间不会自动收回。使用OPTIMIZE TABLE语句就可以将这些磁盘碎片整理出来,以便以后再利用。






MySQL定期分析检查与优化表

 
 
定期分析表
 
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name]
 
本语句用于分析和存储表的关键字分布。在分析期间,使用一个读取锁定对表进行锁定。这对于MyISAM, BDB和InnoDB表有作用。对于MyISAM表,本语句与使用myisamchk -a相当。
 
MySQL使用已存储的关键字分布来决定,当您对除常数以外的对象执行联合时,表按什么顺序进行联合。 
mysql> analyze table a;
+--------+---------+----------+-----------------------------+
| Table  | Op      | Msg_type | Msg_text                    |
+--------+---------+----------+-----------------------------+
| test.a | analyze | status   | Table is already up to date | 
+--------+---------+----------+-----------------------------+
1 row in set (0.00 sec)
 
定期检查表
 
CHECK TABLE tbl_name [, tbl_name]  [option] 
 
option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
 
检查一个或多个表是否有错误。CHECK TABLE对MyISAM和InnoDB表有作用。对于MyISAM表,关键字统计数据被更新。
mysql> check table a;
+--------+-------+----------+----------+
| Table  | Op    | Msg_type | Msg_text |
+--------+-------+----------+----------+
| test.a | check | status   | OK       | 
+--------+-------+----------+----------+
1 row in set (0.00 sec)
 
CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。
我们为上面的表a创建一个视图 
mysql> create view a_view as select * from a;
Query OK, 0 rows affected (0.02 sec)
 
然后CHECK一下该视图,发现没有问题
mysql> check table a_view;
+-------------+-------+----------+----------+
| Table       | Op    | Msg_type | Msg_text |
+-------------+-------+----------+----------+
| test.a_view | check | status   | OK       | 
+-------------+-------+----------+----------+
1 row in set (0.00 sec)
 
现在删掉视图依赖的表
mysql> drop table a;
Query OK, 0 rows affected (0.01 sec)
 
再CHECK一下刚才的视图,发现报错了
mysql> check table a_view\G;
*************************** 1. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: Table 'test.a' doesn't exist
*************************** 2. row ***************************
   Table: test.a_view
      Op: check
Msg_type: Error
Msg_text: View 'test.a_view' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
*************************** 3. row ***************************
   Table: test.a_view
      Op: check
Msg_type: error
Msg_text: Corrupt
3 rows in set (0.00 sec)
 
ERROR: 
No query specified
 
定期优化表
 
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 
 
如果您已经删除了表的一大部分,或者如果您已经对含有可变长度行的表(含有VARCHAR, BLOB或TEXT列的表)进行了很多更改,则应使用OPTIMIZE TABLE。被删除的记录被保持在链接清单中,后续的INSERT操作会重新使用旧的记录位置。您可以使用OPTIMIZE TABLE来重新利用未使用的空间,并整理数据文件的碎片。
在多数的设置中,您根本不需要运行OPTIMIZE TABLE。即使您对可变长度的行进行了大量的更新,您也不需要经常运行,每周一次或每月一次即可,只对特定的表运行。
OPTIMIZE TABLE只对MyISAM, BDB和InnoDB表起作用。
对于MyISAM表,OPTIMIZE TABLE按如下方式操作:
如果表已经删除或分解了行,则修复表。
如果未对索引页进行分类,则进行分类。
如果表的统计数据没有更新(并且通过对索引进行分类不能实现修复),则进行更新。 
mysql> OPTIMIZE table a;
+--------+----------+----------+-----------------------------+
| Table  | Op       | Msg_type | Msg_text                    |
+--------+----------+----------+-----------------------------+
| test.a | optimize | status   | Table is already up to date | 
+--------+----------+----------+-----------------------------+
1 row in set (0.00 sec)
 
****
需要注意的是无论是ANALYZE,CHECK还是OPTIMIZE在执行期间将对表进行锁定,因此请注意这些操作要在 数据库 不繁忙的时候执行
****
 
 

2012-11-22 13:04 by 轩脉刃, 1318 阅读, 5 评论, 收藏编辑

show table status

mysql官方文档在

http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

这里的rows行是表的行数,但是实际上是不准的。myisam是准的,其他的存储引擎是不准的。要准确的行数就需要使用count(*) 来获取了。

mysql执行大批量删除

执行大批量删除的时候注意要使用上limit

因为如果不用limit,删除大量数据很有可能造成死锁

如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库

ps: 平时update和delete的时候最好也加上limit 1 来防止误操作

optimize、Analyze、check、repair维护操作

l optimize 数据在插入,更新,删除的时候难免一些数据迁移,分页,之后就出现一些碎片,久而久之碎片积累起来影响性能,这就需要DBA定期的优化数据库减少碎片,这就通过optimize命令。

如对MyisAM表操作:optimize table 表名

对于InnoDB表是不支持optimize操作,否则提示“Table does not support optimize, doing recreate + analyze instead”,当然也可以通过命令:alter table one type=innodb; 来替代。

l Analyze 用来分析和存储表的关键字的分布,使得系统获得准确的统计信息,影响 SQL 的执行计划的生成。对于数据基本没有发生变化的表,是不需要经常进行表分析的。但是如果表的数据量变化很明显,用户感觉实际的执行计划和预期的执行计划不 同的时候,执行一次表分析可能有助于产生预期的执行计划。

Analyze table 表名

l Check检查表或者视图是否存在错误,对 MyISAM 和 InnoDB 存储引擎的表有作用。对于 MyISAM 存储引擎的表进行表检查,也会同时更新关键字统计数据

l Repair optimize需要有足够的硬盘空间,否则可能会破坏表,导致不能操作,那就要用上repair,注意INNODB不支持repair操作

生成乱序的id

方法:

使用预设表

比如id和toid的映射

其中id是固定的,toid是随机的。

然后在redis或memcache中记录一个指针值,指向id

当要获取一个新toid的时候,取出指针值,加1,然后去预设表中获取toid

查询和索引

查询的时候必须要考虑到如何命中索引

比如有几个小招:

1 不要在索引列中使用表达式

where mycol *2 < 4

2 不要在like模式的开始位置使用通配符%

where col_name like ‘%string%’

不如

where col_name like ‘string%’

3 避免过多使用mysql自动转换类型,有可能无法用到index

比如

select * from mytbl where str_col=4

但是str_col为字符串,这里其实就隐含了字符串变化

应该使用

select * from mytbl where str_col=’4’

索引比表还大就不需要建立索引了吗

索引是按照顺序排列的。所以即使索引比表大,也是可以加快查询速度的。

当然如果索引比表还大首要的任务必须是检查下索引建立地是否有问题

Char和varchar如何选择

char是定长,varchar变长 
varchar除了设置了数据之外,还多使用1两个字节定义了数据实际长度。

char会在后面空余的行填充上空字符串

myisam建议使用char。myisam中有个静态表的概念。使用char比使用varchar的查询效率高很多。

innodb建议使用varchar。主要是从节省空间的方面考虑

多个TimeStamp设置默认值

一个表中至多只能有一个字段设置CURRENT_TIMESTAMP

对于下面的需求:

一个表中,有两个字段,createtime和updatetime。

1 当insert的时候,sql两个字段都不设置,会设置为当前的时间

2 当update的时候,sql中两个字段都不设置,updatetime会变更为当前的时间

这样的需求是做不到的。因为你无法避免在两个字段上设置CURRENT_TIMESTAMP


解决办法有几个:

1 使用触发器。

2 将第一个timestamp的default设置为0

3 老老实实在sql语句中使用时间戳。

http://www.cnblogs.com/yjf512/archive/2012/11/02/2751058.html

查询数据表有多少行,多少容量

不要使用select count(*)

使用show table status like ‘table_name’  但是innodb的话会有50%左右的浮动,是个预估值

AUTO_INCREMENT的设置

1 不要设置为int,请设置为unsinged int,auto_increment的范围是根据类型来判定的

2 auto_increment数据列必须要有索引,并且保证唯一性。

3 auto_increment必须有NOT NULL属性

4 auto_increment可以使用

UPDATE table SET seq = LAST_INSERT_ID(seq -1)

mysql的表示时间的字段用什么类型

表示时间可以使用timestamp和datetime来使用

datetime表示的时间可以从0000-00-00:00:00 到9999-12-31:00:00:00

timestamp表示的时间为1970-01-01 08:00:01到2038-01-19 11:14:07

timestamp占用的空间比datetime少,且可以设置时区等功能,所以能使用timestamp的地方尽量使用timestamp

使用timestamp还可以设置

[ON UPDATE CURRENT_TIMESTAMP]

[DEFAULT CURRENT_TIMESTAMP]

myisam和innodb支持外键

myisam不支持外键,innodb支持;

如果你使用创建外键的命令对myisam的表操作,操作不会返回失败,但是是没有外键关联建立起来的。

对一个字段加减语句

经常有需求对一个字段加减会使用

update table set a = a+1

这样是对的

但是如果这样设置:

select a from table

取出数据后a为1

update table set a =2

这样会导致如果在select和update之间有其他事务操作修改这个字段的话,导致最后的设置可能出错。






mysqlcheck使用介绍 检查、修复、优化、分析表  

 
官网: https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html


通常使用该工具一般语法为:
  1. shell> mysqlcheck [options] db_name [tbl_name ...]
  2. shell> mysqlcheck [options] --databases db_name ...
  3. shell> mysqlcheck [options] --all-databases

比如对mysql库进行mysqlcheck操作:
  1. [op@sAno1y ~]$ mysqlcheck mysql -uroot -p
  2. Enter password: 
  3. mysql.columns_priv OK
  4. mysql.db OK
  5. mysql.event OK
  6. mysql.func OK
  7. mysql.general_log OK
  8. mysql.help_category OK
  9. mysql.help_keyword OK
  10. mysql.help_relation OK
  11. mysql.help_topic OK
  12. mysql.innodb_index_stats OK
  13. mysql.innodb_table_stats OK
  14. mysql.ndb_binlog_index OK
  15. mysql.plugin OK
  16. mysql.proc OK
  17. mysql.procs_priv OK
  18. mysql.proxies_priv OK
  19. mysql.servers OK
  20. mysql.slave_master_info OK
  21. mysql.slave_relay_log_info OK
  22. mysql.slave_worker_info OK
  23. mysql.slow_log OK
  24. mysql.tables_priv OK
  25. mysql.time_zone OK
  26. mysql.time_zone_leap_second OK
  27. mysql.time_zone_name OK
  28. mysql.time_zone_transition OK
  29. mysql.time_zone_transition_type OK
  30. mysql.user OK

实际上该工具是为了方便用户使用,而使用了CHECK TABLE、REPAIR TABLE、ANALYZE TABLE、OPTIMIZE TABLE语句。

--analyze选项:实际上是执行了ANALYZE TABLE(支持InnoDB,MyISAM,NDB)
--check选项:实际上是执行了CHECK TABLE(支持InnoDB,MyISAM,ARCHIVE,CSV)
--optimize选项:实际上执行了OPTIMIZE TABLE(支持InnoDB,MyISAM,ARCHIVE)
--repair选项:实际上执行REPAIR TABLE(支持MyISAM,ARCHIVE,CSV)

一般情况不需要加这些选项,除非需要修复

其他修改选项:
--repair --quick 尝试快速修复
--repair 正常修复(除非快速修复失败)
--repair  --force 强行修复


当然,在mysqlcheck时,每张表会被加上READ LOCK。
该进程时,尤其是大表,将会变得十分耗时。
且该工具必须在mysqld服务运行的情况下使用。

此外,部分存储引擎的表是不被支持的:
我创了四张表,其存储引擎分别为ARCHIVE、BLACKHOLE、MEMORY、MRG_MYISAM
  1. mysql> use test;
  2. Database changed
  3. mysql> show tables;
  4. +----------------+
  5. | Tables_in_test |
  6. +----------------+
  7. | archive_tb     |
  8. | blackhole_tb   |
  9. | memory_tb      |
  10. | mrg_myisam_tb  |
  11. +----------------+
  12. 4 rows in set (0.00 sec)

然后check了一下,发现blackhole和memory是不被支持的,因为这两个存储引擎只存储.frm的表定义在磁盘上。

  1. [op@sAno1y ~]$ mysqlcheck test -uroot -p
  2. Enter password:
  3. test.archive_tb OK
  4. test.blackhole_tb
  5. note : The storage engine for the table doesn't support check
  6. test.memory_tb
  7. note : The storage engine for the table doesn't support check
  8. test.mrg_myisam_tb OK


其他选项参考:
Format Description Introduced
--all-databases Check all tables in all databases  
--all-in-1 Execute a single statement for each database that names all the tables from that database  
--analyze Analyze the tables  
--auto-repair If a checked table is corrupted, automatically fix it  
--bind-address=ip_address Use specified network interface to connect to MySQL Server  
--character-sets-dir=path Directory where character sets are installed  
--check Check the tables for errors  
--check-only-changed Check only tables that have changed since the last check  
--check-upgrade Invoke CHECK TABLE with the FOR UPGRADE option  
--compress Compress all information sent between client and server  
--databases Process all tables in the named databases  
--debug[=debug_options] Write a debugging log  
--debug-check Print debugging information when program exits  
--debug-info Print debugging information, memory, and CPU statistics when program exits  
--default-auth=plugin Authentication plugin to use 5.6.2
--default-character-set=charset_name Specify default character set  
--defaults-extra-file=file_name Read option file in addition to usual option files  
--defaults-file=file_name Read only named option file  
--defaults-group-suffix=str Option group suffix value  
--extended Check and repair tables  
--fast Check only tables that have not been closed properly  
--fix-db-names Convert database names to 5.1 format  
--fix-table-names Convert table names to 5.1 format  
--force Continue even if an SQL error occurs  
--help Display help message and exit  
--host=host_name Connect to MySQL server on given host  
--login-path=name Read login path options from .mylogin.cnf 5.6.6
--medium-check Do a check that is faster than an --extended operation  
--no-defaults Read no option files  
--optimize Optimize the tables  
--password[=password] Password to use when connecting to server  
--pipe On Windows, connect to server using named pipe  
--plugin-dir=path Directory where plugins are installed 5.6.2
--port=port_num TCP/IP port number to use for connection  
--print-defaults Print defaults  
--protocol=type Connection protocol to use  
--quick The fastest method of checking  
--repair Perform a repair that can fix almost anything except unique keys that are not unique  
--secure-auth Do not send passwords to the server in old (pre-4.1.1) format 5.6.17
--shared-memory-base-name=name The name of shared memory to use for shared-memory connections  
--silent Silent mode  
--skip-database=db_name Omit this database from performed operations 5.6.11
--socket=path For connections to localhost, the Unix socket file to use  
--ssl Enable SSL for connection  
--ssl-ca=file_name Path of file that contains list of trusted SSL CAs  
--ssl-capath=dir_name Path of directory that contains trusted SSL CA certificates in PEM format  
--ssl-cert=file_name Path of file that contains X509 certificate in PEM format  
--ssl-cipher=cipher_list List of permitted ciphers to use for SSL encryption  
--ssl-crl=file_name Path of file that contains certificate revocation lists 5.6.3
--ssl-crlpath=dir_name Path of directory that contains certificate revocation list files 5.6.3
--ssl-key=file_name Path of file that contains X509 key in PEM format  
--ssl-verify-server-cert Verify server Common Name value in its certificate against host name used when connecting to server  
--tables Overrides the --databases or -B option  
--use-frm For repair operations on MyISAM tables  
--user=user_name, MySQL user name to use when connecting to server  
--verbose Verbose mode  
--version Display version information and exit  
--write-binlog Log ANALYZE, OPTIMIZE, REPAIR statements to binary log. --skip-write-binlog adds NO_WRITE_TO_BINLOG to these statements.  




MySQL数据库mysqlcheck的使用方法的相关知识是本文我们主要要介绍的内容,我们知道,mysqlcheck,是mysql自带的可以检查和修复MyISAM表,并且它还可以优化和分析表,mysqlcheck的功能类似myisamchk,但其工作不同。

主要差别是当mysqld服务器在运行时必须使用mysqlcheck,而myisamchk应用于服务器没有运行时。使用mysqlcheck的好处是不需要停止服务器来检查或修复表。使用myisamchk修复失败是不可逆的。

1.如果需要检查并修复所有的数据库的数据表,那么可以使用:


# mysqlcheck -A -o -r -p  
# Enter password:    
database1 OK  
database2 OK  
2.如果需要修复指定的数据库用
# mysqlcheck -A -o -r Database_NAME -p  
3.如果使用其他用户名修复
# mysqlcheck -A -o -r -p -u admin  
这里admin是指定的mysql用户帐号。
4.如果使用指定的mysql.sock进入数据库并修复
# mysqlcheck -A -o -r -p -S /tmp/mysql.sock  
这里/tmp/mysql.sock是指定的mysql.sock存放的路径。




About Me

.............................................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、博客园(http://www.cnblogs.com/lhrbest)和个人微信公众号(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/

● 本文博客园地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、个人简介及小麦苗云盘地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

.............................................................................................................................................

● QQ群号:230161599(满)、618766405

● 微信群:可加我微信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友646634621,注明添加缘由

● 于 2017-09-01 09:00 ~ 2017-09-30 22:00 在魔都完成

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

.............................................................................................................................................

小麦苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麦苗出版的数据库类丛书http://blog.itpub.net/26736162/viewspace-2142121/

.............................................................................................................................................

使用微信客户端扫描下面的二维码来关注小麦苗的微信公众号(xiaomaimiaolhr)及QQ群(DBA宝典),学习最实用的数据库技术。

   小麦苗的微信公众号      小麦苗的DBA宝典QQ群1     小麦苗的DBA宝典QQ群2        小麦苗的微店

.............................................................................................................................................

ico_mailme_02.png
DBA笔试面试讲解群1
DBA笔试面试讲解群2
欢迎与我联系



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2144629/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26736162/viewspace-2144629/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值