1.DBMS(DataBase Management System,数据管理系统) :oracle、mysql、sql server、DB2
Mysql:开源、关系型、ISAM存储引擎核心算法前身
Oracle:关系型数据库管理系统,技术领先、大型企业
DB2:支持多媒体、WEB关系型数据库
SQLserver:微软产品
PostgreSQL:唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性自由软件
2.数据库软件应该为数据库管理系统,数据库是通过数据库管库系统创建和操作的容器
数据管理:对各种数据进行分类、组织、编码、存储、检索和维护
人工管理阶段—文件系统管理阶段—数据库系统阶段
3.数据库发展阶段:
层次数据库和网状数据库技术阶段:层次代表IMS、网状代表IDS
关系数据库技术阶段:oracle、mysql、sql server、DB2、SyByse、InFormix
后关系数据库技术阶段:面向对象数据库ORDBMS、结构化数据库技术NOSQL
4. SQL(Structure Query Language)结构化查询语言:
数据定义语言(Data Definition Language,DDL)、
数据操作语言(Data Manipulation Language,DML)、
数据控制语言(Data Control Language,DCL)
5. Mysql数据库:
1)系统数据库:记录一些必需的信息,用户不能更改
Information_scherma:数据对象信息,如用户表信息、列信息、权限信息、字符集信息和分区信息等
Performance_schema:数据库服务器性能参数
mysql:用户权限信息
test:测试数据库
2)用户数据库:
6.数据库对象:指存储、管理和使用数据的不同结构形式
表、视图、存储过程、函数、触发器、事件等
7. SQL语句中的DDL和DML(不包含SELECT)语句执行成功后都会显示Query OK
SQL语句中可以用”;” ”\g””\G” 表示语句结束。\G更美观
8.存储引擎:以插件形式被Mysql引入
1)指定表的类型(如何存储和索引数据、是否支持事务)
2)决定表在计算机内的存储方式
9.Mysql5.5支持九种存储引擎:FEDERATED、MRG_MYISAM、MYSIAM、BLACKHOLE、CSV、MEMORY、ARCHIVE、InnoDB、PERFORMANCE_SCHEMA
MYSIAM:不支持事务、外键,速度快
InnoDB: 事务(即提交、回滚和崩溃恢复功能的事务安装),磁盘占用大
频繁更新删除操作,对事务完整性要求高,需要实现并发控制
MEMORY:内存存储数据,访问速度快,无安全保障
10. 存储引擎Engine参数:
Support:是否支持该存储引擎,yes/no,default表示默认
Comment:关于存储引擎的评论
Transactions:是否支持事务
XA:存储引擎支持的分布式是否符合XA规范
Savepoints:是否支持事务处理中的保存点
11. 修改默认存储引擎:C:\Program Files\MySQL\MySQL Server5.1 \my.ini配置文件中[mysqld]
[client]
port=3306
[mysql]
default-character-set=utf8
[mysqld]
port=3306
basedir="C:/ProgramFiles/MySQL/MySQL Server 5.1/"
datadir="C:/ProgramData/MySQL/MySQLServer 5.1/Data/"
character-set-server=utf8
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
12. Mysql数据类型
整数类型:标准(SMAILLINT、INT),扩展(TINYINT、MEDIUMINT、BIGINT)
浮点型:FLOAT、DOUBLE
定点型:DECIMAL更高精度,金融货币优选
位类型:BIT(字节数M,1~8,存储空间由精度决定)
日期和时间类型:DATE、DATETIME、TIMESTAMP、TIME、YEAR
字符串类型:CHAR系列、TSXT系列、BINARY系列、BLOB系列
13.表中的数据库对象包含列、索引(顺序、快速访问途径、监督)和触发器(事务命令集)。
14.表数据约束:对表中所存储的数据是否合法进行检查
完整性约束:数据准确性和一致性
非空约束(NOT NULL,NK)、
字段默认值约束(DEFAULT)、
唯一约束(UNIQUE,UK)、
主键约束(PRIMARY KEY,PK)、
字段值自动增加约束(AUTO_INCREMENT)
外键约束(FOREIGNKEY,FK)
15.索引:创建在数据库对象表上,包含表中按照一定顺序排序的一类或多列字段
提高查询速度,保证字段的唯一性,从而实现数据库表的完整性
16. 索引的存储类型:B型树索引(BTREE)、哈希索引(HASH)
InnoDB和MYISAM存储类型支持默认为BTREE,MEMORY存储引擎支持HASH
17. Mysql创建方式:创建表时创建索引、在已存在的表上创建索引、通过SQL语句ALTER TABLE创建索引
18.Mysql支持6种索引:
普通索引:不附加任何限制条件(唯一、非空等限制),可创建在任何数据类型字段
唯一索引:限制索引的值必须是唯一的
全文索引:主要关联在CHAR、VARCHAR和TEXT字段上
快速查询数据量较大的字符串类型的字段
Mysql3.23.23开始支持,只能在存储引擎为MyISAM的数据库表上创建全文索引
单列索引
多列索引
空间索引
19.视图:虚表,内容和真实表相似。但视图并不在数据库中以存储的数据值形式存在
行和列数据来自自定义的查询所引用基本表,并且在具体引用视图时动态生成
20.视图特点:数据可以来自不同的表,是表的抽象和在逻辑上建立的新关系
由基本表(实表)产生的虚表
建立和删除不影响基本表
对视图内容的更新(添删改)直接影响基本表
21.视图本质:封装复杂的查询语句,方便重复使用和安全
22.视图实现信息隐藏,多个地方重复实现该功能(只需查询视图,不要,每次都编写视图封装的详细查询语句)
23.触发器:用来实现由一些表事件触发的某个操作,由事件来触发、激活而实现执行
24.触发器TRIGGER类似于编程中的函数,需要声明、执行,
25.创建多条执行的触发器多条命令trigger_STMT要用;隔开,为避免和结束时所用分号重复,可使用关键字DELIMITER语句,例如:
DELIMITER $$
多条语句触发器
$$
DELIMITER;
26.排序查询数据:字段值为NULL,则该值为最小值
在降序排序显示在最后一行,在升序排序中显示在第一行
27.AVG()函数统计平均值:忽略null,但是不忽略0
28.Mysql所支持的统计函数,所操作的表中没有任何数据记录,则COUNT()函数返回数据0,而其它函数返回数据为null。
29.分组数据查询:分组所依据的字段上的值一定要具有重复值
30.关键字GROUP BY 单独使用,默认查询出每个分组中随机一条记录,具有很大不确定性
31. WHERE:实现条件限制数据记录
HAVING:实现条件限制分组数据记录
32.笛卡尔积:没有连接条件表关系返回的结果
表一字段a,行数b;表二字段c,行数d
表一和表二的笛卡尔积:字段=a+c 行数=b*d
33.内连接(INNER JOIN):表关系笛卡尔积数据,仅保留表关系中所有匹配记录
自然连接:根据表关系中相同名称的字段自动进行记录匹配,再去重
等值连接:表关系笛卡尔积中,选择所匹配字段值相等的数据记录
不等值连接:!=
34.外连接(OUTER JOIN):表关系笛卡尔积数据,不仅保留表中所有匹配数据,还会保留部分不匹配的数据记录
左外连接:表关系笛卡尔积数据除了选择匹配数则记录,还包含关联左表中不匹配记录
以左边表为主保留
右外连接:…右边表
全外连接:…左右两边表全
35.自连接:内连接查询中存在的一种特殊的等值连接,表与其自身进行连接
36.外链接查询返回操作表中至少一个表的所有数据
37.合并查询数据记录:UNION| UNION ALL关键字
38.连接查询两种语法:
1)FROM子句利用(,)区分多个表,在WHERE子句中通过逻辑表达式来实现匹配条件
2)FROM子句用 ”JOIN ON”,ON后接条件
39.子查询(嵌套查询):查询之中嵌套了其他若干查询
IN:主查询的条件是子查询的查询结果
ANY:主查询的条件为满足子查询查询返回查询结果中任意一条数据
= ANY> ANY < ANY三种
ALL:主查询的条件为满足子查询查询返回查询结果中所有数据
EXISTS:布尔型,ture&false
40.不同数据库:SQL语句可移植,函数每个数据库支持不同
41.存储过程和函数:就是事先经过编译并存储在数据库中的一段SQL语句集合
1)由事件来触发、激活从而实现执行,执行需要手动调用其名字并制定相应参数
2)函数必须有返回值,存储过程没有
3)存储过程的参数类型远远多于函数的参数类型
4)优点
(1)允许标准组件编程,提高SQL语句重用性、共享性、可移植性
(2)较快执行、减少流量
(3)作为安全机制来利用
42. Mysql支持事务的存储引擎:InnoDB和BDB
43. InnoDB存储引擎事务主要通过UNDO日志和REDO日志实现
支持ACID事务、行级锁和高并发
44.事务:多用户访问同一份数据,一个用户在更改数据的过程中其他用户同时发出更改请求,保证数据库的更新从一个一致状态更改为另外一个一致性状态
特性:(1)原子性:对事务所进行的数据修改等操作只能完全提交或者完全回滚
(2)一致性:数据变更必须应用与事务的修改,保证数据完整性
(3)隔离性:当前事务不会查看由另一个并发事务正在修改数据
(4)持久性:事务完成,所做的修改对数据影响是永久,重启故障数据可恢复
45. REDO日志:事务执行时将执行的事务日志写入日志文件
每条sql语句进行数据库更新,先将REDO写到日志缓冲区,当客户端执行COMMIT命令提交时,日志缓冲区的内容江北刷新到磁盘。
刷新方式或者时间间隔通过参数innodb_flush_log_at_trx_commit控制
对应磁盘上ib_logfileN文件
46. UNDO日志:事务异常时的数据回滚
不存在单独的UNDO日志文件,所有的UNDO日志都放在表空间对应的.ibd
47. Mysql事务隔离级别
(1)READ-UNCOMMITTED(读取未提交内容)
(2)READ-COMMITTED(读取提交内容):大多数数据库默认级别,不是Mysql默认
一个事务从开始到提交前所做的任何改变都是不可见的,食物只能看到已经、提交事物所做的改变
(3)REPEATABLE-READ(可重读):Mysql默认
确保同一事务的多个实例在并发读取数据时会看到同样数据行
(4)Serializable(可串行化):强制事务排序,在每个可读数据行上加上共享锁实现
48. InnoDB和Falcon通过多版本并发控制MVCC机制解决幻读问题
InnoDB的MVCC机制:为每个数据行增加两个隐含值(行创建时间&过期时间)实现
49. InnoDB锁机制:为保证数据一致性,要对并发操作进行控制,使用行锁机制
50.锁类型:共享锁、排他锁、意向锁
51.锁粒度:表锁(管理锁的开销最小、允许并发量最小)
行锁(支持最大并发)
52.Mysql软件中mysql库:存储关于权限的表
1)mysql.user表(39个字段):
(1)用户字段(3个字段):host、user、password
(2)权限字段:”_priv”结尾(默认N不可作用在所有数据库;Y可作用所有数据库)
(3)安全字段(4个字段):判断用户是否能够成功登陆
ssl_type、ssl_cipher、x509_issuer、x509_subject
(4)资源控制字段(4个字段):判断用户是否能够成功登陆
max_questions、max_updates、max_connection、max_user_connections
2)mysql.db、mysql.host:存储某个用户对相关数据库的权限,host是对db的扩展
(1)用户字段:mysql.db(host、user、db)、mysql.host(host、db)
(2)权限字段:create_routine_priv、alter_routine_priv
3)mysql.tables_priv(8个字段):实现单个表的权限设置
主机名、数据库名、用户名、表名、
Grantor权限有谁设置、
Timestamp存储更新时间、
Table_priv对表进行操作的权限
Column_priv对表中字段列进行操作的权限
4)mysql.columns_priv(7个字段):实现单个字段的权限设置
5)mysql.procs_priv(8个字段):主机名、数据库名、用户名、Routine_name、Routine_type、Grantor、proc_priv、Timestamp
53.Mysql安全基础:用户不能对过多的数据库对象具有过多的访问权限
54. Mysql拥有日志种类:二进制日志、错误日志、查询日志,默认情况只会启动错误日志
(1)二进制日志:二进制记录数据库操作,但不记录查询语句
(2)错误日志:启动、运行、关闭时出错信息 error-bin[=dir\[filename]]
(3)通用查询日志:启动关闭信息、客户端连接信息、更新数据记录sql和查询数据sql
log[=dir\[filename]]
(4)慢查询日志:执行时间超时的各种操作
Log-slow-queries[=dir\[filename]]
long_query_time=n
55. 二进制日志:数据库变化情况,SQL语句中的DDL和DML语句
(1)配置文件【my.ini】,在[mysql]手动添加:log-bin[=dir\[filename]]
Filename:指定二进制文件的文件名,格式filename.number
若没指定dir\[filename],默认:主机名-bin.number,保存在数据库数据文件
每次重启mysql服务都会生成一个新的二进制日志文件,文件名不变,数字增加
(2)查看:mysqlbinlog filename.number
(3)暂停:SET SQL_LOG_BIN=0
(4)重启:SETSQL_LOG_BIN=1
(5)删除:RESET MASTER
PURGE MASTER LOGS TOfilename.number
PURGE MASTER LOGS BEFORE ‘yyyy-mm-dd hh:MM:ss’
56.保证备份数据的完整性,重启MYSQL服务:FLUSH TABLES 数据写入到文本文件
57.复制数据文件方式只适合存储引擎为MyISAM的表
58.mysqldump会将包含数据的表的结构和数据内容保存在相应的文本
(1)检查所要备份的表结构,相应文本生成CREATE语句
(2)检查数据内容,在相应的文本文件生成INSERT INTO语句
59.通过复制数据文件实现数据备份还原必须保证两个Mysql数据库的主版本号一致
还要注意存储引擎问题
60.主版本号一致的数据库,其数据文件拥有相同的类型数据文件