【Web前端第二阶段–数据库】–Day01
【Web前端第二阶段–Html】Day01
【Web前端第二阶段–Html】Day02
【Web前端第二阶段–CSS】Day03
【Web前端第二阶段–CSS高级】Day04
【Web前端第二阶段–CSS高级】Day05
前言
所用到的sql数据文件
软件的生命周期
软件的定义期
可行性研究阶段/需求实现阶段
软件的开发期
概要设计阶段/详细设计阶段/编码实现阶段/测试阶段
软件的维护期
部署阶段
维护阶段
功能需求分析
前台子系统:
商品模块:首页、列表、详情
用户模块:注册、登录、用户中心、个人收藏、退出
购物车模块:添加、列表、修改、删除、下单结算
后台子系统:
商品模块:添加、列表、修改、删除、搜索
用户模块:列表、修改、删除、搜索
订单模块:列表、修改、删除、搜索
移动端子系统
商品模块:首页、列表、详情
用户模块:注册、登录、用户中心、个人收藏、退出
购物车模块:添加、列表、修改、删除、下单结算
数据的存储方式
文件/内存/第三方服务器/数据库服务器
数据库
数据库发展历史
网状数据库->层次数据库->关系型数据库(SQL)->非关系性数据库
关系型数据库
serve > database > table > row > column
mysql
mysql 部署结构
服务器端:负责存储维护数据–银行数据库服务器
客户端:负责连接数据库服务器,对数据进行操作
使用客户端连接服务器
mysql.exe -h127.0.0.1 -p3306 -uroot -p
-h host 主机 要连接的服务器 自己的电脑localhost/127.0.0.1
-P port 端口
-u user 用户名 mysql默认管理员用户root
-p 密码
简写 mysql -uroot
常用的管理命令
show databases; 显示所有数据库
quit 退出连接
use 数据库名称 进入当前数据库
show tables; 显示当前数据库所有的数据表
desc 数据表名
SQL命令
SQL:结构化查询语言,专门用于操作关系型数据库服务器
1、执行方式
(1)交互模式:在客户端输入一行,点击回车,服务器就会执行一样
(2)脚本模式:客户端要把执行的命令写在一个脚本中,一次性的提交给服务器执行—适用于批量的操作数据
2、SQL命令语法规范
(1)一条SQL命令可以跨越多行,以英文的分号作为结束
(2)SQL命令不区分大小写,习惯上关键字大写,非关键字小写
(3)假设某一条SQL命令出现语法错误,则往后所有的命令不在执行
(4)分为单行注释(#)和多行注释(/**/),注释的代码不在执行
常用sql命令
1、丢弃数据库,如果存在
drop database if exists 数据库名称
2、创建新的数据库
create database 数据库名称;
3、进入创建的数据库
use 数据库名称
4、创建数据表
create table 数据库名称(
列名称:类型
列名称:类型
…
)
5、插入数据
insert into 数据表名称 values(值1,值2,…);
6、查询数据
select * from 数据表名称;
7、更新数据
update 数据表 set 列名=‘值’… where 条件=‘值’;
8、删除数据
delete from 表名 where 所删除的行=“值”
计算机如何存储字符
1、如何存储英文字符
ASCII:对英文字符进行编码,总共有128个
Latin-1:对欧洲字符进行编码,总共有256个,兼容ASCII
2、如何存储中文字符
GB2312:对常用6000多个汉字进行编码,兼容ASCII
GBK:对2万多汉字进行编码,兼容GB2312
BIG5:台湾繁体字编码
Unicode:对世界主流国家常用语言进行编码,分为三种存储方案:utf-8,utf-16,utf-32
麻将
3、mysql中文乱码的原因
mysql默认使用Latin-1编码
4、解决中文乱码
1) 脚本文件另存为的编码为utf-8
2)客户端连接服务器端的编码为utf-8
set names utf8
3)服务器端创建数据库使用的存储编码为utf-8
charset=utf8
列类型
数值型
tinyint 微整型,占1个字节,范围-128-127
smallint 小整型 ,占2个字节,范围 -32768~32767
int 整型 占4个字节,范围-2147483648~2147483647
bigint 大整型 占8字节,范围很大
float 单精度浮点型,占4个字节,以牺牲小数点后的位数为代价,存储的数字越大,精度越低
double 双精度浮点型,占8个字节,以牺牲小数点后的位数为代价,存储的数字越大,精度越低
decimal(M,D) 定点小数,小数点不会发生变化,M代表总的有效位数,D代表小数点后的有效位数
boolean 布尔型,只有两个值,分别是true和false,代表真和假;常用于存储只有两个值的数据,例如:是否在线、性别、是否为会员…
日期时间型 —— 值必须加引号
date 日期型 ‘2022-10-20’
time 时间型 ‘15:29:48’
datetime 日期时间型 ‘2022-10-20 15:29:48’
字符串型 —— 值必须加引号
varchar(M) 变长字符串,不会产生空间浪费,数据操作速度相对慢,常用于存储变化长度的数据,例如:文章标题、详情、姓名… M最大值是65535
char(M) 定长字符串,可能产生空间浪费,数据操作速度相对快,常用于存储固定长度的数据,例如:手机号码、身份证号… M最大值是255
列约束
mysql可以对要插入的值进行验证,只有通过的验证才允许插入,例如:编号不能重复,性别只能是男或者女,工资的值只能是正数。
主键约束–primary key
声明了主键约束列上,不允许插入重复的值,一个表中只能有一个主键约束,通常加在编号列,还可以加快数据的查询速度
- null:空,表示一个暂时无法确定的值,例如:暂时无法确定商品的上架时间,价格;暂时无法确定一个员工的手机号码…
- 是一个关键字,使用的时候不能加引号
- 主键约束的列禁止插入 null
非空约束–not null
- 声明了非空约束的列,禁止插入null
唯一约束—unique
- 声明唯一约束的列,不允许插入重复的值,一个表中可以有多个唯一约束,唯一约束允许插入null
约束的影响
- #一次插入多条数据,主键约束下,null插入的话变成0了
- #唯一约束可能会影响到排序,后边使用排序解决
- #两个null是不等,所以允许插入多个null
- #如果给字符串列设置唯一约束,插入null的话,变成了空字符串(‘’)
默认值约束—default
使用default关键字设置默认值,如果列中没有设置默认值,则默认值为null
1)设置默认值
使用default关键字设置默认值,如果列中没有设置默认值,则默认值为null
2)应用默认值
-
插入值的时候,不提供,直接使用default就会应用默认值
insert into 数据表名称 values(...default...);
-
插入值的时候,给指定的列提供值,没有出现的列自动应用默认值
insert into 数据表名称(列名称1, 列名称2) values(值1, 值2);
检查约束–check
也称为自定义约束,用户可以自己添加约束条件
create table student( score tinyint check(score>=0 and score<=100) );
- mysql不支持检查约束,认为会严重影响到数据的插入速度;后期由JS可以完成
外键约束
- 声明了外键约束的列,插入的值必须在另一个表的主键列中出现过;
- 外键列和对应的主键列的类型要保持一致
- 外键约束允许插入null
foreign key(外键列) references 另一个表(主键列)
外键约束目的是为了让两个表之间 建立关联
自增列
auto_increment:自动增长,如果设置了自增列,插入数据的时候,只需要赋值为null,就会获取最大值然后加1插入
- 自增列必须添加在主键上
- 自增列允许手动赋值
简单查询
查询特定的列
示例:查询出所有员工的编号和姓名
select eid,ename from emp;
练习:查询出所有员工的姓名,性别,生日,工资
select ename,sex,birthday,salary from emp;
查询所有列
select eid,ename,sex,birthday,salary,deptid from emp;
select * from emp;
给列起别名
示例:查询出所有员工的编号和姓名,使用一个字母作为别名
select eid as a,ename as b from emp;
练习:查询出所有员工的姓名,性别,工资,使用一个字母作为别名
select ename a,sex b,salary c from emp;
显示不同记录
4.显示不同的记录
示例:查询出都有哪些性别的员工
select distinct sex from emp;
练习:查询出员工都分布在哪些部门(查询不同的所属部门编号)
select distinct deptid from emp;
查询时执行计算
示例:查询出所有员工的姓名及其年薪
select ename,salary*12 from emp;
练习:假设每个员工的工资增长2000,年终奖30000,查询出所有员工的姓名及其年薪,使用一个字母作为别名
select ename a,(salary+2000)*12+30000 b from emp;
查询结果排序
示例:查询出所有的部门,结果按照部门编号升序排列
select * from dept order by did asc; #ascendant 升序的
示例:查询出所有的部门,结果按照部门编号降序排列
select * from dept order by did desc;
desc -> describe 描述
desc -> descendant 降序的
条件查询
> < >= <= = !=(不等于)
is null 查找某一列为null
is not null 查找某一列不为null
说明:找null和非null只能使用以上方法
and(&&) 并且,要求两个条件都满足
or(||) 或者,要求两个条件满足其一
in() 等于其中一个值
not in() 不等于每一个值
模糊查询
示例:查询出姓名中含有字母e的员工有哪些
select * from emp where ename like '%e%'; #网站搜索的写法
练习:查询出姓名中以e结尾的员工有哪些
select * from emp where ename like '%e';
练习:查询出姓名中倒数第2个字符是e的员工
select * from emp where ename like '%e_';
% 匹配任意个字符 >=0
_ 匹配任意一个字符 =1
以上两个匹配符号必须结合着like
分页查询
查询的结果中有太多的数据,一次显示不完可以做成分页
需要有两个已知条件:当前页码、每页数据量
开始查询的值=(当前页码-1)*每页的数据量
select *from emp limit 开始查询的值,每页的数据量
注意
limit 后开始查询的值,只能写计算结果,不能写计算过程;
limit后的两个值必须是数值,不能加引号;
复杂查询
1、聚合查询/分组查询
示例:查询出所有员工的数量
select count(*) from emp;
函数:是一个功能体,需要提供若干数据,返回结果。
聚合函数
count() / sum() / avg() / max() / min()
分组查询通常只查询聚合函数和分组条件—group by
获取日期中的年份
select year('1993-8-7');
子查询
子查询就是多个查询命令的组合,把一个的结果作为另一个的条件使用。
多表查询
查询的数据分布在多个表中,前提是前提是表之间已经建立了关联
(1)内连接
select ename,dname from emp inner join dept on deptid = did;
显示符合条件的
(2)左外连接
select ename ,dname from emp left outer join dept on deptid = did
显示主表中所有的数据
(3)右外连接
select ename ,dname from emp right outer join dept on deptid = did
显示副表中所有的数据
左外连接和右外连接中可以省略outer 关键字
(4)全连接
full join on
mysql 不支持全连接
将左外连接和右外连接联合起来,合并相同记录
union 联合后,合并相同的记录
union all 联合后 不合并相同记录