当前位置: 首页 > article >正文

数据库MySQL(1)


一、数据库简介

数据库是一类软件,其作用就是更加高效的组织数据,我们要讲的数据库软件是MySQL,MySQL所使用的是sql语句,SQL语句就是专门操作数据库的编程语言

数据库组织形式为:数据库→表→行→列

每一个数据库里面包含若干个表,每个表里包含若干个列

二、数据库操作

1. 显示所有数据库

show databases;

2. 创建数据库

create database [if not exists] 数据库名 [character set utf8mb4][collate utf8mb4_general_ci];

中括号中的内容为可选项:

  • if not exists:加上这句话后,如果创建的数据库名已经有了,就不再创建这个数据库
  • character set utf8mb4:指定字符集为 utf8mb4
  • collate utf8mb4_general_ci:字符集 utf8mb4 的校对规则,ci表示大小写不敏感,这意味着在比较字符串时,大小写字母视为相同

3. 选中数据库

use 数据库名;

4. 删除数据库

drop database [if exists] 数据库名;

当该数据库存在时,将其删除

三、常用数据类型

数据类型大小说明对应Java类型
int4字节Integer
tinyint1字节Byte
smallint2字节

Short

bigint8字节Long
decimal(M,D)M与D的最大值+ 2双精度,M指定位数,D表示小数点后有保留几位BigDecimal
varchar(size)0~65535个字节size的单位为字符,表示字符串的最大字符数String
text0~65535个字节长文本数据,长度自适应,依赖自动扩容String
datetime8字节日期类型java.util.Date
  • decimal(3, 2),12.34→不合法,12.3→不合法,2.34→合法
  • varchar(6),hello→合法,abcdef→合法,abcdefghi→不合法

四、表的操作

每个数据库里都包含若干个表,因此在操作表之前,要先选中数据库

use 数据库名;

1. 查看表的结构

desc 表名;

2. 创建表

注意要先选中数据库,创建表语法示例:

create table 表名 (
    字段 类型,
    字段 类型,
    字段 类型
);

可以使用 comment 增加字段说明

create table t_student (
    id int,
    name varchar(20) comment '姓名',
    password varchar(50) comment '密码',
    age int
);

3. 删除表

drop table [if exists] 表名;

如果指定的表存在,则将其删除

五、表的增删查改

首先创建一个学生表,为后续讲解提供一个示例表

use test_db; //选中数据库 test_db

drop database if exists t_student;
create table t_student (
	id int,
	sn int comment '学号',
	name varchar(20) comment '姓名',
	qq_mail varchar(20) comment 'QQ邮箱'
);

5.1 新增

1. 单行数据+全列插入

insert into t_student values (100, 10000, '唐三藏', '22222');
insert into t_student values (101, 10001, '孙悟空', '11111');

2. 多行数据+指定列插入

INSERT INTO student (id, sn, name) VALUES
	(102, 20001, '曹孟德'),
	(103, 20002, '孙仲谋');

5.2 查询

注意:查询某个表之前,都要先选定数据库
use test_db;

首先创建一个表,以便后续演示

use test_db;

drop table if exists exam_result;
create table exam_result (
	id int,
	name varchar(20),
	chinese decimal(3,1),
	math decimal(3,1),
	english decimal(3,1)
);
-- 插入测试数据
insert into exam_result (id, name, chinese, math, english) values
	(1,'唐三藏', 67, 98, 56),
	(2,'孙悟空', 87.5, 78, 77),
	(3,'猪悟能', 88, 98.5, 90),
	(4,'曹孟德', 82, 84, 67),
	(5,'刘玄德', 55.5, 85, 45),
	(6,'孙权', 70, 73, 78.5),
	(7,'宋公明', 75, 65, 30);

5.2.1 全列查询

select * from 表名;

5.2.2 指定列查询

select 字段, 字段,..., 字段 from 表名

5.2.3 指定查询字段为表达式

-- 表达式不包含字段
select id, name, 10 from exam_result;
-- 表达式包含一个字段
select id, name, english + 10 from exam_result;
-- 表达式包含多个字段
select id, name, chinese + math + english from exam_result;

5.2.4 别名

将查询结果的列指定别名

select id, name, chinese + math + english [as] 总分 from exam_result;

as 可以加也可以不加

5.2.5 去重:distinct

先查询数学成绩:

select math from exam_result;

98重复了,加上distinct:

select distinct math from exam_result;

注意:distinct可以用在一个或多个列上,当用在多个列时,只有这些列的组合完全相同才会进行去重,比如对名字和数学成绩去重,只有名字和数学成绩都相同时才会去重

5.2.6 排序:order by

不加order by 的查询,其返回结果都是未知的;

  • 对NULL数据排序视为比任何数据都小,如果为升序,则排在最前面,如果为降序,则排在最后面
    asc→升序,不加则默认为asc;desc→降序
select name, qq_mail from t_student order by qq_mail;
select name, qq_mail from t_student order by qq_mail desc;

  • 使用表达式及别名排序
select name, chinese + english + math total from exam_result
order by total DESC;

5.2.7 条件查询:where

运算符说明
>,>=,<,<=
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=,<>不等于
between a0 and a1如果 a0 <= value <= a1,返回 TRUE(1)
in(option, …)如果是 option 中的任意一个,返回 TRUE(1)
like% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符
is null查询某一列为 NULL 的数据
is not null查询某一列不为 NULL 的数据
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT查询某一列不为...的数据

注意:
1. where 条件可以使用表达式,但不能使用别名
2. and 优先级高于 or,必要时可以使用小括号

  • in
select name, english from exam_result where english in (56, 77, 30, 99);

  • 模糊查询:like
-- % 匹配任意多个(包括 0 个)字符
select name from exam_result where name like '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
select name from exam_result where name like '孙_';-- 匹配到孙权

5.2.8 分页查询

语法:

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
select ... from table_name [where ...] [order by ...] limit n;
-- 从 s 开始,筛选 n 条结果
select ... from table_name [where ...] [order by ...] limit s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
select ... from table_name [where ...] [order by ...] limit n offset s;

按 id 进行分页,每页 3 条记录,分别显示 第 1、2、3 页
 

-- 第 1 页
select id, name, math, english, chinese from exam_result order by id limit 3
offset 0;
-- 第 2 页
select id, name, math, english, chinese from exam_result order by id limit 3
offset 3;
-- 第 3 页,如果结果不足 3 个,不会有影响
select id, name, math, english, chinese from exam_result order by id limit 3
offset 6;

5.3 修改

update 表名 set 字段 = expr [, 字段 = expr ...]
    [where ...] [order by ...] [limit...]

1. 将孙悟空的数学成绩改为80

update exam_result set math = 80 where name = '孙悟空';

2. 将总成绩倒数前三的 3 位同学的数学成绩减 30 分

update exam_result set math = math - 30 
order by chinese + math + english limit 3;

5.4 删除

delete from 表名 [where ...] [order by ...] [limit ...]

1. 删除整个表

delete from exam_result

2. 删除孙悟空的成绩

delete from exam_result where name = '孙悟空';

🙉本篇文章到此结束


http://www.kler.cn/a/456019.html

相关文章:

  • 嵌入式AI STM32部署卷积神经网络的魔法棒
  • ElasticSearch 统计分析全攻略
  • 线性直流电流
  • Nmon(Nigel‘s Performance Monitor)
  • 【RabbitMQ的死信队列】
  • 小程序基础 —— 07 创建小程序项目
  • 闲谭Scala(1)--简介
  • Windows下Python+PyCharm的安装步骤及PyCharm的使用
  • C++软件设计模式之享元模式(FlyWeight)
  • 【vue】圆环呼吸灯闪烁效果(模拟扭蛋机出口处灯光)
  • Docker中的MYSQL导入本地SQL语句
  • 不用swipe插件,用<component>组件实现H5的swipe切换
  • 【Halcon】例程讲解:基于形状匹配与OCR的多图像处理(附图像、程序下载链接)
  • 3.若依前端项目拉取、部署、访问
  • StableSR: Exploiting Diffusion Prior for Real-World Image Super-Resolution
  • jpeg文件学习
  • SpringCloudAlibaba实战入门之路由网关Gateway断言(十二)
  • 怎么把多个PDF合并到一起-免费实用PDF编辑处理工具分享
  • Passlib库介绍及使用指南
  • 计算机组成——Cache
  • 解决gitcode 单文件上传大小10M的问题及清理缓存区
  • 探究音频丢字位置和丢字时间对pesq分数的影响
  • html+css+js网页设计 美食 美拾9个页面
  • 30天面试打卡计划 2024-12-25 26 27 面试题
  • 渗透测试常用专业术语(二)
  • 硬件开发笔记(三十二):TPS54331电源设计(五):原理图BOM表导出、元器件封装核对