首页 > 数据库 >MySQL数据库笔记(一)

MySQL数据库笔记(一)

时间:2023-08-09 18:03:35浏览次数:25  
标签:exam -- where 数据库 笔记 MySQL tb select

第一章 数据库概述

1、什么是数据库

数据库是一种存储并管理数据的软件系统 存储:持久化 管理:增删改查

常用的存储数据的方式:

1、Java中的变量:生命周期短,不能实现持久化 [内存] 2、序列化:管理数据时依赖于Java中的反序列化 [硬盘] 3、txt,办公软件:没有统一的方式管理数据[硬盘] 4、数据库

2、数据库概述

DBMS:关系型数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,例如建立、使用和维护数据库。 DB:数据库(Database) SQL:结构化查询语言,(Structure Query Language),专门用来操作/访问数据库的通用语言。 MySQL:其中的一款关系型数据库管理系统 以下是2019年DB-Engines Ranking 对各数据库受欢迎程度进行调查后的统计结果:(查看数据库最新排名:https://db-engines.com/en/ranking)

image.png! 关系型数据库

采用关系模型来组织数据,简单来说,关系模型指的就是二维表格模型。类似于Excel工作表。 特点: ​ 所存储的数据有一定的关系 ​ 将数据存储在磁盘上 ​ 重在持久化

非关系型数据库(NoSQL,not only sql):

可看成传统关系型数据库的功能阉割版本,基于键值对存储数据,通过减少很少用的功能,来提高性能。 特点: ​ 以key-value或json的方式存储数据 ​ 将数据存储在内存中 [快照] ​ 重在性能,读取速度快

3、关系型数据库设计规则

  • 遵循ER模型
  • E entity 代表实体的意思 对应到数据库当中的一张表
  • R relationship 代表关系的意思
  • 具体体现
  • 将数据放到表中,表再放到库中。
  • 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。[类]
  • 表具有一些特性,这些特性定义了数据在表中如何存储,类似java和python中 “类”的设计。
  • 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义,数据表的设计实际上就是对字段的设计。创建数据表时,为每个字段分配一个数据类型,定义它们的数据长度和字段名。每个字段类似java 或者python中的“实例属性”。[成员变量]
  • 表中的数据是按行存储的,一行即为一条记录。每一行类似于java或python中的“对象”。

image.png ::: hljs-left

4、数据库的存储结构

image.png image.png

5、MySQL概述

MySQL是一种开放源代码的关系型数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被Sun公司收购。而2009年,SUN又被Oracle收购。目前 MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,使得很多互联网公司选择了MySQL作为网站数据库(Facebook, Twitter, YouTube,阿里的蚂蚁金服,去哪儿,魅族,百度外卖,腾讯)。

image.png MySQL软件的卸载、安装和配置这里不做过多叙述,主要是曾经学习时的一些知识点笔记分享给大家。安装的话大家可以搜索一下,网上都很详细,我用的SQLyog可视化工具 image.png

6、MySQL数据库客户端的登录

使用命令行客户端连接mysql服务 (1)注意:确认服务是开启的 (2)通过命令行客户端连接Mysql服务器 常规命令: mysql -uroot -p回车 //访问当前主机,端口号为3306的数据库服务 mysql -h主机IP地址 -P端口号 -u用户名 -p回车 Enter password:输入密码

image.png

第二章 SQL语言之DDL

1、SQL语言概述

SQL语言 : 结构化查询语言 Structured Query Language. 分类 : DDL : Data Definition Language 数据库定义语言,用于数据库操作,表操作 DML : Data Manipulation Language 数据处理语言,用于记录的增加,删除,修改 DQL : Data Query Language 数据查询语言,用于记录的查询 DCL : Data Control Language -- 部门经理 数据库控制语言,用于账户,权限的管理

2、DDL库操作

语法

建数据库
   create database 数据库名 [character set 字符集 ];
查看有哪些数据库
   show databases;
查看数据库的创建细节
   show create database 数据库名;
修改数据库
   alter database 数据库名 character set 字符集 collate 校对规则;
切换数据库
   use 数据库名;
显示正在使用的数据库
   select database();
删除数据库
   drop database 数据库名;

注意 : 
	1. SQL语言的关键字规范是大写 [初学阶段先实现效果]
	2. SQL语言的每一句结尾以 [;] 结尾
	3. SQL语言的标点符号全部英文

案例:

-- 需求
-- ①创建一个数据库名称为mydb1数据库
create database mydb1;

--②创建一个使用gbk字符集的mydb2数据库
create database mydb2 character set gbk;

--③查看mysql有哪些数据库
show databases;

--④查看mydb2数据库创建信息
show create database mydb2;

--⑤修改数据库mydb2的字符集为utf-8
-- alter database mydb2 character set utf-8; 错误写法
alter database mydb2 character set utf8;

-- ⑥删除数据库mydb2
drop database mydb2;

3、数据库中字段的数据类型

image.png

4、编码问题

命令行操作sql乱码问题

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1

修改my.ini配置文件

暂停服务 在路径:D:\ProgramFiles\mysql\MySQLServer5.7Data 找到my.ini文件 修改内容1: 找到[mysql]命令,大概在63行左右,在其下一行添加 default-character-set=utf8 修改内容2: 找到[mysqld]命令,大概在76行左右,在其下一行添加 character-set-server=utf8 collation-server=utf8_general_ci 修改完毕后,重启MySQL57服务 之前建的表还是之前的字符集,建议删除表再新建

查看编码命令:

show variables like 'character_%';
show variables like 'collation_%';

image.png 再有乱码问题,可以网上搜一下

DDL表操作

建表语句

-- 创建表(不带约束)语法 : 
	create table 表名 (
        字段名1 字段类型(长度) [ default 默认值 ],
        字段名2 字段类型(长度) [ default 默认值 ],
        ...
    ) [character set 字符集];
    
-- 练习 : 根据Java中的类 来建表
Employee{
	-- 字段
    private int id;
    private String name;
    private String gender;//性别
    private Date birthday;
    private Date entry_date; //入职时间
    private String job;//职位类型
    private double salary;//薪水
}

-- SQL语句
	create table tb_employee (
        id int,
        name varchar(30),
        gender char(1),
        birthday date,
        entry_date date,
        job varchar(100),
        salary double
    );

查看表:

-- 查看数据库中所有的表
show tables;

-- 查看表中字段信息
desc 表名;

-- 查看建表语句
show create table 表名;

删除表

drop table 表名;

修改表

-- 修改表添加字段. 给表新增一列
alter table 表名 add 字段名 类型(长度) 约束; 

-- ‐修改表修改字段的类型长度和约束. 修改表的字段信息
alter table 表名 modify 字段名 类型(长度) 约束; 
    
-- 修改表删除表中这个字段.    
alter table 表名 drop 字段名; 

-- 修改表修改字段名
alter table 表名 change 旧的字段名 新的字段名 类型(长度) 约束; 

-- 修改表名.
rename table 旧表名 to 新表名; 
    
-- 修改表的字符集    
alter table 表名 character set 字符集; 

案例:

练习:
-- 在上面员工表中添加一个image varchar(20)列.
alter table tb_employee add image varchar(20); 

-- 修改job列,使其长度变为60.
alter table tb_employee modify job varchar(60); 

-- 删除gender列.
alter table tb_employee drop gender;

-- 表名改为user
rename table tb_employee to user;
rename table user to tb_employee;

-- 修改表的字符集utf8
alter table tb_employee character set utf8; 

-- 修改列名name修改为username
alter table tb_employee change name username varchar(30); 

DML添加、修改、删除数据

添加数据

-- 添加部分字段信息
insert into 表名 (字段名1,字段名2,字段名3...) values (值1,值2,值3...);

-- 添加全部字段信息
insert into 表名 values (值1,值2,值3...);

--添加字段的值的类型如果是字符串或者日期类型,那么在插入的值的时候,就需要使用单引号或者双引号引起来.
-- 推荐使用单引号

案例:

-- 添加部分字段
insert into tb_employee(id,username,birthday) values (1,'光头强','2000-01-01');

--批量添加部分字段
insert into tb_employee(id,username,birthday) values (2,'熊大','2001-01-01') , (3,'熊二','2002-01-01') ;

-- 添加全部字段
insert into tb_employee values(4,'胖虎','2003-01-01','2022-09-13','高级开发工程师',100000,'胖虎.jpg');

--批量添加全部字段
insert into tb_employee values(5,'大雄','2004-01-01','2021-09-13','架构师',200000,'大雄.jpg') , (6,'静香','2005-01-01','2020-09-13','CTO',1000000,'静香.jpg');

修改数据

-- 修改某个字段的值 [一般会带条件,若不带条件就是把所有的值都改变]
update 表名 set 字段名 = 值,字段名=值 [where 条件];

-- 修改某个字段的值 [可以做运算]
update 表名 set 字段名 = 字段名 [赋值操作符] 值,字段名=值 [where 条件];

案例:

-- 将所有员工的工资改为6000元.
update tb_employee set salary = 6000;

-- 将姓名为高卫东的员工的工资改为3000元.
update tb_employee set salary = 3000 where username = '光头强';

-- 将姓名为朱世伟的员工的工资改为9000元,将job改为Manager.
update tb_employee set salary = 9000,job = 'Manager' where username = '熊大';
 
-- 将姓名为薛嘉锦的员工的工资在原有基础上加1000元.
update tb_employee set salary = salary + 1000 where username = '熊二';

删除数据

语法:

delete from 表名 where 条件; --一定要条件,不带条件都删除完毕

truncate table 表名; -- 属于DDL

注意 : 
delete方式属于dml,逐条记录进行删除
truncate方式属于ddl,直接删除表,然后重新创建表

##案例:

-- 删除表中姓名为高卫东记录
delete from tb_employee where username = '光头强';

-- 删除表中的所有记录
	使用delete方式 -> DML : 逐一删除数据,留下空表,操作的是记录
		delete from tb_employee;
	使用truncate方式 -> DDL : 直接删除表,再重新创建新表
		truncate table tb_employee;

DDL查询数据

//实体类
class Exam{
    private int id;
    private String name;
    private int math;
    private int english;
    private int chinese;
}

-- 根据实体类创建数据库中的表
create table tb_exam(
	id int,
	name varchar(20),
    math int,
    english int,
    chinese int
);

-- 添加数据
-- insert into tb_exam values(字段值1,字段值2,....);
insert into tb_exam values (1,'zhangsan',62,83,79);
insert into tb_exam values (2,'lisi',73,92,81);
insert into tb_exam values (3,'wangwu',81,83,65);
insert into tb_exam values (4,'zhaoliu',73,67,84);
insert into tb_exam values (5,'sunqi',93,75,93);
insert into tb_exam values (6,'zhuba',72,69,95);

基本查询

-- 基础查询 : * 全部列 , [列名,列名] 指定列 , distinct : 列的去重
select [distinct] * 或 [列名,列名...] from 表名;

-- 取别名 as
select 列名 as 别名,列名 as 别名 from 表名;

案例:

-- 查询表中所有学生信息:
	select * from tb_exam;
-- 查询表中所有学生的姓名与英语成绩的信息:
	select name , english from tb_exam;
-- 过滤表中的重复数据:(过滤英语成绩信息)
	select distinct english from tb_exam;
	-- 如果多条件去重,可能去重失败,保证每一个记录都是不重复的
	select distinct english,name from tb_exam;
	
-- 在所有学生的英语分数上加10分特长分:
	select name , english from tb_exam;
	select name , english + 10 from tb_exam; -- 在结果上进行加分

-- 统计每个学生的总分:
	select name , (chinese + math + english) from tb_exam;

-- 使用别名的方式表示学生的总分:
select name , (chinese + math + english) as 总分 from tb_exam;	

条件查询

语法:

select [distinct] * 或 [列名,列名...] from 表名 where 条件;

案例:

-- 查询姓名为zhangsan的学生成绩信息:
select * from tb_exam where name = 'zhangsan';

-- 查询英语成绩大于90分的学生信息:
select name,english from tb_exam where english > 90;

-- 查询总分大于240分的所有学生信息:
select * from tb_exam where (chinese + math + english) > 240;

-- 查询学生信息和总分一起展示
select * , (chinese + math + english) from tb_exam where (chinese + math + english) > 240;

-- 查询学生信息和总分一起展示 [起别名]
select * , (chinese + math + english) as 总分 from tb_exam where (chinese + math + english) > 240;

-- SQL的执行顺序有关 -> 错误写法
select * , (chinese + math + english) as 总分 from tb_exam where 总分 > 240;

查询中的逻辑运算符

查询中的逻辑运算符 : 
	> ,< ,>= ,<= ,= ,<>

	in : 一组数据内 in(值1,值2,值3...)
	
	like : 模糊查询. 
		_ : 一个字符 where name like '张_'; -- 名字是2个字,且开头为张
		% : 任意个字符 where name like '张%'; -- 名字是n个字,且开头为张
			张% : 以张开头
			%张 : 以张结尾
			%张% : 包含张即可
			
	and : 逻辑与 -> 并且
    or : 逻辑或 -> 或者
    not : 逻辑非 
    
    between ... and : 在xxx之间

案例:

-- 查询英语分数在80-90分的学生的信息:
select * from tb_exam where english > 80 and english < 90;
-- between ... and : 在xxx之间
select * from tb_exam where english between 80 and 90;

-- 查询数学分数为62,81,93的学生的信息.
select * from tb_exam where math in(62,81,93);
-- or 或者
select * from tb_exam where math = 62 or math = 81 or math = 93;

-- 查询所有姓张的学生信息:
select * from tb_exam where name like 'zhang%';

-- 查询数学分数>80,并且语文>80的学生信息:
select * from tb_exam where math > 80 and chinese > 80;

带排序功能的查询

select * from 表 where 条件 order by 列名 asc/desc,列名 asc/desc;

asc : 升序 -- 默认
desc : 降序 

案例:

-- 对数学成绩进行排序后输出: [升序]
select * from tb_exam order by math;

-- 对总成绩按照从高到低顺序排序输出:
select * from tb_exam order by (chinese + math + english) desc;

select * , (chinese + math + english) 总分 from tb_exam order by (chinese + math + english) desc;

select * , (chinese + math + english) 总分 from tb_exam order by 总分 desc;

-- 对学生的数学成绩进行降序排序,如果数学成绩相同,那么参照英语成绩进行降序.
select * from tb_exam order by math desc , english desc;


-- 修改人名 : update 表名 set 字段名 = 值,字段名=值 [where 条件];
update tb_exam set name = 'zhangba' where id = 6;

-- 对姓张的同学进行总成绩的排序输出: [降序]
-- 错误写法
select * , (chinese + math + english) 总分 from tb_exam order by 总分 desc where name like
'zhang%';
-- 正确写法
select * , (chinese + math + english) 总分 from tb_exam where name like'zhang%' order by 总分 desc;

SQL语句的执行顺序

image.png

SQL语句的编写顺序

select * from 表名 where 条件 group by 列名 having 聚集函数 order by 列名 asc/desc;

这两天工作毕竟忙,摸鱼时间少,不忙的时候继续更java基础的,现在只能靠MySQL的水任务了,见谅

标签:exam,--,where,数据库,笔记,MySQL,tb,select
From: https://blog.51cto.com/u_16213911/7023486

相关文章

  • 主成分分析(PCA)模型学习笔记(一)
    目录为什么使用PCA从过拟合说起维度灾难模型定义PCA的两种推导数据准备最大投影方差最小重构距离小结为什么使用PCA从过拟合说起在数据量小、数据维度高,模型较为复杂时,很容易产生过拟合。训练误差小而泛化误差较大被称为过拟合,而我们所追求的是泛化误差较小,为了解决过拟合问题,......
  • MySQL和Java中的货币字段类型选择
    引言在互联网应用中,处理货币是一项常见的任务。为了确保准确性和精度,我们需要选择适当的字段类型来存储货币数据。本文将讨论在MySQL和Java中记录货币时应选择的字段类型,并提供相应的代码示例。MySQL中的货币字段类型在MySQL中,我们可以使用DECIMAL数据类型来存储货币数据。DECIM......
  • 线性判别分析(LDA)模型笔记
    目录模型概况模型定义模型求解模型概况线性判别方法(LinearDiscriminationAnalysis)是一种经典的线性学些方法,最早由Fisher提出,也叫“Fisher判别分析”。LDA的思想非常朴素,也即是,将样例投影到一条直线上使得同类样例的投影点尽可能近,异类样例的投影点尽可能远,总结六个字就是......
  • MySQL中的外键(foreign key)
    [转]https://blog.csdn.net/weiguang102/article/details/126409406 版权声明:本文为CSDN博主「知其黑、受其白」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/weiguang102/article/details/126409406......
  • avue-crud属性配置项参数笔记分享
     Avue是一个基于Element-plus低代码前端框架,它使用JSON配置来生成页面,可以减少页面开发工作量,极大提升效率;虽然Avue官网上面都有这些配置说明,但是如果刚开始接触不熟悉框架的话需要很久才找到自己需要的参数配置,为了方便自己今后查找使用,现将一些开发中常用的配置梳理在下......
  • mysql主从环境Auto_Position=1下的主备切换
    环境:OS:Centos7mysql:5.7.29 1.停止从服务器slave服务:mysql>stopslave;2.将从服务器切换为主服务器,在从服务器上执行mysql>resetmaster;mysql>resetslaveall; 3.这个时候查看下新主库的gtidmysql>showslavestatus\G;Emptyset(0.00sec)ERROR:Noque......
  • Rocky9 编译安装 Nginx Mariadb Asp.net Core6 (实测 笔记)
    引用 https://www.cnblogs.com/vicowong/p/16974219.html一、查看硬件信息1、查看物理cpu个数、核心数量、线程数grep'physicalid'/proc/cpuinfo|sort-u|wc-lgrep'coreid'/proc/cpuinfo|sort-u|wc-lgrep'processor'/proc/cpuinfo|sort-u|wc......
  • whistle修改接口返回步骤(只影响前端展示,不会插入数据到数据库)
    一、安装node、whistle安装教程:http://wproxy.org/whistle/install.html二、抓包/修改接口返回手机端抓包/修改接口返回步骤与web端类似。Web端抓包/修改接口返回1、下载证书启动whistle:在控制台中输入w2start即可启动whistle。点击whistle页面菜单中的HTTPS,点击二维码,即可下载......
  • MySQL——《监控Zabbix部署》
    一、简介zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbixagent。......
  • 在使用时序数据库 TDengine 进行 SQL 查询时,这些问题需要注意
    小T导读:尽管时序数据处理的特点是以写操作为主,读操作为辅,但查询需求也不容忽视。为方便用户上手,时序数据库(TimeSeriesDatabase)TDengine 采用SQL作为查询语言,主要查询功能包括单列及多列数据查询、数值列及聚合结果的四则运算、时间戳对齐的连接查询操作等,本文将就部分查询......