标签: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学习笔记
原文地址:http://blog.51cto.com/5001660/2084057