福田外贸网站建设,学生个人主页模板,网站建站系统程序,html网页制作背景图片MySQL
1、数据库技术概述
数据库database#xff1a;存放和管理各种数据的仓库#xff0c;操作的对象主要是【数据data】#xff0c;科学的组织和存储数据#xff0c;高效的获取和处理数据SQL#xff1a;结构化查询语言#xff0c;专为**关系型数据库而建立的操作语言存放和管理各种数据的仓库操作的对象主要是【数据data】科学的组织和存储数据高效的获取和处理数据SQL结构化查询语言专为**关系型数据库而建立的操作语言用户在使用SQL语句时只需要发出“做什么”**的命令具体“怎么做”是不用参与的。
解释关系型数据库指的是这一类数据库对于数据的存储和管理方式都是以【表】的形式来组织的关系表
比如MySQLOracleSQL Server系统的数据库——关系型数据库——都是以【表】的形式来存储和管理数据
MySQL数据库特征 体积小消耗资源较少速度快处理数据的速度较快成本低开源免费技术成本投入比较便宜可移植性又被称为跨平台性可以在多个操作系统中进行使用
2、MySQL数据库的安装与配置
MySQL安装参考安装文档验证MySQL数据库安装完毕后可以借助于自带的【命令行工具】进行操作MySQL数据库的卸载控制面板——卸载程序——找到MySQL组件两个——右键选择卸载MySQL数据库的连接操作 自带的【命令行工具】进行连接使用连接MySQL数据库的工具HeiDiSQL
3、MySQL数据库的创建与删除
创建数据库的语法
creat database 数据库名;
例创建一个testdb01的数据库
create database testdb01;
查看现有的数据库
show databases;
删除数据库语法
drop database 数据库名字;
MySQL注释解释说明作用不参与执行
单行注释- - 单行注释的内容
多行注释/* 多行注释的内容 */
4、MySQL数据库表的操作 创建表语法
create table 表名
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
…
列名n 数据类型
;
注意最后一个列不需要加逗号 MySQL支持的数据类型 数值型 整数类型tinyint微整型 smallint小整型 int整型MySQL默认 bigint大整型 小数类型又被称为“浮点型”decimal(总位数,小数位)MySQL默认 例价格 decimal(5,2) 999.99 float(总位数,小数位) double(总位数,小数位) 日期时间类型 date 年月日yyyy–mm–dd time 时间hh:mm:ss year 年份yyyy datetime 日期时间MySQL默认 字符串类型 char(长度)定长字符串类型如果传递的数据值长度未达到指定长度系统会用空格给占用不会做释放 例name char(10)——tom3个字符还有7个字符长度空间未利用系统直接给空格占用 varchar(长度)变长字符串类型如果传递的数据值长度未达到指定长度系统直接释放不会占用 例name varchar(10)——tom3个字符剩下7个字符长度空间直接释放 创建表的操作 每一张表的创建一定找好它所属的数据库 切换数据库语法use 数据库名字; 经过切换之后就来到了指定的数据库下进行操作 表创建创建一个学生信息表(学号 字符串15姓名 字符串20年龄 整数入学年份 year) 练习a.创建一个学校的数据库schooldb b.切换到学校的数据库进行以下列表的创建 b.1创建student表sno 字符串类型15sname 字符串10sage 微整型入学时间 日期时间类型 b.2创建选课表学号 字符串类型15课程号 字符串类型5成绩 整型 b.3创建教师表教师编号 字符串10教师姓名 字符串类型10专业 字符串类型8薪资 小数类型8,2入职年份year 删除表语法
drop table 表名1,表名2…; 修改表结构alter table 系列语句 添加列 alter table 表名 add 列名 数据类型; 删除列 alter table 表名 drop 列名; 修改列的数据类型 alter table 表名 modify 列名 新的数据类型; 修改列名 alter table 表名 change 旧列名 新列名 数据类型(新的数据类型); 显示表结构desc 表名; 数据库常见的专业名词
关系表 例一个关系——一张表
关系名表名
表中的行元组记录 例表中有3个元组——3行数据/3条记录
表中的列属性字段 例表中有3个字段——3个属性/3个列
表中的列名属性名字段名
表中的值属性值字段值 回顾 SQL结构化查询语言
库的操作
创建create database 数据库名字;
查看show databases;
删除drop database 数据库名字;
切换use 数据库名字;
表的操作
创建create table 表名(
列名1 数据类型,
…
列名n 数据类型
);
删除drop table 表名;
修改alter table 表名; 系列语句
添加add 列名 数据类型;
删除列 drop 列名;
修改列的数据类型 modify 列名 新的数据类型;
修改列名 change 旧列名 新列名 新的数据类型;
显示表结构desc 表名;
5、表中约束的使用
约束(给一张表添加)限制要求规则…… 为了保证数据库表中数据的完整性(指的是存储在数据库表中的数据是准确的和可靠的)就引入了约束的应用。 关系的完整性约束 为了实现表结构以及表中数据的完整性约束可以从三个角度来考虑约束的分类实体完整性约束域完整性约束参照完整性约束。 实体完整性约束 思想保证表中数据的唯一性至少不会出现重复的数据 提供的两个约束主键约束唯一约束 主键约束 primary key 最多有一个 ①思想唯一不重复不为空 ②创建表的同时关联主键约束 格式一 create table 表名( 列名1 数据类型 primary key, 列名2 数据类型 ); 格式二 create table 表名( 列名1 数据类型, 列名2 数据类型, constraint 主键约束的名字 primary key(列名1) ); 备注主键约束的名字如果需求给了我们直接照搬使用如果没给名字名字自定义PK_列名 constraint约束 格式三 create table 表名( 列名1 数据类型, 列名2 数据类型, primary key(列名1) ); ③针对已经存在的表关联主键约束 格式一alter table 表名 add primary key(列名); 格式二alter table 表名 add constraint 主键约束的名字 primary key(列名); 格式三alter table 表名 modify 列名 数据类型 primary key; ④删除主键约束 格式alter table 表名 drop primary key; 联合主键 ①思想本质上还属于主键约束只不过primary key变成修饰两个列的操作把这两个列看成是一个整体共同遵守主键约束的特性唯一不重复不为空 ②创建表的同时关联联合主键 格式二 create table 表名( 列名1 数据类型, 列名2 数据类型, constraint 主键约束的名字 primary key(列名1,列名2) ); 格式三 create table 表名( 列名1 数据类型, 列名2 数据类型, primary key(列名1,列名2) ); ③针对已经存在的表关联联合主键 格式一alter table 表名 add primary key(列名1,列名2); 格式二alter table 表名 add constraint 主键约束的名字 primary key(列名1,列名2); 注意一个表中不管是单列的主键约束还是联合主键有且只能有一个它俩是互斥的 练习 a.创建选课表学号姓名课程号课程名课时其中学号和课程号设置为联合主键主键名为PK_NO b.创建考勤表学号出勤时间上课时长其中学号和出勤时间设置为联合主键 c.针对已经存在的任意两张表选择任意两列添加联合主键 d.删除任意两张表中的联合主键 唯一约束 unique ①思想保证数据的唯一性不允许有重复的值但是可以有空值一个表中可以有多个唯一约束如果不给唯一约束起名字默认和列名保持一致 ②创建表的同时关联唯一约束 格式一 create table 表名( 列名1 数据类型 unique, 列名2 数据类型 unique, 列名3 数据类型 ); 格式二 create table 表名( 列名1 数据类型, 列名2 数据类型, 列名3 数据类型, constraint 唯一约束的名字 unique(列名1), constraint 唯一约束的名字02 unique(列名2) ); 备注唯一约束的名字如果需求给了我们直接照搬使用如果没给可以自定义UN_列名 ③针对已经存在的表关联唯一约束 格式alter table 表名 add unique(列名); ④删除唯一约束 格式alter table 表名 drop index 唯一约束的名字; 练习 a.创建一个电影表电影编号 主键约束电影片名 唯一约束时长类别 唯一约束 b.创建一个商品表商品编号 主键约束PK_编号商品名称 唯一约束UN_名称价格 c.针对已经存在的表任意选择两个找出合适的列添加唯一约束 d.删除任意两张表的唯一约束 域完整性约束 思想保证表中不会输入无效的值提供了两个约束默认约束非空约束 默认约束 default ①思想表中的列如果设置有默认约束那么该列不进行填充数据时就会把默认值直接补上一个表中可以有多个默认约束 ②创建表的同时关联默认约束 create table 表名( 列名1 数据类型 default 默认值, 列名2 数据类型 default 默认值, 列名3 数据类型 ); 备注如果默认的值是数字就直接写数据是字符串或日期时间需要加上引号单双引号都可 ③针对已经存在的表关联默认约束 格式alter table 表名 modify 列名 数据类型 default 默认值; ④删除默认约束 格式alter table 表名 modify 列名 数据类型; 练习 a.创建一张表tempStudent包括snosnamesdeptsage四 列为sno添加主键、sname唯一、sdept默认”软件测试” sage非空约束 b.找到任意一张表给任意一个列添加默认约束 c.删除tempStudent表的sdept默认约束 非空约束 not null 思想不能有空的情况一个表中可以有多个非空约束 ①创建表的同时关联非空约束 create table 表名( 列名1 数据类型 not null, 列名2 数据类型 not null, 列名3 数据类型 ); ②针对已经存在的表关联非空约束 格式alter table 表名 modify 列名 数据类型 not null; ③删除非空约束 格式alter table 表名 modify 列名 数据类型; 练习 a.创建一个订单表订单编号 主键约束订单名称 非空约束手机号 唯一约束收货地址 默认是河南 b.针对已有的表找到其中一个列设置为非空约束 c.删除任意一个表中的非空约束 回顾 主键约束primary key唯一不重复不为空——最多只能有一个
唯一约束unique不允许有重复的值可以有空值
默认约束default默认值会进行填充
非空约束not null不能有空值 参照完整性约束外键约束 foreign key
①思想针对两张表来进行的操作他会把其中的一张表看成是【主表】另外一张表看成是【从表】从表参照主表主表与从表之间建立参照关系实质上是通过两个表中公有的列来完成的通过从表中的列参照引用主表中的列建立起联系列名可以不一致但是列的数据类型和内容保持一致外键约束是建立在从表的列中主表中被参照引用的列必须是主键约束或唯一约束
主表与从表一旦建立起外键约束对从表的限制从表如果想要进行数据的插入操作首先得“询问主表的意见”主表有关联的数据才能允许从表做插入的操作
对主表的限制主表如果想要删除数据需要“询问从表的意见”主表数据被从表正在参照引用那么该数据主表是无法删除的从表中的外键约束也可以有多个一个从表可以参照引用多个主表或者一个主表也可以被多个从表参照引用
加强表与表之间的联系
②创建表的同时关联外键约束
create table 主表表名(
列名1 数据类型 primary key,
列名2 数据类型
);
create table 从表表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
constraint 外键约束的名字 foreign key(从表列名1) references 主表表名(主表列名1),
constraint 外键约束 的名字2 foreign key(从表列名2) references 主表表名2(主表列名2)
);
备注外键约束的名字如果需求给了我们就照搬使用如果没有给自定义名字FK_列名
练习
a.创建工人表工人编号 主键约束姓名年龄
b.创建薪资表工人编号部门薪资其中工人编号参照引用工人表的工人编号
c.创建一张表让该表参照引用已经建立好的任意两张表建立外键约束关系 ③针对已经存在的表来关联外键约束
格式alter table 从表表名 add constraint 外键约束的名字 foreign key(从表列名) references 主表(主表列名);
④删除外键约束
格式alter table 表名 drop foreign key 外键约束的名字;
练习
a.找到其中任意一张表设置外键约束关联另外一张主表
b.删除其中两张表的外键约束 6、插入数据
SQL语言分类
DDL语言数据定义语言create语句alter语句drop语句——实现对库或表的创建修改删除操作
DML语言数据操作/操纵语言insert语句delete语句update语句——实现对表中数据的增删改操作
DQL语言数据查询语言select语句——实现对表中数据的查询操作
insert语句实现对表中数据的插入操作(增加数据)值和列名一定是匹配的(一一对应)
格式一insert into 表名(列名1,列名2,列名3…) values(值1,值2,值3…);
格式二insert into 表名 values(值1,值2,值3…);
格式三insert into 表名 values(值1,值2,值3…),(值1,值2,值3…),(值1,值2,值3…);
备注如果插入的数据是字符串或日期时间需要加引号数字直接写
7、删除数据
delete语句删除表中的数据
删除表中所有的数据delete from 表名;有条件的删除delete from 表名 where 条件;
条件中可以用到的比较运算符
例性别‘男’
例年龄18
例年龄30
例成绩80
例成绩50
! 不等于 例籍贯 !‘北京’
多条件的删除操作
①多个条件同时满足and——where 条件1 and 条件2 and 条件3…;
②多个条件只需要满足其中任意一个or——where 条件1 or 条件2 or 条件3….;
8、更新数据
update语句实现表中数据修改操作
格式一
update 表名 set 列名新值;
格式二
update 表名 set 列名1新值,列名2新值,列名3新值…;
格式三有条件的更新
update 表名 set 列名1值,列名2值 where 条件;
update student set sage18 where ssex‘女’ or sage20;
场景在更新数据的过程中也可以进行计算的操作 回顾 外键约束 foreign key实现两个表之间的参照关系从表插入数据主表删除数据——加强表与表之间的联系数据的增删改
增insert into 表名 values(值1,值2…);
删delete from 表名 where 条件;
改update 表名 set 列名值 where 条件; 9、查询的基本操作
查询select针对数据库表中的数据按照特定的组合条件次序进行检索查看的操作查询的基本语法
select 列名1,列名2,列名3… from 表名;
select字句写的是要查询的列告诉要“查什么”
from字句写的是查询用到的表告诉“从哪查”
查看表中所有的数据select * from 表名; *任意所有
别名查询针对查询结果的标题进行另起名字的操作
格式一
select 列名1 别名1,列名2 别名2,列名3 别名3… from 表名;
格式二as关键字
select 列名1 as 别名,列名 as 别名… from 表名;
去重复查询针对列中重复的数据去重后进行查看显示(将查询的结果去重复之后再显示)
格式select distinct 列名 from 表名;
在查询的过程中也可以进行查询结果的计算操作
格式select 计算公式 别名 from 表名;
选择查询条件查询where子句
格式select 列名 from 表名 where 条件;
①比较搜索条件比较运算符 !
②逻辑运算符and or
③范围搜索条件查询
1.在范围之内的数据between 开始值 and 结束值;
格式select 列名 from 表名 where 列名 between 开始值 and 结束值;
2.排除在范围之内的数据not between 开始值 and 结束值;
格式select 列名 from 表名 where 列名 not between 开始值 and 结束值;
备注开始值和结束值也会参与查询的过程
④列表搜索条件查询
1.匹配列表中的数据(任意一个)in(值1,值2,值3…)
格式select 列名 from 表名 where 列名 in(值1,值2,值3…);
思想只要条件中的列匹配到列表中任意一个值就会有相关的查询结果(记录)
2.排除列表中的数据not in(值1,值2,值3…)
格式select 列名 from 表名 where 列名 not in(值1,值2,值3…);
思想只要是列表中的值都把他们排除在外
⑤模糊查询字符串匹配查询
1.匹配和字符模板相关的数据like ‘字符模板’
格式select 列名 from 表名 where 列名 like ‘字符模板‘;
2.排除和字符模板相关的数据not like ‘字符模板’
格式select 列名 from 表名 where 列名 not like ‘字符模板’;
通配符
% 任意个字符(零个或多个)
_ 单个字符
⑥空值查询
1.查询记录中有为空的信息is null
格式select 列名 from 表名 where 列名 is null;
2.查询记录中不为空的信息is not null
格式select 列名 from 表名 where 列名 is not null;
⑦聚合函数实现对列中数据的计算操作
sum列名 求和
avg列名 求平均值
max列名 最大值
min列名 求最小值
count* 统计元组的个数行数
count列名 统计该列中值的总个数
备注除了count*之外其他聚合函数操作时均忽略空值
格式select 聚合函数 from 表名 where 条件;
⑧行数限定查询limit
格式一select 列名 from 表名 limit 行数; ——–默认从第一行开始查看
格式二select 列名 from 表名 limit 开始位置下标,行数;
⑨分组查询针对查询的结果按照某个列来进行划分分组 group by
格式select 列名,聚合函数 from 表名 group by 列名;
⑩having针对分组后的数据进行条件筛选的操作
备注having的使用必须搭配group by; having后面大部分都是聚合函数当条件where后面不能直接写聚合函数
格式select 列名,聚合函数 from 表名 group by 列名 having 分组的条件;
⑪.排序order by 针对查询的结果按照某个列进行排序升序asc 默认降序desc
格式select 列名 from 表名 order by 列名 asc|desc;
备注聚合函数distinct 列名对列中的值进行去重复后再来进行计算操作
例sum(distinct grade)先对成绩去重然后再来进行求和 回顾 select 列名
from 表名
where 条件
group by 分组的列名
having 分组条件(聚合函数当条件)
order by 排序列名 asc|desc;
去重复distinct
聚合函数sum列名 avg列名 max列名 min列名 count*行的总数量 count列名值的总个数
行数限定limit 10、MySQL常用的函数了解
字符串函数
length() 统计字符串的字节长度
char_length() 统计字符串长度
mid(字符串数据,开始的位置,截取的字符个数)
统计字符串字节长度 一个汉字占3个字节,一个字母占1个字节
数学函数
round()四舍五入
round(数字,保留小数位) 指定保留小数位的四舍五入
round(数字) 保留整数
least(值1,值2,值3…) 求最小值
greatest(值1,值2,值3…) 求最大值
日期时间函数
now() 获取当前日期时间
current_date() 获取当前日期
current_time() 获取当前时间
to_days() 计算总天数(从0开始计算)
dayofyear() 计算该年已过的天数
week() 统计日期所在的周数
控制函数
if(布尔表达式,参数一,参数二) true执行参数一false执行参数二
if(null,参数一,参数二) 直接执行参数二
ifnull(参数一,参数二) 参数一有值直接查询如果为null就查参数二
11、多表查询操作
概述在实际操作过程中我们所需要的数据可能会来源于多张表这个时候就需要进行多表连接实现查询的操作多表查询的实现方式表连接表连接查询的分类内连接查询外连接查询内连接思想只有表与表之间匹配到的数据才会被查询出来
①格式一通过where实现连接
select 表名1.列名1,表名1.列名2,表名2.列名1,表名3.列名1,表名4.列名1…
from 表名1,表名2,表名3,表名4,…
where 表名1.列名表名2.列名 and 表名2.列名表名3.列名 and 表名3.列名表名4.列名… and 其他条件;
②格式二通过**(inner) join on**实现连接 inner可以省略 inner join内连接
select 表名.列名
from 表名1 inner join 表名2
on 表名1.列名表名2.列名 inner join 表名3
on 表名2.列名表名3.列名 inner join 表名4
on 表名3.列名表名4.列名…
where 其他的条件;
备注表与表之间建立连接的列列名可以不一致但是列的数据类型和内容保持一致
可以利用别名对表名进行重命名做替代的操作表明 别名
如果查询的列只在其中的一张表出现那么可以省略表名直接写列名如果查询的列多张表都有一定要加上表名表名.列名条件中的列名前方应该也加上表名表名.列名但是同样遵守以上原则
③多表连接查询做题思想
(1)确定表根据题意描述确定会用到的表
(2)确定表与表之间能够建立连接的列
(3)确定要查询的列
(4)确定是否有额外的条件如果有就关联其他的条件 回顾 多表查询表连接
内连接思想只有表与表之间匹配到的数据才会被查询出来
select 表名.列名
from 表名1,表名2,表名3…
where 表名1.列表名2.列 and 表名2.列表名3.列 and 其他条件;
[inner] join in
select 表名.列名
from 表名1 inner join 表名2
on 表名1.列名表名2.列名 inner join 表名3
on 表明2.列名表名3.列名…
where 其他条件; 备注针对inner join on连接方式可以分为等值连接查询和非等值连接查询判定方式就看条件中除了等号以外是否还有其他的比较运算符
外连接思想至少会返回一个表的所有内容 左外连接会返回左表的所有内容左表的数据在右表中匹配不到默认位置就为空null区分左右表先写的表是左表后写的表是右表
select 表名.列名
from 表名1 left [outer] join 表名2
on 表名1.列名表名2.列名
3.右外连接会返回右表的所有内容右表的数据在左表中匹配不到默认位置就为空null
select 表名.列名
from 表名1 right [outer] join 表名2
on 表名1.列名表名2.列名
12、子查询
子查询指的是查询语句中嵌套查询语句一般出现在where后面表示条件的子查询的应用场景
①看似题上给了条件但是条件的结果并没有明说需要给查询出来
②where后面不能直接写聚合函数那么就可以通过子查询把聚合函数的结果给查出来拿上结果值做操作即可
子查询语法
格式一通过in匹配子查询的结果 嵌套子查询
select 列名 from 表名 where 列名 in(select 列名 from 表名 where 条件);
备注假如子查询语句前面使用not in相当于把子查询的结果排除在外
格式二通过“”匹配子查询的结果 相关(单值)子查询
select 列名 from 表名 where 列名(select 列名 from 表名 where 条件);
注意①外查询的条件要什么子查询就查什么一定做好匹配比如条件要学号子查询就只能查学号②“”匹配的子查询结果只能有一个而in匹配子查询结果是可以有任意个很多时候我们无法把控子查询结果的个数就可以优先考虑in
格式三通过比较运算符匹配子查询的结果
select 列名 from 表名 where 列名 比较运算符(select 列名 from 表名 where 条件);
insert和select结合使用 思想把查询的结果插入到指定的表中格式insert into 表名 select语句 update和select结合使用
格式update 表名 set 列名值 where 列名 in(select 列名 from 表名 where 条件);
备注参考select语句中嵌套select语句的套路都是放在where后面表示条件
delete和select结合使用
格式delete from 表名 where 列名 in(select 列名 from 表名 where 条件);
备注也是放在where后面表示条件 回顾 子查询嵌套查询语句
select语句子查询
delete语句子查询
update语句子查询
——都是放在where后面表示条件
insert语句子查询 13、视图的概述
定义视图基于某个查询结果的虚表视图(虚表)——对实表进行查询视图的结构取决于对实表的查询过程和结果对表进行增删改查的操作放在视图中同样成立把表名换成视图的名字。注意视图——增删改insertupdatedelete操作——实表(基表)互为影响作用方便用户实现对数据的操作
14、视图(view)的操作
创建视图
create view 视图的名字 as select语句; 修改视图结构 视图插入数据参考insert语法 insert into 视图名字 values(值1,值2,值3…); 修改结构 alter view 视图的名字 as select语句; 修改视图数据参考update语法 update 视图的名字 set 列名值 where 条件; 删除视图 删除视图的数据参考delete语句 delete from 视图的名字 where 条件; 删除视图 drop view 视图的名字;
15、索引概述
描述索引是针对表中的列来进行设置的一个表中索引的设置没有个数限制索引能够快速定位获取表中的数据设置索引的列会自动给插入的数据进行排序索引技术服务于查询操作提高查询效率
例如果把一张表看成是一本书索引就相当于书本的目录
索引的作用优点
①加快数据的检索查看查询——最根本的作用
②保证数据的唯一性——唯一索引
③实现表与表之间的参照完整性——加强表与表之间的联系
④减少group by分组order by排序的时间
索引的缺点
①创建索引需要花费时间和消耗数据空间
②索引的存在会减慢数据的增删改的速度
③对小表(数据少)建立索引不会产生优化的效果
④表中数据量越大索引的优势就越明显
优先考虑建立索引的列 定义有主键或外键约束的列频繁查询的列连接中频繁使用的列——表连接的列子查询的列分组或排序的列
16、索引(index)的操作
创建普通索引
create index 索引的名字 on 表名(列名);
创建唯一索引
create unique index 索引的名字 on 表名(列名);
删除索引
drop index 索引的名字 on 表名; 回顾 视图——基于某个实表的查询结果——虚表
创建视图create view as select语句;
修改视图结构alter view 视图名字 as select语句;
增删改查——insert,delete,update,select——视图
删除视图drop view 视图名字;
索引作用(优点)缺点优先考虑建立索引的列
create [unique] index 索引的名字 on 表名(列名);
drop index 索引的名字 on 表名;