SQL
-
只会皮毛:
-
oracle
- 搭建架构层次
- ADG
- RAC
- 应用层次
- DML DDL等
- 搭建架构层次
-
mysql
-
应用层次
-
存储过程prodedure其实就是函数
-
mysql变量前要@修饰; eg: @price
-
cursor在mysql中只能用在procedure里,declare定义一下,然后open使用它,结束用close
-
trigger 是触发器,对表格产生定义的某种行为的时候会做定义的预先行为;只有表格支持触发器,视图不支持,即针对真实数据。
-
-
搭建架构层次
- MGR
-
-
hive :批量处理(不支持单记录查询),mapreduce(类似归并排序一样)启动耗时长,静态海量数据
-
hbase:则是支持行级记录查询,动态数据
-
Redis: 单进程内存数据库,非关系数据库。
- 搭建架构层次
- 集群
- 应用层次
- 持久化
- save
- bgsave
- aof
- 持久化
- 搭建架构层次
-
-
数据结构来组织的话:
- 关系模型
层次模型网状模型
-
数据类型需要注意的:
- BIGINT 8字节 整型 (long long)
- REAL 4字节 浮点型 (float)s
- CHAR (N) 定长字符串
- VARCHAR(N) 变长字符串 !!
- DATE 2018-06-22
- TIME 12:20:59
- DATETIME 2018-06-22 12:20:59
-
三种能力
- DDL Definition 创建表,删除表,修改表的结构
- create
- create database
- create table
- create view as
- create index [] on table []
- drop
- alter
- change column (name) 字段的名字
- modify column 字段的属性
- add column 加一列
- drop column 删除一列
- rename to
- create
- DML Manipulation 添加,删除,更新某条数据的能力
- update
- update table set salary = 20000/day where name = wulin
- delete
- 删除某一行,某一条数据
- insert
- update
- DQL Query 查询
- select
- where
- group by
- having
- order by
- DDL Definition 创建表,删除表,修改表的结构
-
运行 mysql
- mysql -u root -p
- exit
-
主键
- 关系数据库中,一行就是一个记录
- 字段 就是 列名
- 通过某个字段 唯一区分 出不同的记录,这个字段被称为 主键
- 选取主键的原则:
- 不使用任何业务相关的 字段 作为 主键
-
外键
-
外键并不是通过列名实现的,而是通过定义外键约束实现的:
ALTER TABLE students ADD CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES classes (id); #删除外键 ALTER TABLE students DROP FOREIGN KEY fk_class_id;
-
-
查询
LIMIT 3 OFFSET 0
表示,对结果集从0号记录开始,最多取3条。注意SQL记录集的索引从0开始。 -
聚合:
SELECT AVG(score) average FROM students WHERE gender = 'M';
- 每页3条记录,如何通过聚合查询获得总页数?
SELECT CEILING(COUNT(*) / 3) FROM students;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dilnlWDz-1655296920686)(C:\Users\richa\AppData\Roaming\Typora\typora-user-images\image-20200922192102508.png)]
DDL
#创建库,创建表
CREATE DATABASE IF NOT EXISTS books;
DROP DATABASE IF EXISTS books;
CREATE TABLE books(
id INT, #编号
book_name VARCHAR(20),#图书名
price DOUBLE,#价格
publishdate DATE,#出版日期
nation VARCHAR(20)
)
DESC author; #desc ribe 展示表格
#表的修改
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME; #修改列名
ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP; # alter + modify修改类型或者约束
ALTER TABLE author ADD COLUMN annual DOUBLE; # 添加新列
ALTER TABLE author DROP COLUMN annual; # 删除列
ALTER TABLE author RENAME TO book_author; #修改表名
视图(保存语句逻辑临时性)
CREATE VIEW myv1
AS
SELECT 列名1,列名2
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j on j.job_id = e.job_id
表和视图的对比
创建语法 | 内存占用 | 使用 | |
---|---|---|---|
视图 | CREATE VIEW | 只保存SQL逻辑 | 增删改查,一般不增删改 |
表格 | CREATE TABLE | 保存了数据 | 增删改查 |
事务(transaction)
事务是 恢复 和 并发控制 的基本单位。
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
ACID【原子性,一致性,隔离性,持久性】
- 整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
- 系统状态一致性。 其主要特征是保护性和不变性(Preserving an Invariant)
- 隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。 串行化
- 在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。
脏读,不可重复读,幻读
Mysql 默认 repeatable read也就是可能出现幻读
set session transaction isolation level read uncommitted;
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
read-uncommitted | 1 | 1 | 1 |
read-committed | 0 | 1 | 1 |
repeatable read | 0 | 0 | 1 |
serializable | 0 | 0 | 0 |
事务的语句
SET AUTOCOMMIT = 0;
START TRANSACTION;
SELECT * FROM table where id =123;
COMMIT;
SET AUTOCOMMIT=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;
DELETE FROM account WHERE id=28;
ROLLBACK TO a;
加粗样式