现在企业中使用数据库,一般就是oracle和mysql。oracle收费,提供技术支持,一般是安全性要求高的企业 比如银行,大型公司等才用的。 中小型企业一般用的就是mysql。
但也不用担心觉得我们没钱买oracle来练习,以后进不了大厂,因为数据库的操作语句都是统一的,这意味着在mysql能使用的语句,oracle都能用。也因为oracle要钱,我们就安装mysql来使用就好了。
mysql的安装
我是去官网安装的。MySQL8.0.26版本。
大家有baidupan会员的话就点这个地址下载:
链接:https://pan.baidu.com/s/1K4TWkssZUTBsuc4VCFLFBw?pwd=8hgb
提取码:8hgb
官网地址:
MySQL :: Download MySQL Community Server (Archived Versions)
下载回来后进行解压,
设置环境变量.
control sysdm.cpl,,3
后面的步骤我都是跟着别人的博客走的。 我做成功了。下面贴这个博客出来
MySQL8.0.26下载、安装和环境配置教程(2023年6月9日)_mysql8.0.26安装教程-CSDN博客
后面说两个注意点。 博主在最后打了show databases 来展示数据库,但是他没说的是,还要打一个;号,不然mysql会以为我们没有输入完,一直在等待输入。
数据模型
mysql是一个关系型数据库(RDBMS),建立在关系模型基础上,有多张二维表连接起来组成的数据库。
简单点说就是,一个数据库有多张excle表格,这些表格是有相互联系的。这些有相互联系的excle表格共同组成了这个数据库。
为什么用表格这个形式来存储? 格式统一,便于维护。
为什么用的是SQL语言? ……一个语言总要有个名字把,SQL语言是关系型数据库的统一规范语言。Oracle也是关系型数据库
客户端发送sql语句给数据库管理系统(DBMS),DBMS就开始对对应的表进行操作,然后返回操作结果给客户端。
SQL语句的分类
DDL:数据库定义语言 用来定义数据库对象。 (数据库 表 字段)框架上的东西
DML:数据库操作语言 用来对表中的数据操作 框架中内容的操作
DQL: 查询语句 查询表中的记录
DCL:数据控制语言 对数据库的用户 用户对数据库访问的权限
主要还是前面三条,最后一个语句不是天天都用的到
数据库管理系统的图形化工具
图形化工具市面上有很多。主流也有几款,Navicat挺好用的。 其实这些都大差不差。 这次试试新的东西,捷克公司的图形化工具DataGrip。这个工具不用我们下载,直接集成到Idea当中啦。
整个操作也是研究一下就差不多知道常用的那些功能了
表约束以及数据库的数据类型
值得注意的是,图片的存储,企业一般不用数据库来存,而是另外有一个专门的服务器来存储图片,而这里我们练习的时候,是用字符串的形式存储的图片的地址。
标红的部分是重点,是经常使用的几种类型。
数值类型中 tinyint int float double decimal 都是常用的,剩下那些就比较少用 。如果要用到这些类型的无符号类型,只需要在后面加上 unsigned即可。
DDL表操作
insert tb_emp (username,name,gender) values ('JoneyB','JB',1); update tb_emp set username='JoneyB' where id=52; update tb_emp set update_time='2023-12-10',create_time=now(); update tb_emp set entrydate='2023-12-10' delete from tb_emp where id=52; 下面就是DQL的基本练习了。
DQL
查询username为Joneyb的用户信息
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp where username = 'JoneyB'; 查询id小于等于5的用户信息 select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp where id <= 5; 查询job字段为空的用户信息 select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp where ISNULL(JOB); 查询job字段为空的用户信息 select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp where !ISNULL(JOB); 查询password字段为123456的用户信息 SELECT ID, USERNAME, PASSWORD, NAME, GENDER, IMAGE, JOB, ENTRYDATE, CREATE_TIME, UPDATE_TIME FROM tb_emp where password != '123456'; 查询entrydate在某个日期段,并且gender为1的用户信息 SELECT ID, USERNAME, PASSWORD, NAME, GENDER, IMAGE, JOB, ENTRYDATE, CREATE_TIME, UPDATE_TIME FROM tb_emp WHERE entrydate BETWEEN '2000-01-01' AND '2010-01-01' AND gender=1;
分组查询
找出男女性别,并给出对应数量 select gender,count(*) from tb_emp group by gender; 这里加了过滤条件,先找某一日期前的用户,再进行job类型人数大于等于2的过滤。 select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >=2
分页查询
前端一般只发给我们一个page,我们自己计算该返回些数据给他, 返回的就是 page -1 * 每页显示数
外键
这个外键是物理外键,实际开发一般使用逻辑外键,这里不进行演示。
两张表之间的关系
有三种关系:
- 一对一
- 一对多
- 多对多
一对一的情况:
只需要在任意一方加入对方的主键即可
一对多:
只需要在多的一方加入 “一” 的一方的主键。
多对多:
这种情况双方都不用在自己这边写对方的主键,而是再创建一个第三方表,进行记录两方的主键,进行一个映射即可。
练习素材保存:
create table tb_emp ( id int unsigned primary key auto_increment comment 'ID', name varchar(10) not null unique comment '员工名称', dept_id int unsigned comment '归属的部门ID', create_time datetime not null comment '创建时间', update_time datetime not null comment '更新时间' ) comment '员工表'; INSERT INTO tb_emp (name, dept_id, create_time, update_time) VALUES ('张三', 1, '2023-07-06 12:00:00', '2023-07-06 12:00:00'), ('李四', 2, '2023-07-07 13:00:00', '2023-07-07 13:00:00'), ('王五', 1, '2023-07-08 14:00:00', '2023-07-08 14:00:00'), ('赵六', 3, '2023-07-09 15:00:00', '2023-07-09 15:00:00'), ('钱七', 2, '2023-07-10 16:00:00', '2023-07-10 16:00:00'), ('孙八', 1, '2023-07-11 17:00:00', '2023-07-11 17:00:00'), ('周九', 3, '2023-07-12 18:00:00', '2023-07-12 18:00:00'), ('吴十', 2, '2023-07-13 19:00:00', '2023-07-13 19:00:00'), ('郑十一', 1, '2023-07-14 20:00:00', '2023-07-14 20:00:00'), ('冯十二', 3, '2023-07-15 21:00:00', '2023-07-15 21:00:00'); create table tb_dept ( id int unsigned primary key auto_increment comment 'ID', name varchar(10) not null unique comment '部门名称', create_time datetime not null comment '创建时间', update_time datetime not null comment '更新时间' )comment '部门表'; INSERT INTO tb_dept (name, create_time, update_time) VALUES ('学生部', '2023-07-06 12:00:00', '2023-07-06 12:00:00'), ('学工部', '2023-07-07 13:00:00', '2023-07-07 13:00:00'), ('人事部', '2023-07-08 14:00:00', '2023-07-08 14:00:00'), ('步步部', '2023-07-09 15:00:00', '2023-07-09 15:00:00'), ('布布部', '2023-07-10 16:00:00', '2023-07-10 16:00:00')
其实大家可以下载阿里云的人工智能插件 通译灵码, 让AI给我们生成测试的数据即可。