/SQL_Tutorial

ref: https://www.liaoxuefeng.com/

SQL_Tutorial

[SQL教程]

概念:简单地说,SQL就是访问和处理关系数据库的计算机标准语言。也就是说,无论用什么编程语言(Java、Python、C++...)编写程序,只要涉及到操作关系数据库,都必须通过SQL来完成。

  1. 关系数据库概述

1.1 数据模型

数据库按照数据结构来组织、存储和管理数据,数据库一共有三种模型: 层次模型、网状模型、关系模型;

层次模型就是以“上下级”的层次关系来组织数据的一种方式,层次模型的数据结构看起来就像一颗树;

网状模型把每个数据节点和其他很多节点都连接起来,它的数据结构看起来就像很多城市之间的路网;

关系模型把数据看作是一个二维表格,任何数据都可以通过行号+列号来唯一确定,它的数据模型看起来就是一个Excel表;

随着时间的推移和市场竞争,最终,基于关系模型的关系数据库获得了绝对市场份额。

1.2 数据类型 对于一个关系表,除了定义每一列的名称外,还需要定义每一列的数据类型。

2.安装MySQL 在window上安装MySQL,首先从MySQL官方网站下载最新的MySQL Community Server版本。具体步骤可搜索网上教程。

安装成功后,在命令提示符下输入mysql -u root -p,然后输入密码,光标开头变为mysql 则说明安装成功。

[关系模型]

关系型数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维表,可以把它们看成是很多excel表格。表的每一行称为记录(Record),表的每一列称为字段(Column),字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。 和EXCEL表有所不同的是,关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。 在关系型数据库中,关系是通过主键和外键来维护的。

  1. 主键 主键 定义:对于关系表,有个重要的约束,任意两条记录必须能够通过某一字段唯一区分出 不同的记录,这个字段被称为主键。 主键关键点: ①记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的, 修改了主键会造成一系列的影响; ②不使用任何业务相关的字段作为主键; ③一般把主键字段命名为id,常见的可作为id字段的类型有:自增整数类型,全 局唯一GUID类型; ④主键不应该允许NULL。 联合主键 定义:允许通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键 被称为联合主键。联合主键只要满足联合后主键不重复即可,单个列出现重复是允许的。 2.外键 定义:关系数据库通过外键可以实现一对多、多对多和一对一的关系。外键既可以通过 数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。 外键并不是通过列名实现的,而是通过定义外键约束实现的: ALTER TABLE students ADD CONSTRAINT fk_class_id FOREIGN KEY (class_id) REFERENCES classes (id); 其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为 外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表 的主键)。 要删除一个外键约束,也是通过ALTER TABLE实现的: ALTER TABLE students DROP FOREIGN KEY fk_class_id; 注意:删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN ...实现的。 3.索引 定义:在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要提高查询速度,就需要使用索引。索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。 索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。 可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是插入、更新和删除记录时需要同时修改索引,因此,索引越多,插入更新和删除记录的速度就越慢。 唯一索引 通过创建唯一索引,可以保证某一列的值具有唯一性。

[MySQL] MySQL上可以有多个数据库,每个数据又可以包含多张表。

1.管理MySQL 数据库 在一个运行MySQL的服务器上,实际上可以创建多个数据库。 SHOW DATABASES; # 展示MySQL服务器上所有的数据库 CREATE DATABASE IF NOT EXISTS test; # 创建test数据库如果其不存在 DROP DATABASE IF EXISTS test; # 删除test数据库如果其存在 USE test; # 对一个数据库操作时,首先将其切换为当前数据库 SHOW TABLES; # 列出当前数据库中所有的表 DESC students; # 查看表结构 SHOW CREATE TABLE students; # 查看创建表的sql语句 CREATE TABLE students; # 创建表 DROP TABLE students; # 删除表 ALTER TABLE students ADD COLUMN birth VARCHAR(10) NOT NULL; # 给students表新增一列birth ALTER TABLE students CHANGE COLUMN birth birthday VARCHAR(20) NOT NULL; # 把列名birth改为birthday ALTER TABLE students DROP COLUMN birthday; # 删除列 2.实用SQL语句 插入或替换

插入或更新

插入或忽略

快照

写入查询结果集

强制使用指定索引