一、学习内容

什么是SQL

Structured Query Language 结构化查询语言

SQL 作用

1.是一种所有关系型数据库的查询规范,不同的数据库都支持。 2.通用的数据库操作语言,可以用在不同的数据库中。 3.不同的数据库SQL 语句有一些区别。

SQL 语句分类

1.Data Definition Language (DDL 数据定义语言) 如:建库,建表 2.Data Manipulation Language(DML 数据操纵语言), 如:对表中的记录操作增删改 3.Data Query Language(DQL 数据查询语言), 如:对表中的查询操作 4.Data Control Language(DCL 数据控制语言), 如:对用户权限的设置

MySQL 的语法

1.每条语句以分号结尾,如果在SQLyog 中不是必须加的。 2.SQL 中不区分大小写,关键字中认为大写和小写是一样的。 3.三种注释: 1) -空格 单行注释 2) / / 多行注释 3) # 这是mysql 特有的注释方式

创建数据库的几种方式

创建数据库 CREATE DATABASE 数据库名; 判断数据库是否已经存在,不存在则创建数据库 CREATE DATABASE IF NOT EXISTS 数据库名;
创建数据库并指定字符集 CREATE DATABASE 数据库名 CHARACTER SET 字符集;

查看数据库

查看所有的数据库 show databases; 查看某个数据库的定义信息 show create database 数据库名;

修改数据库默认的字符集

ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

删除数据库

DROP DATABASE 数据库名;

使用数据库

查看正在使用的数据库 SELECT DATABASE(); 使用/切换数据库 USE 数据库名;

MySQL 数据类型

数据类型
分类 类型名称 类型说明



整数
tinyInt 微整型:很小的整数(占8 位二进制)
smallint 小整型:小的整数(占16 位二进制)
mediumint 中整型:中等长度的整数(占24 位二进制)
int(integer) 整型:整数类型(占32 位二进制)

小数 float 单精度浮点数,占4 个字节
double 双精度浮点数,占8 个字节


日期
time 表示时间类型
date 表示日期类型
datetime 同时可以表示日期和时间类型

字符串 | char(11) | 固定长度的字符串,无论使用几个字符都占满全部,M 为0~255 之间的整
数 | | | varchar(11) | 可变长度的字符串,使用几个字符就占用几个,M 为0~65535 之间的整数 | |


大二进制 | tinyblob
Big Large Object | 允许长度0~255 字节 | | | blob | 允许长度0~65535 字节 | | | mediumblob | 允许长度0~167772150 字节 | | | longblob | 允许长度0~4294967295 字节 | |

大文本 | tinytext | 允许长度0~255 字节 | | | text | 允许长度0~65535 字节 | | | mediumtext | 允许长度0~167772150 字节 | | | longtext | 允许长度0~4294967295 字节 |

DDL 操作

创建表的格式 CREATE TABLE 表名( 字段名1 字段类型1, 字段名2 字段类型2 ); 查看某个数据库中的所有表 SHOW TABLES; 查看表结构 DESC 表名; 查看创建表的SQL 语句 SHOW CREATE TABLE 表名; 快速创建一个表结构相同的表 CREATE TABLE 新表名 LIKE 旧表名; 直接删除表 DROP TABLE 表名; 判断表是否存在,如果存在则删除表 DROP TABLE IF EXISTS 表名; 添加表列ADD ALTER TABLE 表名 ADD 列名 类型; 修改列类型MODIFY ALTER TABLE 表名 MODIFY 列名 新的类型; 修改列名CHANGE ALTER TABLE 表名 CHANGE 旧列名 新列名 类型; 删除列DROP ALTER TABLE 表名 DROP 列名; 修改字符集character set ALTER TABLE 表名 character set 字符集; 插入全部字段 所有的字段名都写出来 INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
不写字段名 INSERT INTO 表名 VALUES (值1, 值 2, 值3…);
插入部分数据 INSERT INTO 表名 (字段名1, 字段名 2, …) VALUES (值1, 值2, …); 查看包含character 开头的全局变量 show variables like ‘character%’; 什么是蠕虫复制: 将一张已经存在的表中的数据复制到另一张表中。 语法格式: 将表名2 中的所有的列复制到表名1 中 INSERT INTO 表名1 SELECT * FROM 表名 2;
只复制部分列 INSERT INTO 表名1( 列1, 列2) SELECT 列1, 列2 FROM student; 不带条件修改数据 UPDATE 表名 SET 字段名=值; — 修改所有的行
带条件修改数据 UPDATE 表名 SET 字段名=值 WHERE 字段名=值; 不带条件删除数据 DELETE FROM 表名; 带条件删除数据 DELETE FROM 表名 WHERE 字段名=值;
使用truncate 删除表中所有记录 TRUNCATE TABLE 表名;

INSERT 的注意事项

1.插入的数据应与字段的数据类型相同。 2.数据的大小应在列的规定范围内,例如:不能将一个长度为80 的字符串加入到长度为40 的列中。 3.在values 中列出的数据位置必须与被加入的列的排列位置相对应。在mysql 中可以使用value,但不建议使用,功能与values 相同。 4.字符和日期型数据应包含在单引号中。MySQL 中也可以使用双引号做为分隔符。 5.不指定列或使用null,表示插入空值。

DQL语法

比较运算符 说明
>、<、<=、>=、=、<> <>在 SQL 中表示不等于,在 mysql 中也可以使用!= ,没有==
BETWEEN…AND 在一个范围之内,如:between 100 and 200 相当于条件在 100 到 200 之间,包头又包尾
IN(集合) 集合表示多个值,使用逗号分隔
LIKE ‘张%’ 模糊查询
IS NULL 查询某一列为 NULL 的值,注:不能写=NULL
逻辑运算符 说明
and && 与,SQL 中建议使用前者,后者并不通用。
or ||
not !
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2…);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE ‘通配符字符串’;
通配符 说明
% 匹配任意多个字符串
_ 匹配一个字符
理解
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];
ASC: 升序,默认值
DESC: 降 序
聚合函数 作用
max(列名) 求这一列的最大值
min(列名) 求这一列的最小值
avg(列名) 求这一列的平均值
count(列名) 统计这一列有多少条记录
sum(列名) 对这一列求总和
where 子句 对查询结果进行分组前,将不符合 where 条件的行去掉,即在分组之前过滤数据,即先过滤再分组。 where 后面不可以使用聚合函数
having 子句 having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。 having 后面可以使用聚合函数
LIMIT offset,length;
offset:起始行数,从 0 开始计数,如果省略,默认就是 0
length: 返回的行数

数据库备份和还原

备份格式:DOS 下,未登录的时候。这是一个可执行文件exe,在bin 文件夹 mysqldump -u 用户名 -p 密码 数据库 > 文件的路径

还原格式:mysql 中的命令,需要登录后才可以操作 USE 数据库; SOURCE 导入文件的路径;

数据库表的约束

约束的作用:

对表中的数据进行限制,保证数据的正确性、有效性和完整性。 一个表如果添加了约束,不正确的数据将无法插入到表中。 约束在创建表的时候添加比较合适。

约束名 约束关键字 说明
主键 primary key 非空,唯一
主键自增 auto_increment 默认从0开始
默认 default 如果一列没有值,使用默认值
唯一 unique 这一列不能有重复值
非空 not null 这一列必须有值
外键 foreign key 主表中主键列,在从表中外键列
检查约束 check mysql 不支持

级联操作

在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作

级联操作语法 描述
ON UPDATE CASCADE 级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键
列也自动同步更新
ON DELETE CASCADE 级联删除

表关系的概念

表与表之间的三种关系
一对多: 最常用的关系部门和员工
多对多: 学生选课表和学生表,一门课程可以有多个学生选择,一个学生选择多门课程
一对一: 相对使用比较少。员工表简历表,公民表护照表
一对多建表原则: 在从表(多方)创建一个字段,字段作为外键指向主表的主键
多对多关系原则: 需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
一对一关系原则: 一对一可以创建成一张表。(可以通过唯一约束或主键约束的属性加外键来实现一对一的关系)

三大范式

什么是范式: 好的数据库设计对数据的存储性能和后期的程序开发,都会产生重要的影响。建立科学的,规范的数据库就需要满足一些规则来优化数据的设计和存储,这些规则就称为范式。

范式 特点
1 范式 原子性,每列不可再拆分
2 范式 不产生局部依赖,表中每一列都完全依赖于主键。
3 范式 不产生传递,表中每一列都直接依赖于主键

多表查询

笛卡尔积:因为多表查询,没有加过滤条件,产生的没用的数据。
隐式内连接:看不到 JOIN 关键字,条件使用 WHERE 指定
SELECT 字段名 FROM 左表, 右表 WHERE 条件
显示内连接:使用 INNER JOIN … ON 语句, 可以省略 INNER
左外连接:使用 LEFT OUTER JOIN … ON,OUTER 可以省略;在内连接的基础上保证左表的数据全部显示
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件
右外连接:使用 RIGHT OUTER JOIN … ON,OUTER 可以省略
用右边表的记录去匹配左边表的记录,如果符合条件的则显示;否则,显示 NULL;在内连接的基础上保证右表的数据全部显示
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件
使用内连接查询
select from dept d inner join emp e on d.id = e.dept_id;
使用左外连接查询
select
from dept d left join emp e on d.id = e.dept_id;
使用内连接查询
select from dept inner join emp on dept.id = emp.dept_id;
使用右外连接查询
select
from dept right join emp on dept.id = emp.dept_id;

二、学习经验:

mysql练习中,代码不报错,能够得到需要的结果,不意味着代码就是正确,mysql很垃圾,写代码时需要多加注意,不要为了完成作业,应付任务,写完就不管了。

三、学习不足与改进:

目前mysql的学习过程中,知识点难度适中,应用时很多细节没有注意,需要多加练习留意细节,不报错不代表没有问题,需要仔细检查语言规范。

四、学习状态:

第二周的网课,学习状态还行,注意力基本集中到听课,上课中走神情况逐渐降低,偶尔发生一两次,思路可以跟上老师的节奏,知识点几乎都能理解,学习状态仍需进一步改善。