【Web前端第一阶段--数据库】--Day01

【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 联合后 不合并相同记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值