Mysql的初始化

1、安装完mysql后对mysql的初始化会有提示

给用户设置密码,删除匿名用户等

给mysql设置密码,刚装完的mysql可以直接登录上去

这里的话你可以 yum mysql-serve -y 就行啦

然后service mysql restart

Mysql 连接上去

然后show databases;

Use mysql;

刚装完mysql

information_schema 保存数据库的元数据信息

Pramation_schema 保存数据性能方面的信息

Mysql 保存数据的元数据

Test测试数据库用的

前三个我们现在可以先不管他

测试mysql的话

可以测试网test之后把它给删除,然后是给数据库设置密码

获取帮助可以在

Rpm -ql  mysql 或者  mysql  --help

源码包安装的话 mysqld --verbose --help

2、读取配置文件的顺序

/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf  这是mysql自己会去找的配置文件

--defaults-file默认读取配置文件 如果设置了这个文件的话他就不会读取下面的那个文件啦

--defaults-extra-file 额外读取的文件

修改~./.my.cnf ,设置此处即使设置了密码也可以不输入密码登录。

wps_clip_image-4468

然后可以直接mysql登录数据库 注意上面的用户密码要和 mysql库中user中的信息一致

可以

Select User,Host,Password from user;查看

3、其实创建用户授权用户,可以一步就做好啦,

Grant all on test.* on to ‘jack’@’172.16.%.%’ identifed by ‘1234’;
Drop user ’jack‘@’hostname_ip‘;
用户登录
Mysql -u root -h 127.0.0.1 -p
4、创建表、查看表
Create table tb1 ( ID int (10) unsigned not null auto_increment primary key, Name int(15) not null);
Show tables;
Desc tb1;
Select * from tb1;
查询投影列选择行
导入数据库到linux的mysql中
比如 mysql  > 数据库
如果设置了密码的话
Mysql -u root -h127.0.0.1 -p > 数据库
密码
客户端密码
5、Help可以查看帮助信息
\d修改分隔符
\g 如果有人修改之后你可以用\g来排版竖向排版,\G横向排版
\!在mysql上运行bash命令例如 \!  Ls  /etc
\e 不登陆mysql,在linux界面运行mysql命令
\u 将指定的库设为默认库
忘记mysql的密码怎么办?如何破解mysql的密码。

vim /etc/my.cnf

wps_clip_image-3454

6、mysqladmin工具:

mysqladmin [options] command [arg] [command [arg]] ...
子命令:
create DB_NAME:
mysqldadmin [options] create DB_NAME;
drop DB_NAME:
status:
显示mysqld的简单要状态信息,专用选项
--sleep #: 间隔秒数
--count #: 显示的次数
extend-status: 显示mysqld的所有服务器状态变量
flush-privileges: 刷新授权表,相当于reload命令
flush-hosts: 清除dns缓存及被拒绝的客户端列表缓存
flush-logs: 滚动日志, 二进制日志和中继日志
flush-status: 重置各状态变量
flush-tables: 关闭当前打开的所有的表文件句柄;
flush-treads: 重置线程缓存;
password: 设置密码
ping: 测试服务器是否在线
processlist: 显示当前服务器上的所有线程
refresh: 相当于执行flush-hosts和flush-logs
shutdown: 关闭服务器进程 ;
start-slave, stop-slave: 启动、关闭从服务器线程;
variables: 显示服务器变量

7、数据类型

字符型
Char 固定 设置时最好求所有字段和的平均值
Varchar 可变长,记住一定要有结束符,不然建表的时候会报错,但是在建表时尽量用int,
char这样的类型,为的是,mysql库缓存时,如果某几个字段太长会影响性能
Binary
Varbinary
整型
Int 精确数值 tinyint,smallint,mediumit,bigint
非精确
Double 单精度类型
Float 双精度类型
日期时间型
Date time
Datetime
Year(4)
Year(2)
键
Primary key 主键
Foreign key 外键
Unique key 唯一键
内置类型
Enum (‘f’,’m’)
Set  (‘a’,’b’,’c’)  只可以选择括号内的数值
修饰符
Not null
Null
Default
Unsigned 无符号,从一开始编号 0-255
Signed 有符号用char来说-128~127
Auto_increment 自动增长
另外其它格式的类型
Text 网页格式的
Blob
Decimal
8、文件系统上的文件解释
磁盘存储空间上的数据,这些数据是只有计算机才能识别的010101代码片,通过cpu进程调用,
磁头把它读到内存,计算机才能看到文件中的信息。
文件大多数是流式话的,不过内存中的数据有结构化的
数据模型
文件---数据管理软件把010101比较底层的代码数据抽象为人能看懂的文件
数据模型有
层次模型
网状模型
关系模型
对象模型
非关系模型

9、数据库接口

程序员 :API 编程接口

普通用户 :用户工具接口 sql

10、两个二八法则

http网页
八成静态,两成动态
系统调用查询
八成读、查询;两成写操作
索引:抽取表中字段名,特殊数据结构,可以快速找到数据记录
优点:能快速查找数据库中表记录的信息,1、大大减少服务器需要扫描表信息的数量
组合索引:基于组合语句构建的索引
多级索引:三级索引,对于数据过于庞大构建的
覆盖索引:从索引就能直接找到数据的最终结果的索引,例如主键索引
Hash 索引 包含哈希值和指针,不是按顺序存储,无法用于排序,不支持部分索引匹配查找
聚簇索引:索引和数据一起存放,主键索引就是聚簇索引
非聚簇索引:索引和数据分开存放,而数据记录未必安顺序存放,但索引数据一般安顺序存放
2、可以帮助服务器尽量避免排序及临时表,
3、可以将随机i/o转换为顺序i/o
对于查的少,写的多的数据业务有帮助
静态表:固定长度字符的表;优点,字符固定,容易构建索引,方便存储,缺点有时候浪费空间
动态表:可变长字符的表,优点存储空间利用率好,缺点不便构建索引,不便存储
缺点:对于频繁写的数据业务会是服务器性能下降,因为数据不断变化,索引也要不断更新
B   B-    B+  红黑树  二叉树  平衡树
B-tree 全值匹配,比较操作值,左前缀匹配
左前缀:就是索引的匹配规则,拿sql语句跟索引匹配,安从左到右,从上到下的匹配规则逐一匹配查询
12、关于mysql的一些关键语句
修改字段名
Modify 小的修改 修改字段名
mysql> alter table tb8 modify Name char(10) not null;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0
Change 大的修改 修改表名
添加删除字段
Alter table [表名] add 字段名
可以指定添加字段名添加在哪一个地方 after id 指定添加在id 后面 ,first 第一个字段
mysql> alter table tb8 add xuehao char(10) null;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
指定添加在那个地方
mysql> alter table tb8 add zhuzhi char(15) not null after Age;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
Alter table [表名] drop 字段名
删除字段
mysql> alter table tb8 drop xuehao;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
Alter table [表名] modify 修改的字段名
Alter table [表名] change 可以修改表名
修改表名
mysql> alter table tb8 rename student;
更新数据
mysql> update tb8 set Cluse='suanshu' where ID=3;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

wps_clip_image-31039

查看表的索引

Show index from [表名]

新建索引索引

Show index from [表名]

Alter table [表名] add index (索引名)

mysql> alter table tb8 add index (Name);

Query OK, 0 rows affected (0.05 sec)

Records: 0  Duplicates: 0  Warnings: 0

删除索引

Alter table [表名] drop index (索引名)

mysql> alter table tb8 drop index Name;

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0


              MYISAM

           INNODB




数据物理存储区别



                  .frm 表结构的定义
                  .MYD数据文件

                  .MYI索引文件 

默认在存储在表空间中,所有表

都放置在此处,可以修改自定义

安装mysql时放置的/date

Vim/etc/my.cnf 加 

innodb_file_per_tab=on

Tb.name.frm 表结构

Tb.name.ibd 数据 索引

事物CAID

         不支持

             支持

selectupdata,

Insertdelect操作 


Select 性能较好适合查询多的业务

   updata,  Insertdelect

        查询和写操作


AUTO_INCREMENT的操作

MyISAINSERTUPDATE操作自动更新这一列。使AUTO_INCREMENT列更快(至少10%

自动增长计数器仅被存储在主内存中,而不是存在磁盘上



     表的具体行数 

select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含   where条件时,两种表的操作是一样的

InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

  

      锁

锁粒度较大,锁全表,写锁时,不提交,别人没有办法创建

一般定义锁隔离的第三级别,可重复读

没指定范围时和myisam一样,前表扫描

DELETE FROM table


InnoDB不会重新建立表,而是一行一行的删除

AUTO_INCREMENT

索引

           联合索引

InnoDB中必须包含只有该字段的索引

     索引格式

         支持压缩格式

          不支持压缩格式


LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,

导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,

而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。

从平台角度来说,经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,

导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应

表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是

Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为我平台上最小

的一个数据库实例的数据量基本都是几十G大小。

应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,

而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,

非主键的都会锁全表的。

innodb的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有)。如果没有会

把第一个唯一索引当做主键。如果没有唯一索引,就自动生成一个隐藏列,类型为长整形。  
MyISAM的辅助索引和主键索引 data部分都是指向数据的指针,innodb 的data部分是主键的值而不是地址。

这就让innodb 如果不是主键索引就要先找辅助索引再找主键索引。 所以不建议用过长的索引做主键,会使

其他辅助索引都变得很大。

innodb有外键约束,这个功能是mysql服务器本身不具备的

读锁:sql语句查询数据库时对对表施加的锁机制,也叫共享锁,读锁,是可以多人共享访问读(查询)数据库的

写锁:存储引擎在对表中写东西时,对表施加锁的机制,此种锁会使其他用户不能再对此表同时进行写的操作,

读的话可以读,看你的存储引擎表属于那种事物隔离级别,会产生什么情况,MYISAM不支持事物隔离

表锁:对表施加的锁

行锁:对文件施加的锁

死锁;是行锁的一种,就是同一张表,同时施加行锁到相关联的行,使得表不可用,有回退机制

对文件施加锁

Lock table [表] read | write

CAID

一个执行单元,多条sql语句,要么都执行,要么都不执行

C atomicity 原子性 执行单元

A consistency 一致性 转账 a转b 一个减,一个加,他们两个的总金额不变

I icocation 隔离性 a转账给b,再转账给c不能同时进行

D durability 持久性 数据库崩溃了能恢复回来原来的数据

事物隔离级别

1、READ-UNCOMMITED :(读未提交) 最低级别,会产生脏读,用户修改了表的内容,
没有提交,有另外用户过来查询,修改表的又回滚了数据,使得读到的信息和真是信息不
符产生脏读,用户读到的不是最终信息
2、READ-COMMITTED :(读提交)“不可重复读” 修改-未提交别人查-不给查查到的
事缓存-提交-查到的是真实的
3、REPEATABLE-READ:(可重读)“幻读” 修改-未提交别人看-原来的缓存-提交-查到
的不是真实的 --产生幻读  innodb 默认是这种隔离级别,但是它默认人修改完,马上就自动提交啦,降低并发性能,
4、SERIALIIABILE:(可串行化)只有提交,才能读;并发能力有限,数据较安全,加锁读
修改--对表加锁--不提交,别的用户看不了,MYISAM就是基于这种机制,锁粒度过大
启动事务:START TRANSACTION
提交事务:COMMIT
回滚事务:ROLLBACK
mysql> help create index;
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
UNIQUE :唯一索引
FULLTEXT:全文索引
SPATIAL:空间索引
mysql> help dorp create index;
DROP [ONLINE|OFFINE] INDEX index_name ON tbl_name
查看数据库存储引擎
mysql> show variabLles like '%storage_engine%';
+----------------+--------+
| Variable_name  | Value  |
+----------------+--------+
| storage_engine | MyISAM |
+----------------+--------+
1 row in set (0.00 sec)

查看表引擎

mysql> show table status like 'tb8'; 记住查看表的状态一定要加‘’

Mysql>show table status from [数据库]; 查看所有数据库表的存储信息

修改表引擎方法

alter table table_name engine=innodb;

mysql> alter table tb8 engin=innodb;

关闭Innodb引擎方法,并修改为MYISAM

关闭mysql服务: net stop mysql

找到mysql安装目录下的my.ini文件:

找到default-storage-engine=INNODB 改为default-storage-engine=MYISAM

找到#skip-innodb 改为skip-innodb

启动mysql服务:net start mysql

Mariadb 默认的存储引擎是innodb

查看表

例如:主键,建可以是索引,并非所有的索引都是键

快速访问数据库表中的特定信息

工作示意流程

接口

解析器--优化器---执行器---存储引擎---事物管理器---锁管理器----错误容灾恢复---表---日至
连接管理器----查询缓存----解析器---优化器---存储引擎---磁盘块---文件

存储引擎是可以更换的,但是一个库的所有表最好用同一个存储引擎,方便不同平台的移植及兼容性

Cursors  游标  ①从表中检索出结果集,从中每次指向一条记录进行交互的机制。

游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一

个名字,用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理

指针:在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中

寄存器(Register)【用来指向该内存地址所对应的变量或数组】

存储引擎:真正对数据进行操作的工具,增删改查

11、mysql的版本

Community 社区版

Enterprise 企业授权版

下载mysql  perconn免费版

12、数据库工作机制

连接池:认证身份、线程重用、连接限制、内存检查、缓存
Sql接口:ddl、dml、关系型数据库的基本抽象
Parser(分析器):查询转换,对象权限检查
优化器:访问路径,性能相关的统计数据
Caches和buffers 与存储引擎自身相关的i/o 性能提升工具
存储引擎 myisam 、inoodb变种xtradb
Show engines
Show global variables like ’%iso%‘(engines);
查看数据库的存储引擎
Show global variables like ‘%engines%’;

索引的使用策略: