1、数据库的基本概念
1.1、文件操作数据的缺点
- 查找,增加,修改,删除数据等操作比较麻烦(特别是txt),效率低
1.2、数据库的介绍
- 存储和管理数据的仓库
- 英文单词为Dtabase;简称DB
- 数据库中的数据是组织的进行存储
- MySQL由瑞典MySQL AB公司开发,后来Sun公司收购了MySQL,而Sun公司又被Oracle收购
1.3、数据库的优点
- 可以持久保存数据
- 通过SQL语句比较方便的操作数据库
- 数据存储经过算法优化,性能高
1.4、数据库的使用场景
- 数据库是对大量数据进行存储和管理的高效解决方案
2、数据库的安装和登录
2.1、MySQL 安装和配置
- 参考MySQL安装文档
- MySQL目录结构
2.2、 MySQL 登录、退出
2.2.1、Dos命令行登录MySQL
- Dos命令行的缺点
- 操作不方面
- 无界面,显示数据不直观
2.2.2、SQLyog登录MySQL
- SQLyog介绍
- SQLyog是业界著名的Webyog公司出品的一款简洁高效、功能强大的图形化MySQL数据库管理工具
- SQLyog的使用
3、MySQL相关概念
3.1、数据库、表、数据的关系
- MySQL服务器中可以创建多个数据库
- 每个数据库中可以包含多张表
- 每个表中可以存储多条数据记录
- 客户端通过数据库管理系统来操作MySQL数据库
3.2、关系型数据库介绍
- 关系型数据库是建立在关系模型基础上的数据库
- 关系模型,通俗来说就是二维表模型
- 关系型数据库是由多张能互相连接的二维表组成的数据库
3.3、SQL介绍
- SQL(Structured Query Language):结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的同一标准。每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”
3.3.1、SQL通用语法
- 1.SQL语句可以单行或多行注释,以分号结尾
- 2.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
- 3.单行注释:-- 注释内容 #注释内容(MySQL特有)
- 4.多行注释:/* 注释内容 */
3.3.2、SQL的分类
- DDL(Data Definition Language)
- 数据定义语言,用来定义数据库对象(数据库,表,列等)
- DML(Data Manipulation Language)
- 数据操作语言,用来对数据库中表的数据进行增删改
- 注意
- 查询不属于DML
- DQL(Data Query Language)
- 数据查询语言,用来查询数据库中表的记录(数据)
- DCL(Data Control Language)
- 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
4、DDL操作数据库和表
4.1、DDL查询和创建数据库
- 查询所有数据库
- SHOW DATABASES;
- 创建数据库
- CREATE DATABASE 数据库名称;
- 创建数据库(判断,如果不存在则创建)
- CREATE DATABASE IF NOT EXISTS 数据库名称;
- 删除数据库
- DROP DATABASE 数据库名称;
- 删除数据库(判断,如果存在则删除)
- DROP DATABASE IF EXISTS 数据库名称;
- 使用数据库
- USE 数据库名称;
4.2、DDL操作表
4.2.1、DDL创建表
- CREATE TABLE 表名(字段名 数据类型,....,字段名 数据类型);
- 常用数据类型
- int
- 整数类型
- double
- 小数类型
- varchar(长度)
- 字符串类型
- date
- 表示日期类型(yyyy-MM-dd)
- int
4.2.2、MySQL常见数据类型
分类 | 类型名称 | 类型说明 |
---|---|---|
整数 | tinyInt | 微整型:很小的整数(占8为二进制)1个字节 |
整数 | smallint | 小整型:小的整数(占16为二进制)2个字节 |
整数 | int(integer) | 整型:整数类型(占32位二进制)4个字节 |
整数 | bigint | 大整型:占64位二进制,8个字节 |
小数 | float | 单精度浮点数,占4个字节 |
小数 | double | 双精度浮点数,占8个字节 |
小数 | decimal(m,n) | 数值类型:m表示数值的长度,n表示小数的位数,既可以表示整数,也可以表示小数。如:decimal(10) decimal(10,2) |
日期 | time | 指标是时间类型HH:mm:ss |
日期 | date | 只表示日期类型yyyy-MM-dd |
日期 | datetime | 表示日期和时间类型,时间范围位:'1000-01-01 00:00:00' 到'9999-12-31 23:59:59' |
日期 | timestamp | 表示日期和时间类型(时间戳),时间范围为:'1970-01-01 00:00:01'到'2038-01-19 03:14:07' |
字符串 | char(m) | 固定长度的字符串,无论使用几个字符都占满全部,m为0~65535之间的整数 |
字符串 | varchar(m) | 可变长度的字符串,使用几个字符就占用几个,m为0~65535之间的整数 |
4.2.3、DDL查看和删除表
- 查询所有的表
- SHOW TABLES;
- 查询表结构
- DESC 表名;
- 删除表
- DROP TABLE 表名;
4.2.4、DDL修改表
- 修改表名
- ALTER TABLE 表名 RENAME TO 新表名;
- 单独添加一个字段
- ALTER TABLE 表名 ADD 字段名 数据类型;
- 修改某字段的数据类型
- ALTER TABLE 表名 MODIFY 字段名 新数据类型;
- 修改字段名和数据类型
- ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型;
5、DML表数据的增删改
5.1、DML往表中新增数据
- 给指定列添加数据
- INSERT INTO 表名 (字段名1, 字段名2, ···) VALUES (值1, 值2, 值3, ···);
- demo
- INSERT INTO goods (NAME, price, sales_volume, produce_date) VALUES ('华为P40', 5999, 1000, '2020-08-20');
- 给全部列添加数据
- INSERT INTO 表名 VALUES (值1, 值2, ···);
- demo
- INSERT INTO goods VALUES ('小米11', 4999, 5000, '2020-12-28');
- 批量添加数据(一次加入多条数据)
- INSERT INTO 表名 VALUES (值1, 值2, ···),(值1, 值2, ···),(值1, 值2, ···);
5.2、插入数据注意事项
-
- 字段名和值的数量要对应
- 值的类型和字段的类型要对应
- 除了数值类型,其他数据类型的数据都需要加引号(单引号、双引号都可以,推荐使用单引号)
5.3、DML修改和删除表数据
- 修改表中的数据
- UPDATE 表名 SET 字段名=新的值 [WHERE 条件];
- 修改语句中必须加条件,如果不加条件,则会将所有数据都修改
- 删除表中的数据
- DELETE FROM 表名 [WHERE 条件];
- 删除语句中必须加条件,如果不加条件,则会将所有数据都删除
- 删除表中的所有数据
- TRUNCATE 表名;
6、DQL查询数据
6.1、DQL查询数据-基础查询
- 查询指定字段的数据
- SELECT 字段名1, 字段名2 FROM 表名;
- 查询所有字段的数据
- SELECT * FROM 表名;
- 去除重复查询
- SELECT DISTINCT 字段名1 FROM 表名;
- 计算列的值(四则运算)
- SELECT 字段名1 (+ - * /) 字段名2 FROM 表名
- 起别名查询
- SELECT 字段名1 AS 别名1,字段名2 AS 别名2 FROM 表名;
6.2、DQL查询数据-条件查询
-
条件查询语法
- SELECT 字段名 FROM 表名 WHERE 条件;
-
比较运算符
-
符号 功能 > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 <>或!= 不等于
-
-
逻辑运算符(用于多条件查询)
-
符号 功能 AND或&& 并且 OR或|| 或者 NOT或! 非,不是
-
-
范围
-
符号 功能 BETWEEN ... AND ... 在某个范围之内(都包含) IN(...) 多选一
-
-
NULL的处理
-
符号 功能 IS NULL 是NULL IS NOT NULL 不是NULL
-
6.3、DQL查询数据-模糊查询
- 模糊查询语法
- SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
- MySQL通配符由两个
- %:表示任意多个字符
- _:表示一个字符
6.4、DQL查询数据-查询排序
- 排序查询语法
- SELECT 字段名 FROM 表名 ORDER BY 列名 排序方式;
- 排序方式
- ASC:升序
- DESC:降序
- PS
- 如果有多个排序条件,只有前面的条件值一样的时候,才会判断第二个条件
6.5、DQL查询数据-复杂查询(聚合函数)
-
上面我们做的查询都是横向查询,它们都是根据条件一行一行地进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值
-
聚合函数的使用
- SELECT 聚合函数(字段名) FROM 表名;
-
常用的聚合函数
-
函数名称 功能 COUNT 统计指定列记录数 SUM 计算指定列的数值和 MAX 计算指定列的最大值 MIN 计算指定列的最小值 AVG 计算指定列的平均值(average)
-
-
使用聚合函数的注意事项
- 记录为NULL的数据不统计
- 如果不是数值类型,那么计算结果为0
6.6、DQL查询数据-复杂查询(分组)
- 分组语法
- SELECT * FROM 表名 [WHERE 查询条件] GROUP BY 字段名 [HAVING 分组条件]
- 注意事项
- 分组之后,查询的字段分为分组字段和聚合函数,查询其他字段无任何意义,甚至可能会报错
- HAVING 和 WHERE 的区别
- WHERE是在分组前对数据进行过滤,HAVING 是在分组后对数据进行过滤
- where后面不可以使用聚合函数,HAVING后面可以使用聚合函数
6.7、DQL查询数据-复杂查询(分页)
- LIMIT语句的作用
- LIMIT是限制的意思,LIMIT的作用就是获取部分查询的数据
- LIMIT语句格式
- SELECT * FROM 表名 LIMIT offset, length;
- offset是指偏移量,可以认为是跳过的记录数量,不写则默认为0
- length是指需要显示的总记录数
- SELECT * FROM 表名 LIMIT offset, length;
- example
- SELECT * FROM goods limit 2,3;
- Tips
- 分页查询LIMIT是MySQL数据库的'方言';
- Oracle分页查询使用rownumber
- SQL Server分页查询使用top
课后练习注意事项
1、DDL 修改表和DML 修改表的差别
1.1、DDL:
-
修改表名
- ALTER TABLE 表名 RENAME TO 新表名;
-
单独添加一个字段
- ALTER TABLE 表名 ADD 字段名 数据类型;
-
修改某字段的数据类型
- ALTER TABLE 表名 MODIFY 字段名 新数据类型;
-
修改字段名和数据类型
- ALTER TABLE 表名 CHANGE 字段名 新字段名 新数据类型;
1.2、DML:
- 修改表中的数据
- UPDATE 表名 SET 字段名=新的值 [WHERE 条件];
- 修改语句中必须加条件,如果不加条件,则会将所有数据都修改
1.3、差别
- 差别就是DDL只是修改字段的名称;而DML是修改字段下的数据(属性)
- 对应Day01-MySQL基础课后习题
2、MySQL删除表中的字段(这是DDL操作,注意区别DML操作中的删除字段的值
- 删除student表中的字段intro
- alter table student drop intro;
- 对比
- 删除student表中的字段intro的值
- delete intro from student [where 条件] // 如果不加条件,intro字段的所有数据都会被删除
- 额外练习01,倒数第二个问题
3、MySQL中的DML操作(一次修改多列)
- 一次修改多个列,把id为3的学生,生日改成1988-08-08,address改成北京
- 一次修改一列
- update 表名 set 字段名 = 新值 [where 条件];
- 一次修改多列
- update 表名 set 字段名 = 新值 [, 字段名 = 新值][where 条件];
- 额外练习-02-增删改数据
4、组合排序
- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
- 单个排序查询
- select * from student order by age desc;
- 多个排序查询
- select * from student order by age desc, math desc;(前一个排序的字段的值一样,才会进行下一个排序)
文章评论