本文地址:http://www.cnblogs.com/maplefighting/p/7825313.html html
mysql:mysql
一、登陆:mysql -u root -psql
二、建立数据库:mysqladmin -u root -p create xx;数据库
三、删除数据库: drop xx;缓存
四、选择数据库:use xx安全
五、建立数据库:create table if not exist '.....' (性能优化
'id' INT UNSIGNED AUTO_INCREMENT,服务器
....... 网络
)并发
PRIMARY KEY('.....','........') 主键
六、删除数据库:DROP TABLE xx;
七、插入数据:INSERT INTO TABLE ( , ) VALUE ( , )
八、查询:SELECT col_name,col_id
FORM table_name
[ where .......]
[ OFFSET M ] [ LIMIT N ]
偏移量 返回记录数
where BINARY ..... 区分大小写
九、UPDATE:UPDATE table_name SET .....=......
[ where .....]
十、DELETE:DELETE FROM table_name [ WHERE .....]
十一、LIKE:SELECT ......FROM ...... WHERE ....LIKE '%COM';
十二、排序:ORDER BY ....ASC/DESC
1三、GROUP BY:SELECT coalesce(name,'总数'),sum( ) as ....
FROM .....
GROUP BY .......
coalesce(a,b,c) a==null,选b --->b==null时,选c
1四、链接:SELECT a.xx,b.xx FROM tb1 a INNER JOIN tb2 b ON a.k = b.k 内链接,取交集
LEFT JOIN 左链接,读取左边所有数据
RIGHT JOIN 右链接
1五、事务:BEGIN;开始
COMMIT;提交事务
ROLLBACK;回滚
1六、ALTER:ALTER TABLE tb1 DROP i;
ADD i INT;
MODIFY c char(10);
CHANGE i j BIGINT;
ALTER TABLE tb1 ALTER i SET DEFAULT 100; 修改默认值
ALTER TABLE tb1 RENAME TO tb2; 修改表名
1七、临时表 关闭客户端程序时销毁 temporary
1八、索引:CREATE INDEX index ON mytable(username(length))
1九、外键:FOREIGN KEY (parent_id) REFERENCES parents(id)
20、WHERE子句中不能以汇集函数(SUM,AVG....) 为条件
2一、完整性约束:CONSTRAINT c CHECK(Sno Between......) NOT NULL
2二、IF(ex1, ex2, ex3 ) ex1为TRUE时,返回ex2,不然返回ex3
IF condition THEN .......
ELSEIF con THEN ....
ELSE .......
END IF
2三、CREATE FUNCTION "sp" (n INT,......)
RETURNS text
BEGIN
DECLARE i INT DEFAULT 0;
SET i = 1;
while i < 11 do
insert ........
set i = i + 1;
end while;
RETURN s;
END $$
repeat
insert......;
set i = i + 1;
util i >= 5
end repeat
-----------
2四、数据库完整性:实体完整性,参照完整性,用户定义的完整性
2五、完整性约束:非空约束,惟一约束,主键约束,外键约束
2六、规范化理论:(1) 清除不合适的数据依赖
(2) 减小重复 (3) 消除冗余 (4) 解决操做异常
2七、范式:(1) 2NF 消除部分函数依赖
(Sno, Cno ) ----> Sdept, Sno ---> Sdept 存在部分函数依赖
(2) 3NF 不存在部分函数依赖,没有传递依赖
(3) BCNF:只有一个候选码的3NF
有多个候选码的3NF,讨论剩下属性有没依赖关系
(S, J ) --> T , (S, T ) --> J, T--> J 不是BCNF
分解为 ST(S, T) TJ(T, J )
(4) 4NF 消除非平凡且非函数依赖的多值依赖
2八、数据库设计:一、需求分析阶段 二、概念结构设计阶段 三、逻辑结构设计阶段 四、物理结构设计阶段 五、数据库实施阶段 六、数据库运行和维护阶段
2九、事务是用户定义的一个数据库操做序列,要么全作,要么全不作
4个特性:原子性,一致性,隔离性,持久性 (ACID)
30、并发控制:封锁
排他锁 -->写锁 共享锁-->读锁
3一、乐观锁:每次拿到数据都认为别人不会修改,不上锁,更新时会判断期间别人有没去更新数据 使用版本号等机制 cas,mvcc 指定版本号
悲观锁:每次都上锁 表锁,读锁,写锁
select ......... for update
3二、查找表中多余记录记录
SELECT * FROM people where peopleid in (
SELECT peopleid FROM people GROUP BY peopleid
HAVING count(peopleid) > 1
)
3三、事务的隔离性:(1) 未提交读:事务中的修改,即便没提交,其余事务也可见,会引发脏读
(2) 提交读:一个事务从开始到提交以前,所作的修改对其余事务不可见,会引发不可重复读
(3) 可重复读 (mysql默认) :解决脏读的问题,也保证可屡次读取相同的数据。但会出现幻读
(4) 可串行化:每一行数据都加锁
幻读:当某个事务读取范围内记录时。另外一个事务插入,而后再读取 (2)(3)才会发生
提交读的读锁是读完释放,可重复读是事务完释放 (--这个不知道正确与否)
3四、并发操做带来的数据不一致包括:(1) 幻读 (新增,删除) (2) 不可重复读 (修改) (3)读脏数据
3五、MVCC 多版本并发控制
SELECT:a、InnoDB 只检查版本早于当前版本的数据行
b、行的删除版本要么未定义,要么大于当前事务版本号
INSERT:保留当前系统版本号为行版本号
DELETE:保存行删除标识
3六、B-树 (读作b树):为了减小磁盘I/O,把高瘦的二叉查找树变成矮胖的 每一个节点都带有具体数据(关键字)
m阶段B-树特征:
(1) 根节点至少有两个子女
(2) 每一个中间节点包含 k - 1 个元素和 k 个孩子 m/2 <= k <= m
(3) 每一个叶子节点都包含 k - 1 个元素
(4) 全部叶子节点都位于同一层
InnoDB 使用 B+树
B+树
(1) 有k个子树的中间节点包含有 k 个元素,每一个元素只使用索引,全部数据保存在叶子节点
(2) 全部叶子包含所有元素信息 及指针,自己以关键字从小到大排序
(3) 全部中间节点元素同时存在于子节点,在子节点中是最大(或最小的) 元素
区别:单个查询 B+ 树比B-树优势:
a、中间节点没有具体数据,能够容纳更多节点元素,即在数据量相同时,能够更加矮胖,使 I/O次数更少
b、稳定,每次都要查询到叶子节点
范围查询:B-树须要查询每一个节点,即一个一个查询。B+树能够经过叶子链表查询 (具体两种树的形状可google或百度搜索)
3七、聚簇索引就是数据的物理存储顺序,一个表只能有一个 ------叶子节点 数据
非聚簇索引的索引顺序与数据物理排列顺序无关 ----索引
3八、数据库引擎 :MyISAM,InnoDB (详细结构可上网查询)
MyISAM是指向物理块的指针
InnoDB是聚簇索引,二级索引包含主键
InnoDB主索引树存全部数据,辅助索引存主键
MyISAM存数据地址
3九、MyISAM和InnoDB的区别
InnoDB支持事务,MyISAM不支持
MyISAM只支持表锁,InnoDB 行级锁
MyISAM 适合执行大量SELECT,InnoDB 支持大量SELECT或UPDATE
MyISAM以文件形式存储,备份和恢复可对某个表操做,能够备份覆盖恢复
40、MySQL性能优化
(1) 查询缓存 (2) 建立索引 (3) 避免SELECT * (4) 拆分大的DELETE或INSERT语句 (5) 要一行数据时加上limit 1
MySQL客户端和服务器之间的通讯是半双工的
4一、执行顺序:from --> where --> group by --> having --> select --> order by
4二、statement 和 preparedStatement 的区别
(1) 代码的可读性和可维护性
(2) preparedStatement 是预编译的,屡次执行相同 sql 语句,会直接使用数据库缓冲区
(3) 安全性, preparedStatement 使用存储过程执行全部操做,可防止 sql 注入
4三、事务的实现:镜像拷贝和事务日志
InnoDB经过 undo log 和 redo log 实现
事务中,每执行SQL语句对数据产生影响,就会记录相反操做到 undo log 中。每执行一条 SQL,会将操做记录到 redo log 中,一旦提交,持久化到磁盘
4四、Mysql存储过程
存储过程是预编译的,较快执行速度
能减小网络流量
数据库专业人员能够随时修改存储过程,不用修改源程序
create procedure proc1 (OUT s int)
BEGIN
.........
END
存储过程和函数区别
存储过程能够返回多个,函数只能返回一个值
存储过程只能call调用,函数能够sql调用
4五、mysql表水平拆分和垂直拆分
水平拆分为行的拆分,垂直拆分为列的拆分
分区只是为了存放数据的区块,仍是一张表
分表:单表的并发能力提升了,磁盘 I/O 也提升
分区:突破磁盘的读写能力
4六、hash 索引
(1) 仅仅知足 “=” ,“IN” 和 “<=>” 查询。不能使用范围查询
(2) 没办法利用索引完成排序
(3) 不能利用部分索引查询
(4) 在大量重复键值状况下,哈希索引效率低。由于碰撞多。若是是等值查询,哈希索引相对 B-Tree 等有绝对优点
参考书籍:数据库系统概论(第5版) 王珊 萨师煊 编著
--------------------------------------------------------------------------------------------------------------
以上为maplefighting我的笔记整理,若有出错,欢迎指正