mysql 进阶方向_mysql数据库入门、进阶和提升(续二)

第十章 创建计算字段

将表中不同列中的数据字段通过拼接、加减乘除运算计算出结果并单独显示出来。

10.2拼接字段

将不同字段的值连接在一起并构成单个值。使用函数concat(),如果要将此值独立出来需要使用AS来进行别名定义。

mysql> select concat(user_name,':',password) from user;

+-----------------------------------------+

| concat(user_name,':',password)          |

+-----------------------------------------+

| system:                                 |

| admin:286c39c4042493717b7e916eab48eab6  |

| master:cfbf20d7d12069ed501c10cc47f6b788 |

| dtedu:261a07079db097c15150d9a07ba066f8  |

+-----------------------------------------+

4 rows in set (0.00 sec)

将计算字段进行别名设置,使其可以独立出来便于调用。

mysql> select concat(user_name,'(',password,')') as user_passwd from user;

+------------------------------------------+

| user_passwd                              |

+------------------------------------------+

| system()                                 |

| admin(286c39c4042493717b7e916eab48eab6)  |

| master(cfbf20d7d12069ed501c10cc47f6b788) |

| dtedu(261a07079db097c15150d9a07ba066f8)  |

+------------------------------------------+

4 rows in set (0.00 sec)

如果字段中包含空格,可以删除指定字段中的空格,再进行计算。RTrim:删除右边空格,LTrim:删除左边空格,Trim:删除左右两边空格。

mysql> select concat (rtrim(user_name),'(',ltrim(password),')',trim(status)) as new_user from user;

+------------------------------------------------+

| new_user                                       |

+------------------------------------------------+

| system()disabled                               |

| admin(286c39c4042493717b7e916eab48eab6)active  |

| master(cfbf20d7d12069ed501c10cc47f6b788)active |

| dtedu(261a07079db097c15150d9a07ba066f8)active  |

+------------------------------------------------+

4 rows in set (0.00 sec)

select同样提供了用于测试计算语句是否正确的方法。

mysql> select 4+5

-> ;

+-----+

| 4+5 |

+-----+

|   9 |

+-----+

1 row in set (0.00 sec)

mysql> select rtrim(  gong   );

ERROR 1054 (42S22): Unknown column 'gong' in 'field list'

mysql> select rtrim('  gong   ');

+--------------------+

| rtrim('  gong   ') |

+--------------------+

|   gong             |

+--------------------+

1 row in set (0.00 sec)

算术计算字段之间的数值。常用的有加减乘除。

mysql> select user_name+password as new from user;

+-----+

| new |

+-----+

|   0 |

| 286 |

|   0 |

| 261 |

+-----+

4 rows in set, 7 warnings (0.00 sec)

第十一章 使用数据处理函数

函数可以处理很多复杂的计算问题,但是函数的可移植性差,不同DBMS之间的函数差异很大,所以建议在编写脚本的时候对函数的功能进行注释说明。

函数类型:

1、文本处理函数

用于处理文本内容的删除、编辑、转换大小写等功能。

常用的文本处理函数

函数说明

left()right()返回串左边的字符

length()返回串的长度

locate()找出串的一个子串

lower()upper()将串转化为小写

sounded()返回串的soundex值

substring()返回子串的字符

Trim、LTrim、RTrim()删除串旁边的空格

2、算术处理函数

处理数值数据的算术操作,比如返回绝对值、代数运算等功能。

3、处理日期和时间的函数

对日期或者时间进行特定内容的提取。

常用日期处理函数函数说明

adddate()增加一个日期

additive()增加一个时间

curate()返回当前日期

curtime()返回当前时间

date()返回日期时间的日期部分

datediff()计算两个日期的差

date_add()

date_format()高度灵活的日期运算函数

返回一个格式化的日期或时间串day()返回一个日期的天数部分

day0fweek()返回星期几

hour()返回小时部分

minute()返回分钟部分

now()返回当前时间和日期

second()返回秒数

time()返回一个时间部分

year()返回年份部分

数值处理函数函数说明

abs()返回一个数的绝对值

cos()返回一个角的余弦

exp()返回一个数的指数值

mod()返回操作数的余数

pi()返回圆周率rand()返回一个 随机数

sin()返回一个角的正弦

sqrt()返回一个数的平方根

tan()返回一个角度的正切

4、DBMS系统信息提取函数。

第十二章 汇总数据

应用场景:

1、确定表中的行数,或者满足某一个条件的特定行数。

2、获得表中行组的和。

3、找出表列的最大值、最小值、平均值。

12.1聚集函数函数说明

avg()返回某列的平均值

count()返回某列的行数

max()返回某列的最大值

min()返回某列的最小值

sum()返回某列值的和

count()函数的两种用法:

1、count(*):对表中行的数目进行计数(不管表列中是否有空值)

2、count(column)对特定的列中具有值的行进行计数,忽略null值。

第十三章分组数据

应用场合:常规检索方式为全部表内容、通过where来指定具体值、范围的方法。而分组容许把数据分为多个逻辑组,以便能够对每个组进行聚集计算(对行求平均、最大、最小)

比如:mysql> select vend_id, count(*) as num_prods from products group by vend_id;

二、group by

重要规定:

1、group by子句可以包括任意多个列,实现嵌套功能。

mysql> select user_name,count(*) from user group by status;

+-----------+----------+

| user_name | count(*) |

+-----------+----------+

| gongbing  |        6 |

| system    |        1 |

+-----------+----------+

2 rows in set (0.00 sec)

2、实现嵌套后,数据会在规定的最后一个分组实现汇总。

mysql> select user_name,status from user group by status,user_name;

3、group by子句中列出的可以是表达式、检索列,但不能是聚集函数,也不能使用别名。

4、null在分组中单独存在。

5、group by出现位置是在order by之前,where之后。

三、过滤分组having

第十四章 子查询语句

第十五章 联接表

一、什么是联接

利用sql的select查询语句将多个表的不同列连起来并输出。

关系表

依据某种关系存在的多个表,称为关系表。

外键

一个表中的主键在另一个表中出现,它定义了两个表之间的关系。

联接

就是将不同表中的列抽取出来,并通过select查询语句整理成一个完整的信息。此操作依据的就是关系型数据库中的表的关系完成的。

MySQL事务日志

1、特性

事务日志的并发性

为了实现事务日志并发性,需要对数据进行保护,保证数据不会混乱,这里就使用到了“锁”这个功能。

锁的类型:表锁、页锁、行锁,共享锁(读锁)、独占锁(写锁)。

myISAM引擎支持表锁

innoDB引擎执行行锁

根据锁的施加方式:

显示锁(通常不使用此方法,只有在备份的时候使用会非常有用。)

lock tables tbname (read|write)

设置读锁:

mysql> lock tables students read;

Query OK, 0 rows affected (0.00 sec)

解除锁:

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

隐式锁

事务仅在innoDB引擎中支持,在myISAM引擎并不支持,所以要修改引擎才支持事务功能。

默认情况下,mysql将每一条语句都当成一个事务,并在语句执行后提交,可以通过修改变量“autocommit”来改变。

1、查看状态(当前为自动提交)

mysql> show global variables like 'autocommit';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit    | ON    |

+---------------+-------+

1 row in set (0.00 sec)

2、通常在使用innoDB的事务功能时,关闭autocommit的功能,并手动实现提交。可以提供数据库性能。

启动事务

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

提交事务,提交后是不可以在回滚回去。

mysql> commit;

Query OK, 0 rows affected (0.00 sec)

回滚,就是撤销上一条操作

mysql> rollback;

Query OK, 0 rows affected (0.00 sec)

创建回滚点(类似windows的还原点),必要时恢复到还原点之前的状态。

mysql> savepoint del1;

Query OK, 0 rows affected (0.00 sec)

滚回到以前的某一个回滚点:rollback to pointname

mysql的隔离性(变量名:tx_isolation)

通常是为了事务的并发性而存在的。

隔离级别:

1级、read-uncommitted(读取未提交内容,所有事务都可以看到其他未提交事务的执行结果)

2级、read-committed(读取提交内容,一个事务只能看到已经提交的结果。大多数数据库默认级别)

3级、 repeatable-read (可重读,会产生“幻读”,mysql默认级别)

4级、serializable(可串行化)

1、隔离级别只能在会话模式下进行设置。

mysql> set session tx_isolation='read-uncommitted';

Query OK, 0 rows affected (0.00 sec)

将mysql的隔离级别设置为readcommited可以提高数据库的并发能力。

数据库存储引擎篇

由于mysql被oracle收购,存在收费及被oracle冷处理的可能,mysql原创始人有开发了一个新的数据库maria,其实这个数据库在使用上和mysql非常相似,甚至命令很多都是一样的。

maria数据库的引擎自身集成并优化了innoDB。

存储引擎本身是属于表级别的,就是说是建立在表的基础上的。

查看表的存储引擎,实际就是查看表的状态信息。

show table status

Name: toc                        名称

Engine: MyISAM               引擎

Version: 10                          版本

Row_format: Fixed                 行格式

Rows: 0                             表中已有行数

Avg_row_length: 0                     平均行长度

Data_length: 0                         已经存储的数据量

Max_data_length: 2533274790395903                    最大存储数据量

Index_length: 1024                                                索引长度

Data_free: 0                                                         已经分配出去并使用然后又删除的存储空间

Auto_increment: 1                                                    自动增长步长值

Create_time: 2016-07-28 15:59:16                         表的创建时间

Update_time: 2016-07-28 15:59:16                       上次修改记录的时间

Check_time: NULL                                                 上次使用check命令检查表的时间

Collation: latin1_swedish_ci                                排序规则

Checksum: NULL                                                 表的校验和,默认未启用

Create_options:                                                         创建表时使用的其他选项

Comment:                                                           注释,对于myISAM表,存储的是创建表时的commment选项指定的信息。对于innoDB来讲,存储对应的表空间剩余的表空间信息。

早起mysql的默认存储引擎是myISAM,但是他不支持事务,所以出现了innoDB引擎,后来又出现了BDB引擎,innoDB的出现完成了mysql成为完整的关系型数据库。

innoDB:

事务:事务日志

外键:

mvcc:多版本并发控制,类似快照。

支持聚簇索引

支持辅助索引

支持自适应hash索引

支持热备:需要myql enterprise backup,percona xtrabackup

行级锁

myISAM:

全文索引

压缩

空间索引

表级锁

不支持事务和行级锁

崩溃后无法安全恢复

其他引擎介绍:

archive:

仅仅执行insert和select,支持压缩功能。

适用于存储日志信息,或其他按时间序列实现的数据采集类应用

csv:

将数据保存为.csv格式,不支持索引,适用于数据交换。

blackhole:

没有存储机制,任何数据都会被丢失,但会记录二进制日志

federated:

访问远程服务器上的数据的存储引擎:federatedx

memory:

内存存储引擎,比ISAM至少快一个数量级,适用于实现临时表。

mrg myISAM:

可以将多个myISAM表合并成一个ISAM表,实际自身并不存储数据。

第三方存储引擎:

OLTP类:

xtraDB:是innoDB的增强版

PBXT:已经不再继续有人开发维护了。

TokuDB:开源、支持图数据,分形树、执行索引结构。

列式存储引擎:

infobright:最著名的列式存储。

monetDB:

infiniDB:

lucidDB:

社区存储引擎:

aria:

groona:全文索引引擎

qqgraph:支持图,有open query研发

sphinx:

spider:支持分片

VPforMYsql:支持垂直分区

查看服务器中mysql数据库支持的引擎有哪些?

[root@localhost ~]# ll /usr/local/dtedu/mysql/lib/plugin/

总用量 292

-rwxr-xr-x. 1 mysql mysql  7734 6月  28 2013 adt_null.so

-rwxr-xr-x. 1 mysql mysql 10123 6月  28 2013 auth.so

-rwxr-xr-x. 1 mysql mysql  7420 6月  28 2013 auth_socket.so

-rwxr-xr-x. 1 mysql mysql  9545 6月  28 2013 auth_test_plugin.so

-rw-r--r--. 1 mysql mysql   227 7月   2 2012 daemon_example.ini

drwxr-xr-x. 2 mysql mysql  4096 6月  28 2013 debug

-rwxr-xr-x. 1 mysql mysql 46737 6月  28 2013 ha_example.so

-rwxr-xr-x. 1 mysql mysql 75366 6月  28 2013 ha_federated.so

-rwxr-xr-x. 1 mysql mysql 10836 6月  28 2013 libdaemon_example.so

-rwxr-xr-x. 1 mysql mysql 10163 6月  28 2013 mypluglib.so

-rwxr-xr-x. 1 mysql mysql  6663 6月  28 2013 qa_auth_client.so

-rwxr-xr-x. 1 mysql mysql  9334 6月  28 2013 qa_auth_interface.so

-rwxr-xr-x. 1 mysql mysql  7078 6月  28 2013 qa_auth_server.so

-rwxr-xr-x. 1 mysql mysql 45592 6月  28 2013 semisync_master.so

-rwxr-xr-x. 1 mysql mysql 17754 6月  28 2013 semisync_slave.so

选择数据引擎的方法和标准有哪些?

1、是否需要事务

2、备份

3、崩溃恢复

1、查看数据库支持的存储引擎有哪些?

mysql> show engines;

+------------+---------+------------------------------------------------------------+--------------+------+------------+

| Engine     | Support | Comment                                                    | Transactions | XA   | Savepoints |

+------------+---------+------------------------------------------------------------+--------------+------+------------+

| MRG_MYISAM | YES     | Collection of identical MyISAM tables                      | NO           | NO   | NO         |

| CSV        | YES     | CSV storage engine                                         | NO           | NO   | NO         |

| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance     | NO           | NO   | NO         |

| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |

| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables  | NO           | NO   | NO         |

+------------+---------+------------------------------------------------------------+--------------+------+------------+

5 rows in set (0.00 sec)

日志、备份和恢复篇

日志种类

错误日志

查询日志

二进制日志

事务日志

中继日志

慢查询日志

一、错误日志

默认存放位置:--datadir 选项设置的目录,也可通过my.cnf来进行设置。其中

1、log-error

服务器启动和关闭过程中的信息

服务器运行中的错误信息

事件调度器运行一个事件时产生的信息

启动从服务器进程时产生的信息

查看详细错误日志

mysql> show global variables like '%log%';

+-----------------------------------------+---------------------------------+

| Variable_name                           | Value                           |

+-----------------------------------------+---------------------------------+

| back_log                                | 50                              |

| binlog_cache_size                       | 32768                           |

| binlog_direct_non_transactional_updates | OFF                             |

| binlog_format                           | MIXED                           |

| expire_logs_days                        | 0                               |

| general_log                             | OFF                             |是否开启查询日志功能

| general_log_file                        | /data/log/mysql/mysqld.log      |查询日志以文件形式输出的位置

| innodb_flush_log_at_trx_commit          | 1                    |是否缓存中有内容就同步到磁盘上,

0:每秒同步,并执行磁盘flush操作

1:每事务同步,并执行磁盘flush操作

2:每事务同步,并不执行磁盘flush操作

| innodb_locks_unsafe_for_binlog          | OFF                             |

| innodb_log_buffer_size                  | 1048576                         |缓存大小

| innodb_log_file_size                    | 5242880                         |事务日志文件大小

| innodb_log_files_in_group               | 2                               |缓存文件个数

| innodb_log_group_home_dir               | ./                              |事务日志组的位置

| innodb_mirrored_log_groups              | 1                               |

| log                                     | OFF                             |

| log_bin                                 | ON                              |

| log_bin_trust_function_creators         | OFF                             |

| log_bin_trust_routine_creators          | OFF                             |

| log_error                               | /data/log/mysql/mysqld.log      |

| log_output                              | FILE                            |查询日志输出的=位置

| log_queries_not_using_indexes           | OFF                             |

| log_slave_updates                       | OFF                             |

| log_slow_queries                        | OFF                             |

| log_warnings                            | 1                               |

| max_binlog_cache_size                   | 18446744073709547520            |

| max_binlog_size                         | 1073741824                      |

| max_relay_log_size                      | 0                               |

| relay_log                               |                                 |

| relay_log_index                         |                                 |

| relay_log_info_file                     | relay-log.info                  |

| relay_log_purge                         | ON                              |

| relay_log_space_limit                   | 0                               |

| slow_query_log                          | OFF                             |是否开启慢查询

| slow_query_log_file                     | /data/log/mysql/mysqld-slow.log |定义日志位置

| sql_log_bin                             | ON                              |

| sql_log_off                             | OFF                             |

| sql_log_update                          | ON                              |

| sync_binlog                             | 0                               |

+-----------------------------------------+---------------------------------+

38 rows in set (0.00 sec)

2、log-warning(0|1)

二、查询日志

默认情况下,查询日志是关闭的,为了是提高IO效率。

默认情况下,日志的输出位置是到general_log_file=指定的位置。如果是以table的形式输出的话将存放在mysql中的mysql数据库中的general_log表。

三、慢查询日志

建议开启,对性能影响很小。

参数:slow_query_log

slow_query_log_file

慢查询的时长通常是10s,long_query_time设置。

四、事务日志

事务日志的缓存空间一般有2个,当一个填满后就写入下一个,并报写满的缓存导入的磁盘上的文件中。

| general_log                             | OFF                             |是否开启查询日志功能

| general_log_file                        | /data/log/mysql/mysqld.log      |查询日志以文件形式输出的位置

| innodb_flush_log_at_trx_commit          | 1                    |是否缓存中有内容就同步到磁盘上,建议设置为2

| innodb_locks_unsafe_for_binlog          | OFF                             |

| innodb_log_buffer_size                  | 1048576                         |缓存大小

| innodb_log_file_size                    | 5242880                         |事务日志文件大小

| innodb_log_files_in_group               | 2                               |缓存文件个数

五、二进制日志

用途:记录修改数据或者有可能改变数据的mysql语句。在主从mysql的数据库进行同步时,使用的同步方法也就是读取二进制日志,所以对于同步来说,二进制日志很重要。

常用参数:

log_bin      设置是否启用二进制日志,默认存储位置/data/mysql/,文件名称通常是mysql-bin.0001的形式,可以自己直接设置存储位置,注意这里的文件名不要加后缀,系统自动添加比如:/path/to/filename

binlog_cache_size                      32768                              二进制日志的缓存大小

binlog_direct_non_transactional_updates  OFF

binlog_format                           MIXED                              二进制格式

bin_stmt_cache_size                    523121                            基于语句格式的缓存大小(三种格式之一)

expire_logs_days                            0                                    日志过期时间,0表示不过期。

sql_log_bin                                      on                                会话级别的开启、关闭二进制日志,备份时重要

sync_binlog                                      0                               是否立即同步缓存的日志到磁盘上。

max_binlog_cache_size                13123141312                最大缓存大小

max_binlog_size                            141231                          日志文件的大小

max_stmt_cache_size                    131314                           基于语句格式的缓存大小

日志格式:

sql语句(statement)

修改行的数据内容(row):数据量相对大,但是会比较精确。

混合格式(交替使用语句和行)mixed

查看二进制日志命令

show binary logs:显示二进制文件数量和大小

查看当前使用的二进制日志文件

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000016 |      106 (所处位置为多少字节数)|              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

查看二进制日志文件中记录的事件内容。

mysql> show binlog events in 'mysql-bin.000001' from 24238 limit 2;

+------------------+-------+------------+-----------+-------------+----------------------------------------------------+

| Log_name         | Pos   | Event_type | Server_id | End_log_pos | Info                                               |

+------------------+-------+------------+-----------+-------------+----------------------------------------------------+

| mysql-bin.000001 | 24238 | Query      |         1 |       24339 | use `mysql`; CREATE TEMPORARY TABLE tmp_db LIKE db |

| mysql-bin.000001 | 24339 | Query      |         1 |       24408 | BEGIN                                              |

+------------------+-------+------------+-----------+-------------+----------------------------------------------------+

2 rows in set (0.00 sec)

mysqlbinlog

linux自身也有有一个命令,可以查看二进制日志文件内容cd /data/mysql/     mysqlbinlog mysql-bin.00001

这个命令也可以用来恢复数据库内容,能够找回丢失的数据。

1、导出二进制日志文件

mysqlbinlog  --star-position=123  -stop-position=241 mysql-bin.00003 >123.sql

2、恢复数据

mysql -u root -p testdb<123.sql

删除二进制日志文件的安全方法:

1、建议在做完备份之后删除

2、建议确定后删除

删除:

mysql> purge binary logs to 'mysql-bin.000003';       //删除000003之前的日志文件

Query OK, 0 rows affected (0.00 sec)

日志文件滚动,意义就是使用新的二进制日志文件比如现在使用的是mysql-bin.0000011,flush logs 滚动后变成mysql-bin.0000012了。

六、中继日志

主要用于同步场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值