本文只做简单的记录和了解,不做深层理解和分析。
1. SQL语法基础篇
1.1 了解SQL
把 SQL 语言按照功能划分成以下的 4 个部分:
-
- DDL,英文叫做 Data Definition Language,也就是数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用 DDL,我们可以创建,删除和修改数据库和表结构。
-
- DML,英文叫做 Data Manipulation Language,数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。
-
- DCL,英文叫做 Data Control Language,数据控制语言,我们用它来定义访问权限和安全级别。
-
- DQL,英文叫做 Data Query Language,数据查询语言,我们用它查询想要的记录,它是 SQL 语言的重中之重。在实际的业务中,我们绝大多数情况下都是在和查询打交道,因此学会编写正确且高效的查询语句,是学习的重点。
关于 SQL 大小写的问题,总结了下面两点:
-
- 表名、表别名、字段名、字段别名等都小写;
-
- SQL 保留字、函数名、绑定变量等都大写。
1.2 DBMS的前世今生(数据库管理软件)
DB、DBS和DBMS的区别是什么
说到 DBMS,有一些概念你需要了解。DBMS 的英文全称是 DataBase Management System,数据库管理系统,实际上它可以对多个数据库进行管理,所以你可以理解为 DBMS = 多个数据库(DB)+ 管理程序。
DB 的英文是 DataBase,也就是数据库。数据库是存储数据的集合,你可以把它理解为多个数据表。
DBS 的英文是 DataBase System,数据库系统。它是更大的概念,包括了数据库、数据库管理系统以及数据库管理人员 DBA。
这里需要注意的是,虽然我们有时候把 Oracle、MySQL 等称之为数据库,但确切讲,它们应该是数据库管理系统,即 DBMS。
1.3 SQL 是如何执行的
1.4 DDL
DDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了数据库的结构和数据表的结构。
在 DDL 中,我们常用的功能是增删改,分别对应的命令是CREATE、DROP 和 ALTER。需要注意的是,在执行 DDL的时候,不需要 COMMIT,就可以完成执行任务。
// 1. 对数据库进行定义
CREATE DATABASE nba; //创建一个名为nba的数据库
DROP DATABASE nba; //删除一个名为nba的数据库
// 2. 对数据库表进行定义,创建表结构的语法是这样的:
CREATE TABLE table_name
// 修改表结构
ALTER TABLE player ADD (age int(11)); // 添加字段,比如我在数据表中添加一个 age 字段,类型为int(11)
ALTER TABLE player RENAME COLUMN age to player_age; // 修改字段名,将 age 字段改成player_age
ALTER TABLE player MODIFY (player_age float(3,1)); // 修改字段的数据类型,将player_age的数据类型设置为float(3,1)
1.5 SELECT 检索数据
SELECT name FROM heros; // 检索一列
SELECT name,age FROM heros; // 检索多列
SELECT * FROM heros; // 检索全部列
SELECT name AS n FROM heros; // 使用列别名进行检索
SELECT '王者荣耀'as platform, name FROM heros; // 查询常数
SELECT DISTINCT attack_range, name FROM heros; // 去除重复行
1.6 数据过滤
1.7 SQL 函数
1.8 聚集函数和分组统计
1.9 子查询
1.10 SQL标准和连接表
1.11 视图
1.12 存储过程
1.13 事务处理
1.14 事务的隔离级别
1.15 游标
1.16 使用Python 操作 mySql
1.17 SQLAIchemy
2. SQL性能优化篇
2.1 数据库调优
2.2 范式设计
2.3 3NF的不足
2.4 索引
2.5 Hash 索引
2.6 索引的使用原则
2.7 数据页
2.8 磁盘IO
2.9 理想的索引
2.10 锁的划分
2.11 MVCC 多版本并发控制技术
2.12 查询优化器
3. 认识DBMS
3.1 Excel 中使用 mySQL
3.2 webSQL
练习
// index.html 文件
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>SQL必知必会</title>
<script type="text/javascript">
// 初始化
function init() {
datatable = document.getElementById("datatable");
}
// 显示每个英雄的数据
function showData(row){
var tr = document.createElement("tr");
var td1 = document.createElement("td");
var td2 = document.createElement("td");
var td3 = document.createElement("td");
var td4 = document.createElement("td");
var td5 = document.createElement("td");
td1.innerHTML = row.id;
td2.innerHTML = row.name;
td3.innerHTML = row.hp_max;
td4.innerHTML = row.mp_max;
td5.innerHTML = row.role_main;
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
tr.appendChild(td4);
tr.appendChild(td5);
datatable.appendChild(tr);
}
// 设置数据库信息
var db = openDatabase('wucai', '1.0', '王者荣耀英雄数据', 1024 * 1024);
var msg;
// 插入数据
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS heros (id unique, name, hp_max, mp_max, role_main)');
tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10000, "夏侯惇", 7350, 1746, "坦克")');
tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10001, "钟无艳", 7000, 1760, "战士")');
tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10002, "张飞", 8341, 100, "坦克")');
tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10003, "牛魔", 8476, 1926, "坦克")');
tx.executeSql('INSERT INTO heros (id, name, hp_max, mp_max, role_main) VALUES (10004, "吕布", 7344, 0, "战士")');
msg = '<p>heros数据表创建成功,一共插入5条数据。</p>';
document.querySelector('#status').innerHTML = msg;
});
// 查询数据
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM heros', [], function (tx, data) {
var len = data.rows.length;
msg = "<p>查询记录条数: " + len + "</p>";
document.querySelector('#status').innerHTML += msg;
// 将查询的英雄数据放到 datatable中
for (i = 0; i < len; i++){
showData(data.rows.item(i));
}
});
});
</script>
</head>
<body>
<div id="status" name="status">状态信息</div>
<table border="1" id="datatable"></table>
</body>
</html>
双击 index.html 文件,看到效果如下:
删除数据库的方法:
方式1:手动在浏览器中删除
方式2:使用 executeSql 函数
3.3 SQLite
3.4 数据清洗
3.5 数据集成
3.6 SQL 数据分析
课程:极客时间的《SQL必知必会》
图片下载地址:github.com/cystanford/…