(DBA之路十)《深入浅出MySQL数据库开发优化与管理维护》的读书笔记

1>mysql的配置文件在/etc下的my.cnf


2)mysql服务是一系列后台进程,mysql数据库是一系列数据目录和数据文件

mysql数据库必须在mysql服务启动之后才可以进行访问


3)查看mysql服务的状态:

    netstat -nlp


4)启动/关闭服务

cd /usr/bin

./mysqld_safe &


mysqladmin -uroot shutdown



5)PRM包安装的启动/关闭服务

service mysql start

service mysql restart

service mysql stop


在命令行启动mysql时,如果不加--console,启动关闭信息不会在界面中显示,而是记录

在安装目录下的data目录里面,文件名字一般是homename.err,可以通过

这个文件来查看mysql的控制台信息。


6)sql全称structure query language 结构化查询语言

分类:

DDL:数据定义语言:create,drop,alter(涉及表的结构)

DML:数据操纵语言:insert,delete,update,select

DCL:数据控制语言:grant,revoke



7)自带的数据库:

information_schema:主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息、分区信息等

cluster:存储了系统的集群信息

mysql:存储了系统的用户权限信息

test:系统自动创建的测试数据库,任何用户都可以使用



8)查看全面的表定义信息:

show create table emp \G;


9)查询语句select默认的关键字是ASC(升序)



10)having和where的区别

having是对聚合后的结果进行条件的过滤

where是在聚合前就对记录进行过滤

使用where的效率比having高


11)内连接和外连接

内连接仅选出两张表中互匹配的记录

外连接选出其他不匹配的记录

外连接分为左连接和右连接

左连接:包含所有的左边表中的记录甚至是右边表中没有和它匹配的记录

右连接:包含所有的右边表中的记录甚至是左边表中和它没有匹配的记录



12)子查询

关键字有:in、not in 、= 、!= 、exists、not exists等

当子查询的记录数唯一的时候用=代替in

(表连接在很多情况下用于优化子查询)


13)记录联合:用于将两个表的数据按照一定的查询条件查询出来后合并到一起显示出来

关键字:union 和 union all

union和union all的主要区别在于




14)使用mysql自带的帮助

? contents用于显示所有可供查询的分类

?加? contents可以进一步查看信息


15)快速查询某项语法:? 空格一个再加具体命令



16)查询二进制数(bit保存的)

需要用bin(),hex()函数


17)char 和varchar的区别

char列的长度固定为创建表时声明的长度,长度范围在0-255

varchar列中的值为可变长字符串,长度可以在0-65535


检索时,char列删除了尾部的空格 ,varchar保留这些空格


其实呢总结来说呢,当存储的数据长度小于你设定varchar,char时的设定值时,使用length()函数来查看varchar,char的实际使用长度时会发现,显示的长度小于设定值,显示为你输出数据的指定长度,

varchar怎么检索数据呢,它把你输入的数据全部显示,不会删除数据尾部的空格

而char呢,它检索时会自动删除输入数据的尾部空格。

当你输入的数据经过varchar 和char的存入处理后长度大于你最初的设定值时会报警告,并且会截断你存储的数据,使得存储数据的实际长度恰好等于你最初的设定长度。

总之一条,对于char和varchar而言存储数据的长度是不会大于最初的设定长度的,但是varchar向内存申请的内存大小是会根据输入数据大小来调节的会大于实际使用字节数,而char不变,申请数一直等于设定数



18)enum枚举类型

对于1-255个成员的枚举需要一个字节存储

对于255-65535个成员需要两个字节存储

enum类型忽略大小写,对于插入不在enum指定范围内的值时,插入enum集合中的第一个值

enum类型只运行从值集合中选取单个值,而不能一次选取多个值


19)set

set可以一次选取多个成员而enum只能选一个

如果插入的值重复出现,只取一次


20)安全的等于运算符<=>即使是null也能用


21)任何字符串和null进行concat的结果都是null


22)INSERT(str,x,y,instr)函数:将字符串str从第x位置开始,y个字符长的子串

替换为字符串instr



23)truncate和round的使用方法一样,区别在于round进行四舍五入而truncate仅仅是截断。



24)myisam在磁盘上存储成三个文件:

.frm(存储表定义)

MYD(MYData,存储数据)

MYI(MYIndex,存储索引)

myisam静态存储时后面的空格会被删掉,前面的空格保存

静态表的记录固定长度



25)innodb存储表和索引的方式

a.使用共享表空间存储,这种方式创建的表的表结构保存在.frm文件中,

索引和数据保存在innodb_data_home_dir和innodb_data_file_path

定义的表空间中,可以是多个文件。


b.使用多表空间存储,这种方式创建的表的表结构仍然保存在.frm文件中,但是每个表的

数据和索引单独保存在.ibd中。如果是分区表,则每个分区对应单独的.ibd文件,

文件名是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的位置,

以此来将表的IO均匀分布在多个磁盘上。


26)myisam建议用固定长度的数据列代替可变长度的数据列

    memory(myisam的表集合,删除操作不删除myisam表中数据)把所有的都作为char类型处理

    innodb:建议用varchar。


27)blob能够保存二进制数据,text只能保存字符数据

如果经常做删除和修改记录的操作要定时执行OPTIMIZE TABLE功能对表进行碎片整理


28)如果数据库只需要支持一般中文,数据量很大,性能要求很高

那应该选择GBK(每个汉字只占2个字节,而UTF-8需要3个字节)

能够减少磁盘I/O、数据库cache以及网络传输的时间从而提高性能。

29)如果应用主要处理英文字符,仅少量汉字数据则选择UTF-8更好



30)如果数据库需要大量的比较、排序了么定长字符集会更好,因为速度更快


31)存储过程和函数的优势是可以将数据的处理放在数据

服务器上进行,避免将大量的结果集传输给客户端,检索数据的传输,但是最好不要再存储过程和函数

中进行大量的辅助运算,应该尽量将这些运算分摊到应用服务器上执行。



31)数据库中使用正则表达式:XXX REGEXP "模式"


32)group by with rollup得到更加完整的分组聚合的信息



33)innodb使用间隙锁的目的:防止幻读,满足其回复和复制的需求



第20章需要多看几遍


34)mysql错误处理选项

-f:强制执行sql,即即使有错误,跳过错误执行下一条语句。

-v:显示更多信息

--show-warning:显示警告信息


35)myisampack(myisam表压缩工具),压缩后表只可读。



36)mysqlchk可以用来检查和修复myisam表,

但是innodb不支持用mysqlcheck进行修复。



37)mysqlhotcopy(myisam表热备份工具)

它只能用于备份myisam并且只能运行在linux/unix环境。



38)perror(错误代码查看工具)

用法:

perror 错误代码编号



39)replace(文本替换工具)

例子:


覆盖的方式替换

将文件a中的a1和b1分别替换成aa1,bb1;

replace a1 aa1 b1 bb1 --a


非覆盖的方式替换

将文件a中的a和b分别替换为c和d

replace a c b d <a


40)备份

全备份:

优点是保持最新备份

增量备份:只需要备份每天的增量日志

但是恢复时需要全备份加上次备份到故障前的所有日志。



主要要掌握:mysqlhotcopy和手工热备份的方法。

LOAD DATA INFILE是加载数据最快的方法。



41)如何处理myisam存储引擎的表损坏

a.用myisamchk -r tablename来进行修复

b.先用check table  表名 来检查表是否损坏

 再用repair table 表名  来修复表



后面还有一点点。。。。to be continued ,其实我的排他锁和共享锁那里还是糊涂啊,还有主从。。。。。

a long way to go ......





 


你可能感兴趣的:(读书笔记,service,配置文件,数据库开发,structure)