|
一、学习内容
1、数据库的基本概念
2、DDL 操作数据库和数据表
3、DML 表数据的增删改
4、DQL 表数据查询
5、约束
1、数据库的基本概念
什么是数据库?
用于存储和管理数据的仓库
英文单词为:DataBase,简称DB
数据库的好处?
可以持久化存储数据
方便存储和管理数据
使用了统一的方式操作数据库-- SQL
常见的数据库有哪些?

MySQL 数据库介绍
小型的数据库
开源免费(6 版本之前免费)
所属于Oracle 公司
SQL 语句
数据库、数据表、数据的关系介绍
数据库
用于存储和管理数据的仓库
一个库中可以包含多个数据表
数据表
数据库最重要的组成部分之一
它由纵向的列和横向的行组成(类似excel 表格)
可以指定列名、数据类型、约束等
一个表中可以存储多条数据
数据
想要永久化存储的数据

SQL 介绍
什么是SQL
Structured Query Language:结构化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式可
能会存在一些不一样的地方,我们称为“方言”。
SQL 通用语法
SQL 语句可以单行或多行书写,以分号结尾。
可使用空格和缩进来增强语句的可读性。
MySQL 数据库的SQL 语句不区分大小写,关键字建议使用大写。
数据库的注释:
单行注释:-- 注释内容#注释内容(mysql 特有)
多行注释:/* 注释内容*/
SQL 分类
DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等
DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等
DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等
DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

2、DDL-操作数据库
新建数据库连接




R(Retrieve):查询
查询所有数据库: SHOW DATABASES;

查询某个数据库的创建语句
1. -- 标准语法
2. SHOW CREATE DATABASE 数据库名称;
3. 查看mysql 数据库的创建格式

C(Create):创建
创建数据库
1. -- 标准语法
2. CREATE DATABASE 数据库名称;
3.-- 创建db1 数据库
4. CREATE DATABASE db1;

创建已存在的数据库会报错

创建数据库(判断,如果不存在则创建)
1. -- 标准语法
2. CREATE DATABASE IF NOT EXISTS 数据库名称;
3. -- 创建数据库db2(判断,如果不存在则创建)
4. CREATE DATABASE IF NOT EXISTS db2;

创建数据库、并指定字符集
1. -- 标准语法
2. CREATE DATABASE 数据库名称CHARACTER SET 字符集名称;
3. -- 创建数据库db3、并指定字符集utf8
4. CREATE DATABASE db3 CHARACTER SET utf8;
5. -- 查看db3 数据库的字符集

练习:创建db4 数据库、如果不存在则创建,指定字符集为gbk

U(Update):修改
修改数据库的字符集
1. -- 标准语法
2. ALTER DATABASE 数据库名称CHARACTER SET 字符集名称;
3. -- 修改数据库db4 的字符集为utf8
4. -- 查看db4 数据库的字符集

D(Delete):删除
删除数据库
1. -- 标准语法
2. DROP DATABASE 数据库名称;
3.-- 删除db1 数据库

删除一个不存在的数据库会报错 -- 错误代码:1008 Can't drop database 'db1'; database doesn't exist

删除数据库(判断,如果存在则删除)
1. -- 标准语法
2. DROP DATABASE IF EXISTS 数据库名称;
3. -- 删除数据库db2,如果存在 (首先判断数据库是否存在 存在就删除)

使用数据库
查询当前正在使用的数据库名称
1. -- 查询当前正在使用的数据库
2. SELECT DATABASE();

使用数据库
1. -- 标准语法
2. USE 数据库名称;
3. -- 使用db4 数据库

DDL-操作数据表
R(Retrieve):查询
查询数据库中所有的数据表
1. -- 使用mysql 数据库

2. -- 查询库中所有的表

查询表结构
1. -- 标准语法
DESC 表名;
2. -- 查询user 表结构

查询表字符集
1. -- 标准语法
2. SHOW TABLE STATUS FROM 库名LIKE '表名';
3. -- 查看mysql 数据库中user 表字符集

C(Create):创建
创建数据表
标准语法
CREATE TABLE 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
-- 注意:最后一列,不需要加逗号
数据类型
1. int:整数类型
* age int
2. double:小数类型
* score double(5,2)
* price double
3. date:日期,只包含年月日yyyy-MM-dd
4. datetime:日期,包含年月日时分秒yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型包含年月日时分秒yyyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
* name varchar(20):姓名最大20 个字符
* zhangsan 占8 个字符 张三 占2 个字符
创建数据表
1. -- 使用db3 数据库

2. -- 创建一个product 商品表

复制表
1. -- 标准语法
2. CREATE TABLE 表名LIKE 被复制的表名;
3. -- 复制product 表到product2 表

U(Update):修改
修改表名
1. -- 标准语法
2. ALTER TABLE 表名 RENAME TO 新的表名;
3. -- 修改product2 表名为product3

修改表的字符集
1. -- 标准语法
2. ALTER TABLE 表名CHARACTER SET 字符集名称;
3. -- 查看db3 数据库中product3 数据表字符集

4. -- 修改product3 数据表字符集为gbk
5. -- 查看db3 数据库中product3 数据表字符集

添加一列
1. -- 标准语法
2. ALTER TABLE 表名ADD 列名数据类型;
3. -- 给product3 表添加一列color

修改列名称和数据类型
1. -- 修改数据类型标准语法
2. ALTER TABLE 表名MODIFY 列名新数据类型;
3. -- 将color 数据类型修改为int

4. -- 修改列名和数据类型标准语法
5. ALTER TABLE 表名CHANGE 列名新列名新数据类型;
5. -- 将color 修改为address,数据类型为varchar

删除列
1. -- 标准语法
2. ALTER TABLE 表名DROP 列名;
3. -- 删除address 列

删除同理 删除一个不存在的表会报错

删除数据表(判断,如果存在则删除)
1. -- 标准语法
2. DROP TABLE IF EXISTS 表名;
3. -- 删除product3 表,如果存在则删除

DML-INSERT 语句
新增表数据语法
新增格式1:给指定列添加数据
2. INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);

3. -- 向product 表添加指定列数据
4. INSERT INTO product (id,NAME,price) VALUES (2,'电脑',4999);

新增格式2:默认给全部列添加数据
1. -- 标准语法
2. INSERT INTO 表名VALUES (值1,值2,值3,...);

新增格式3:批量添加数据
1. -- 默认添加所有列数据标准语法
2. INSERT INTO 表名VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值,...);

3. -- 给指定列添加数据标准语法
4.. INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);

注意事项
列名和值的数量以及数据类型要对应
除了数字类型,其他数据类型的数据都需要加引号(单引双引都可以,推荐单引)
DML-UPDATE 语句
修改表数据语法
1. -- 标准语法
2. UPDATE 表名SET 列名1 = 值1,列名2 = 值2,... [where 条件];

下面是 未添加条件的结果

修改电视的价格和库存

修改电磁炉的库存

注意事项
修改语句中必须加条件
如果不加条件,则将所有数据都修改
DML-DELETE 语句
删除表数据语法
1. -- 标准语法
2. DELETE FROM 表名[WHERE 条件];
3. -- 删除product 表中的微波炉信息

4.-- 删除库存

注意事项
删除语句中必须加条件
如果不加条件,则将所有数据删除
DQL-单表查询
准备数据
-- 创建数据库
CREATE DATABASE db7;
-- 使用数据库
USE db7;
-- 创建表单
CREATE TABLE product(
-- 商品编号
id INT,
-- 商品名称
NAME VARCHAR(20),
-- 商品价格
price DOUBLE ,
-- 商品品牌
brand VARCHAR(10),
-- 商品库存
stock INT,
-- 添加时间
insert_time DATE
);
-- 添加表单数据
INSERT INTO product VALUES
(1,'华为手机',3999,'华为',23,'2088-03-10'),
(2,'小米手机',2999,'小米',30,'2088-05-15'),
(3,'苹果手机',5999,'苹果',18,'2088-08-20'),
(4,'华为电脑',6999,'华为',14,'2088-06-16'),
(5,'小米电脑',4999,'小米',26,'2088-07-08'),
(6,'苹果电脑',8999,'苹果',15,'2088-10-25'),
(7,'联想电脑',7999,'联想',NULL,'2088-11-11');
-- 查询表单数据
SELECT * FROM product;
查询语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定查询全部
1. -- 标准语法
2. SELECT * FROM 表名;

查询部分
多个字段查询
1. -- 标准语法
2. SELECT 列名1,列名2,... FROM 表名;

去除重复查询
注意:只有全部重复的才可以去除
1. -- 标准语法
2. SELECT DISTINCT 列名1,列名2,... FROM 表名;


计算列的值(四则运算)
1. -- 标准语法
2. SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
3.
4. /*
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)
表达式1:想替换的列
表达式2:想替换的值
*/
查询商品名称和库存,库存数量在原有基础上加10
但是 有商品的库存为 null 还会加 10 吗?

结果是不会

处理办法 进行 null值判断 如果查询到的值为 null 则先赋值为 0 然后进行运算

起别名
1. -- 标准语法
2. SELECT 列名1,列名2,... AS 别名FROM 表名;

起别名不加 AS 的效果一样

条件查询
条件分类
符号功能
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<> 或!= 不等于
BETWEEN ... AND ... 在某个范围之内(都包含)
IN(...) 多选一
LIKE 占位符模糊查询_单个任意字符%多个任意字符
IS NULL 是NULL
IS NOT NULL 不是NULL
AND 或&& 并且
OR 或|| 或者
NOT 或! 非,不是
条件查询语法
1. -- 标准语法
2. SELECT 列名FROM 表名WHERE 条件;
-- 标准语法
-- SELECT 列名FROM 表名WHERE 条件;
-- 查询库存大于20 的商品信息
SELECT * FROM product WHERE stock > 20;
-- 查询品牌为华为的商品信息
SELECT * FROM product WHERE brand = &#39;华为&#39;;
-- 查询金额在4000 ~ 6000 之间的商品信息
SELECT * FROM product WHERE price >= 4000 AND price <= 6000;
SELECT * FROM product WHERE price BETWEEN 4000 AND 6000;-- BETWEEN 区间函数
-- 查询库存为14、30、23 的商品信息
SELECT * FROM product WHERE stock = 14 OR stock = 30 OR stock = 23;
SELECT * FROM product WHERE stock IN(14,30,23);
-- 查询库存为null 的商品信息
SELECT * FROM product WHERE stock IS NULL;
-- 查询库存不为null 的商品信息
SELECT * FROM product WHERE stock IS NOT NULL;
-- 查询名称以小米为开头的商品信息
SELECT * FROM product WHERE NAME LIKE &#39;小米%&#39;;
-- 查询名称第二个字是为的商品信息
SELECT * FROM product WHERE NAME LIKE &#39;_为%&#39;;
-- 查询名称为四个字符的商品信息
SELECT * FROM product WHERE NAME LIKE &#39;____%&#39;;
-- 查询名称中包含电脑的商品信息
SELECT * FROM product WHERE NAME LIKE &#39;%电脑%&#39;;
聚合函数
将一列数据作为一个整体,进行纵向的计算
聚合函数分类

聚合函数语法
1. -- 标准语法
2. SELECT 函数名(列名) FROM 表名[WHERE 条件];
-- 聚合函数语法
-- 1. -- 标准语法
-- 2. SELECT 函数名(列名) FROM 表名[WHERE 条件];
-- 计算product 表中总记录条数
SELECT COUNT(*) FROM product ;
-- 获取最高价格
SELECT MAX(price) FROM product ;
-- 获取最高价格的商品名称
SELECT NAME ,price FROM product WHERE price = (SELECT MAX(price) FROM product);
-- 获取最低库存
SELECT MIN(brand) FROM product ;
-- 获取最低库存的商品名称
SELECT NAME ,brand FROM product WHERE brand = (SELECT MIN(brand) FROM product);
-- 获取总库存数量
SELECT SUM(stock) FROM product;
-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand=&#39;苹果&#39;;
-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand=&#39;小米&#39;;
排序查询
排序分类
注意:多个排序条件,当前边的条件值一样时,才会判断第二条件

排序语法
1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;



分组查询
1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] GROUP BY 分组列名[HAVING 分组后条件过滤] [ORDER BY 排序列名排序方式];




分页查询
1. -- 标准语法
2. SELECT 列名FROM 表名[WHERE 条件] GROUP BY 分组列名[HAVING 分组后条件过滤] [ORDER BY 排序列名排序方式] LIMIT 开始索引,查询条数;
3. -- 公式:开始索引= (当前页码-1) * 每页显示的条数
分页查询图解
总页

每页显示2 条数据
-- 每页显示2 条数据
SELECT * FROM product LIMIT 0,2; -- 第一页开始索引=(1-1) * 2
SELECT * FROM product LIMIT 2,2; -- 第二页开始索引=(2-1) * 2
SELECT * FROM product LIMIT 4,2; -- 第三页开始索引=(3-1) * 2
SELECT * FROM product LIMIT 6,2; -- 第四页开始索引=(4-1) * 2




约束
约束的概念和分类
约束的概念
对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束的分类
PRIMARY KEY 主键约束
PRIMARY KEY AUTO_INCREMENT 主键、自动增长
UNIQUE 唯一约束
NOT NULL 非空约束
FOREIGN KEY 外键约束
FOREIGN KEY ON UPDATE CASCADE 外键级联更新
FOREIGN KEY ON DELETE CASCADE 外键级联删除
主键约束
主键约束特点
1、主键约束包含:非空和唯一两个功能
2、一张表只能有一个列作为主键
3、主键一般用于表中数据的唯一标识
建表时添加主键约束
-- 标准语法
CREATE TABLE 表名(
列名数据类型PRIMARY KEY,
列名数据类型,
...
);

添加主键约束时 再添加 null 的数据会报错

正确添加方法

因为主键的唯一性 如果重复添加 会报错

主键不为重复添加成功

删除主键
1. -- 标准语法
2. ALTER TABLE 表名DROP PRIMARY KEY;


建表后单独添加主键
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型PRIMARY KEY;


主键自动增长约束
建表时添加主键自增约束
-- 标准语法
CREATE TABLE 表名(
列名数据类型PRIMARY KEY AUTO_INCREMENT,
列名数据类型,
...
);


删除自动增长
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型;
删除自增长后 无法添加 为 null 的数据

添加不为null 的数据后不报错

建表后单独添加自动增长
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型AUTO_INCREMENT;

建表时添加唯一约束
-- 标准语法
CREATE TABLE 表名(
列名数据类型UNIQUE,
列名数据类型,
...
);

添加数据

添加重复数据会报错

添加不重复数据

删除唯一约束
1. -- 标准语法
2. ALTER TABLE 表名DROP INDEX 列名;

建表后单独添加唯一约束
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型UNIQUE;
添加约束后 如果添加重复元素会报错

非空约束
建表时添加非空约束
-- 标准语法
CREATE TABLE 表名(
列名数据类型NOT NULL,
列名数据类型,
...
);

添加为null的数据会报错

添加 不为 null 的数据正常

删除非约束
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型;

建表后单独添加非空约束
1. -- 标准语法
2. ALTER TABLE 表名MODIFY 列名数据类型NOT NULL;
 |
|