码迷,mamicode.com
首页 > 数据库 > 详细

MySQL 马哥视频教程学习笔记

时间:2018-03-08 10:39:49      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:MySQL学习笔记

1、        关系型数据库

关系:由行和列组成的二维表

表:至少要有列,可以没有行。

列:是实体的属性。

数据模型:层次模型、网状模型、关系模型、非关系模型。

DBMS:DataBase Mangenent System   数据库管理系统。

2、        数据库必须要有缓存  存放索引。

存储引擎;并发性好很好,

读,写:

       读锁:共享锁

       写锁:独占锁

   减少锁粒度:

              表锁:对整个表进行锁

              页锁:对页和块进行锁

              行锁:对行进行锁

数据库锁:对表进行加锁。

锁管理器:

 

数据库:mysql

一个线程相应一个用户请求。

复用:线程池,thread pool

 

事务:ACID,一组DML

      原子性:这一组DML要么都执行,要么都不执行。

      一致性:数据库从一种状态转变成另一种状态,状态的前后是一致的数据。一致性指的数据,数据的总量不变。

      隔离性:多个事务彼此之间,如果操作同一个数据的时候,彼此之间不进行干扰。保证并发性的前提是锁,对于隔离来讲,是有隔离级别的。隔离有四种级别。隔离级别越高,严格性越高,并发性越低,隔离性越好,彼此之间的影响性越少;隔离性越低,并发性越高,隔离性越差,彼此之间的影响性越大。(数据库的四个隔离级别:读未提交(READ UNCOMMITTED);读提交(READ COMMITTED);可重读(REPEATABLE READ);串行化(SERIABLIZABLE))

      持久性:数据一旦提交以后,必须不能丢失。数据未提交,必须要能撤销。事务日志:(转换随机IO至顺序IO)。为了保证持久性:事务提交,立即写入磁盘

幂等性:

                                            技术分享图片

MySQL 日志:

      错误日志:

      查询日志:

      慢查询日志:

      事务日志:

      二进制日志:

      中继日志:

 

SQL:结构化查询语言(唯一一种不需要关心底层数据存储格式的语言。)

      ANSI,sql-86,sql-92,sql-99,sql-03 对象-关系型数据,xml

SQL-Server:T-SQL

Oracle:p1/sql

MySQL:sql

SQL:API

client :Protocol:server

mysql-- >mysqld

自定义程序-- >mysqld

      驱动-- >mysqld

      Php-mysql:mysql_connect()

连接器 ODBC

 

数据库提供的接口分类两种:

远程通信:

本地通信:

      Linux

      Unix sock:mysql.sock

      Windows

      PIPE

      MEMORY

 

SQL

      DML:CRUD(Insert、Update、Delete、Select)用来实现数据操作的语句。

      DDL:操作数据库对象,例如:表,索引、视图、存储过程、存储函数、触发器、游标、事件调度器。(CREATE创建、DROP删除、ALTER修改)数据库定义语音。

      DCL:权限管理语句,GRANT授权、REVOKE收回权限。

 

3、         Httpd-2.4:

3种MPM:

Prefork:一个进程相应一个请求

Worker:一个进程生产n个线程,一个线程相应一个请求

Event:一个线程相应多个请求,靠事件函数回调完成

4、        DBA职责:

概念和物理模式的设计

       安全性和授权

       数据可用性和故障恢复

       数据库调整

5、        数据的组织

数据类型:变长,定长

VARCHAR(200):root,5字节

            root ,redis

CHAR(200):root,200字节,redis

 

定长记录:

数据块:行,是固定的

变长记录:

数据块:行数是变化的

rid

无序记录:堆文件组织

有序文件:顺序文件组织,聚簇索引,如果索引是有序的,那么记录就是有序的。树状索引一般都是有序的,哈希索引没有序。

散列文件组织:hash索引,

按照索引数据结构,索引类型:

树状索引:

散列索引:哈希索引,使用哈希函数计算后进行存储

6、        变长记录需要解决的问题:

1、如何描述一个记录,以实现快速记录获取;

2、如何存储变长记录;以实现快速记录存储;

7、        索引类型

主索引:主键索引,

辅助索引:

8、        数据库存储的文件:

数据文件

索引文件

日志文件

对于聚簇索引来讲,数据文件和索引文件是在一块的,对于能够支持聚簇索引的存储引擎来讲,文件必须要表现为不同的组织结构。

9、        MySQL存储引擎:

MyISAM

每一个表都有三个文件:

         数据文件:表名.MYD

         索引文件:表名.MYI

         表定义:表名.FRM

InnoDB

         表:

                表空间:多张表可放置于同一个表空间,MySQL支持单表使用独立的表空间文件;

                表定义文件:每张表的表定义文件在数据库目录中;

 

 

数据字典:也叫系统目录(system catalog)

         用来保存数据库服务器上的元数据。

         关系的名字

         每个关系中各属性的名字

         属性的数据类型和长度

         每个表关系上的视图名字及视图的定义

         约束

                     授权用户的名字

                     用户的授权和账户信息

                    

                    统计类数据:

                     每个关系中属性的个数;

                     每个关系中行的个数;

                     每个关系的存储方法

10、     缓存置换

缓存置换策略:LRU:Least Recently Used 最近最少使用算法;MRU:most Recently Used 最多使用算法。

被盯住的块:(Pinned block)不允许写回磁盘阵列的块。

块的强制写出:为了数据的安全性和可靠性而设置的策略。

11、     InnoDB引擎调优:

mysql> SHOW{global(全局) | session(当前)} WARIABLES;当前用户有效生成的变量;

         动态调整

mysql>SHOW {global | session} STATUS;数据库服务器当前运行状态

 

12、     MySQL默认的远程TCP端口 3306

技术分享图片

13、     安装:使用rpm安装:/var/lib/mysql/mysql.sock

            使用二进制安装:/tmp/mysql.sock

       Mysql安装方式:

              二进制格式:

              rpm

          OS vendor

                     MySQL

              通用二进制包

       源码格式

              make -- >cmake

14、     堆、栈

heap:数据存储于内存中的存储引擎:

内存数据库:临时表

15、     Percona:InnoDB -- >XtraDB

Xtrabackup

 

 

1、配置文件

2、root密码:

3、删除匿名用户:

4、在需要时,为应用程序提供授权账号;

 

 

权限可以转移:WITH  GRANT  OPTION

 

修改用户密码:

1、# mysqladmin –uUSERNAME –hHOST  password ‘new_pass’;

2、mysql>SET PASSWORD FOR username@host=PASSW)RD(‘new_pass’);

3、 mysql.usr

       Mysql>UPDATE user SET password=PASSWORD(‘new_pass’)WHERE user=’root’;

16、     Mysql:shyong :使用模式

交互式模式

批处理模式

 

-h,--host=

-u,--user=

-p,--password=

-D,--database=

 

Mysql客户端命令:

       \q,\G, \g,\!,\.,\d

 

17、     Mysql命令

Mysql >USE mysql;      切换数据库mysql

Mysql>SHOW TABLES;   查看表

Mysql>DESC user;    显示表有多少字段

 

 

Constraint:约束

       Primayr key

       Foreign key

       Unique key

       chkeck

 

18、     %: 任意长度任意字符

_:任意单个字符

 

19、     忘记root用户密码;

修改 /etc/rc.d/init.d/mysqld

启动项: 添加 –skip-grant  --skip-networking

重启数据库 

然后更改密码

然后再删掉添加的启动项配置。

20、      /usr/local/mysql/bin

Mysql服务器端程序:mysqld,mysqld_safe,mysql_multi

Mysql客户端程序:需要连接至服务器端(TCP/IP,IPC):mysql,mysqladmin,mysqldump

非客户端程序:

 

集中式配置文件:

[mysqld]

[mysql_safe]

[mysql]

[mysqldump]

[client]

Mysqld_safe:

Mysqld读取配置文件次序:

  Mysql –help –verbose

/etc/mysql/my.cnf --> /etc/my.cnf --> --default-extra-file*/path/to/some_conf_file -- >~/.my.cnf

 

Mysql--> SET {GLOBAL|SESSION} variable_name=’value’;

Mysql-->SHOW {GLOBAL|SESSION}VARIABLES [LIKE|WHERE];

Mysql -->SELECT @@{GLOBAL|SESSION}.variable_name;

 

21、     DBA:

开发DBA:数据库设计、SQL语句、存储过程、存储函数、触发器

管理DBA:安装、升级、备份、恢复、用户管理、权限管理、监控、性能分析、基准测试、

22、     SQL语言的组成部分

DDL

DML

完整性定义语言:DDL的一部分功能

视图定义;

事务控制

嵌入式SQL和动态SQL:

授权SQL:

23、     数据类型:

字符型;

       CHAR(#)

       VARCHR(#)

       BINARY(#)

       VARBINARY(#)

                           

                            TEXT:TINYTEXT,TEXT,MEDIUMTEXT, LONGTEXT

                            BLOB:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB

数值型;

       精确数值型:TINYINT,SMALLINT,MEDINUMINT,INT,BIGINT

       近似数值型:FLOAT,DOUBLE,REAL,BIT

日期时间型;DATE,TIME,DATETIME,YEAR(2),TIMESTAMP,

布尔型:TINYINT(1)

内置类型:

SET(a,b):a,b ,ab,ba

,ENUM(a,b):a,b

 

Mysql>HELP CREATE TABLE;

       显示创建表的帮助信息,可以从中获取所支持所有数据类型:

 

 

24、     DDL:数据库和表

视图、索引

              DML:insert,update、delete

              INSERT TO  tb_name[(col1,col2,….)] {VALUE|VALUES}();

                     数值数据:不需要引导

                     字符数据:引导

                     空值:‘’

       INSERT INTO tb_name SET coll-value,……;

       INSERT INTO tb_name (col1,….) SELECT clause;

       把执行过程分为两段:CREATE LIKE,INSERT INTO SELECT 

       REPLACE INTO:替换

25、     修改:UPDATE

WHERE clause

LIMIT n

26、     删除:

DELETE FROM tb_name     (表的ID号不重置)

TRUNCATE TABLE tb_name   ( 表的ID号进行重置,清空并重置表)

SELECT LAST_INSERT_ID();     上次插入的ID号是多少

27、     查询:SELECT 

技术分享图片

技术分享图片

 

 

表:只要有一个可用索引,完成查询至少有两条路径;

全表扫描

技术分享图片

 

使用索引

SELECT * FROM tbname;

投影:SELECT col1,col2 FROM tbname;

选择:SELECT * FROM btname WHERE clause;

SELECT col1,col2 FROM tbname WHERE clause;

 

WHERE 子句:

  比较表达式:

BETWEEN  value1 AND value2 

IN (element1,element2,…..)

IS NULL;

IS NOT NULL;

LIKE:;  通配符匹配

         %

         _

RLIKE,REGEXP

         _ ,* ,\>

         组合条件

                and ,&&

                or  ,||

                not  ,!

                xor 

聚合函数:  max(),min(),avg(),count()

 

28、     SELETC:

单表查询

联结查询(jion)

联合查询(union)

29、     存储和缓存:

memcached:缓存

       程序局部性原理:

              空间局部性:

              时间局部性:

程序?à缓存 ?à存储 

 

存储:持久性

30、     事务:ACID

A :原子性

C:一致性

I:隔离性

D:持久性

       随机I/O -->顺I/O

 

Mysqld  --help  --verbose

       /etc/mysql/my.cnf --> /etc/my.cnf --> --default-extra-file=# --> ~/.my.cnf

 

命令行选项

配置文件中的可用参数

 

--skip-grant  --skip-networking

 

Mysql>SHOW {GLOBAL|SESSION}VARIABLES [LIKE clause] |[WHERE clause]

Mysql>SHOW {GLOBAL|SESSION} STATUS

 

静态修改:

       datadir

动态修改:

       mysql>SET {GLOBAL|SESSION} variable_name’value’;

动态修改:

       GLOBAL:对当前会话无效,只对新建立的会话有效;

       SESSION:仅对当前会话有效;

Mysql>SELECT @@{global|session}.variable_name

Mysql,sql_mode

       Strict_all_tables,strict_trict_tables,tranditional,

Innodb

Cache

Myisam

数据类型:

       是否支持索引

       排序方式及比较方式

              CHAR,BINARY

       TINYINT,INT

修饰符:NULL ,NOT NULL ,DEFAULT,UNSIGNED,AUTO_INCREMENT

约束:PRIMARY KEY, UNIQUE KEY ,FOREIGN KEY ,CHECK

 

SQL语句:

       DDL:数据定义语言

              数据库、表、索引、视图、存储过程、存储函数、约束、触发器、事件调度器、游标。

       DML:数据操作语言

       CRUD:Insert, Select,Update,Delete

DCL :数据控制语言

       GRANT ,REVOKE

事务:Start Transaction ,Commit,Rollback,Save Point

 

DDL

       数据库:

创建:CREATE DATABASE SCHEMA 【IF NOT EXISTS】 dbname;

                            CHARACTER SET=

                            COLLATE=

              删除:DROP DATABASE|SCHEMA[IF EXISTS] dbname;

              获取帮助:HELP SQL KEYWORD

              修改:ALTER DATABASE db_name

 

表:

       创建:CREATE TABLE tb_name (coll defination,col2 defination)【table_options】;

       Table options:

       ENGINE=engine

       DELAY_KEY_WHITE={0|1}

       TABLESPAACE tablespace_name

 

CREATE TABLE tbname [(defination)] SELECT clause;

CREATE TABLE tbname LIKE old_table_name;

 

存储引擎:也称为表类型

       MyISAM表:

              tbname.MYD

              tbname.MYI

              tbname.frm

       InnoDB表:

              表空间:ibdata1

              每表一个表空间

              tbname.frm

              tbname.idb:数据和索引

 

开启方法:

       SET GLOBAL innodb_file_per_table=1;

建议:同一个库中的表最好使用相同的存储引擎;

删除:DROP TABLE [IF EXISTS] tbname;

改名:RENAME TABLE tb_name TO new_name;

修改;ALTER TABLE tbname

       ADD col definition;

       DROP colname;

MODIFY col definition [{first|after col_name}];

CHANGE col new_col_name definition [{first|after col_name}];

RENAME TO new_name;

 

Linux下mysql数据库的备份

[root@localhost ~]# mysqldump -u root -p mysql > ~/mysql.sql   #把数据库mysql备份到家目录下命名为mysql.sql

Linux下mysql数据库的还原

[root@localhost ~]# mysql -u root -p web < ~/web.sql    #把web.sql导入数据库web。

表联结:

       交叉联结

       内联结:自然联结

       外联结:

              左外联结

                     Left_table  LEFT JOIN  right_table  ON condition(条件)

              右外联结

                     RIGHT JOIN…ON….

              全外联结

       自联结:sometables AS alias1 INNER JOIN sometable AS aliase2 ON alias1.FILED = alias2.FIELD;

       联合查询:

              SELECT  clause UNION SELECT clause

 

练习:

1、显示前5位同学的姓名、课程及成绩

2、显示其成绩高于80的同学的名称及课程

3、求前8位同学每位同学自己两门课的平均成绩,并按降序排列;

4、显示每门课程课程名称及学习的同学的个数。

 

子查询:

       用于WHERE子句

              SELECT clause FROM tb1 WHERE

                     1、用于比较表达式中的子查询

                     2、用于EXISTS中的子查询        

                     3、用于IN中的子查询。

 

       用于FROM中的子查询

··             SELECT col,…FROM (SELETC clause) WHERE condition

据说:MySQL 对子查询的优化很有限

 

Mysql查询:

       简单查询:

              SELECT [DISTINCT] col,col,…..FROM tb1 WHERE condition GROUP BY col HAVING condition  ORDER BY col LIMIT [m,]n;

       组合查询:

              联合查询:UNION

              联结查询:

                     交叉查询

                     内联结

                     外联结

                            左外联结

                            右外联结                  

                     自联结

              子查询:

                     WHERE:

                            用于比较条件:子查询只能返回单个值

                            用于IN

                            用于EXISTS

                     FROM:

并发性:

       锁:

              表锁

              页锁

              行锁

 

              共享锁:读锁

              独占锁:写锁

 

       MyISAM引擎:表级锁

       InnoDB引擎:行级锁

 

根据锁的施加方式:

       显示锁:

              LOCK TABLES tbname,…..{READ|WRITE}

              UNLOCK TABLES;

       隐式锁:

      

SELECT [FROM UPDATE | LOCK IN SHARE MODE]

LOCK  TABLES

 

 

 

 

事务:ACID

mysql> SHOW GLOBAL VARIABLES LIKE 'autocommit';

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

| Variable_name | Value |

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

| autocommit    | ON    |

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

1 row in set (0.00 sec)

表示:自动提交

关闭自动提交功能:为了提高性能

       START TRANSACTION

       SAVEPOINT point_name

       COMMIT  提交

       ROLLBACK [TO somepoint] 返回

       COMMIT

 

ACID: I 隔离性

RDBMS:事务有隔离级别;

       READ-UNCOMMITTED

       READ-COMMITTED

       REPEATABLE-READ

       SERIALIZABLE

 

MVCC:Multi Version Concurrency Control  多版本并发控制

 

调整事务隔离级别:tx_isolation

       READ-UNCOMMITTED

       READ-COMMITTED

       REPEATABLE-READ

       SERIALIZABLE

 

Mysql >START TRANSACTION;COMMIT,;ROLLBACK;SAVEPOINT;ROLLBACK TO point;

       Atuocommit=0

Mysql

mariaDB à maria,aria (My ISAM)

 

存储引擎:表类型

       Mysql>SHOW TABLES STATUS

表状态信息:

       Row_format:Dyamic,Fixed,compriessed,compact 

       Rows:表中的行数;

       Avg_row_lenfth  行的平均字节数;

       Data_length:表的数据量,单位为字节。

       Max_data_dength:表的容量上限

       Index_length:索引数据量,单位字节;

       Data_free 已经分配出去,但未存储 数据的存储空间。

       Auto_increment:具有自动增长属性的字段上,下一个自动增长的值;

       Create_time:标的创建时间

       Update_time:数据最近一次更改的时间

       Check_time:使用CHECK命令最近一次检查表的时间:myisamchk;

      


MySQL 马哥视频教程学习笔记

标签:MySQL学习笔记

原文地址:http://blog.51cto.com/5001660/2084057

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!