前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【MySQL数据库】数据类型和简单的增删改查

【MySQL数据库】数据类型和简单的增删改查

作者头像
小皮侠
发布2024-04-08 20:45:19
1160
发布2024-04-08 20:45:19
举报

数据库

平时我们使用的操作系统都把数据存储在文件中,但是文件存储数据有以下几个缺点:1.文件的安全性问题,2.文件不利于数据查询和管理,3.文件不利于存储海量数据,4.文件在程序中控制不方便。为了解决上面这些问题,专家们设计了一种专门用于管理数据的软件--数据库。

  • 数据库(DB) 是长期储存在计算机内、有组织的、可共享的大量数据的集合
  • 数据库管理系统(DBMS) DBMS是一个大型复杂的基础软件系统,位于用户与操作系统之间的一层数据管理软件。
  • 数据库系统(DBS) 数据库系统由数据库、数据库管理系统(及其应用开发工具)、应用程序、数据库管理员四部分构成。

数据库根据是否以二维表存储数据划分为关系型数据库和非关系型数据库。

关系型数据库

非关系型数据库

使用SQL

不强制要求,一般不基于SQL实现

事务支持

支持

不支持

复杂操作

支持

不支持

海量读写操作

效率低

效率高

基本结构

基于表和列,结构固定

灵活性较高

现在比较知名的关系型数据库有甲骨文的Oracle,MySQL,微软的SQL Server等。

MySQL的常用数据类型

1.数值类型:

分为整形和浮点型:

数据类型

大小

说明

对应Java类型

BIT[(M)]

M指定位数默认为1

二进制数,M范围从1到64,存储数值范围从0到2^M-1

Boolean,默认M为1.

TINYINT

1字节

Byte

SMALLINT

2字节

Short

INT

4字节

Integer

BIGINT

8字节

Long

FLOAT(M,D)

4字节

单精度,M指定长度,D指定小数位数。会发生精度丢失

Float

DOUBLE(M,D)

8字节

Double

DECIMAL(M,D)

M/D最大值+2

双精度,M指定长度,D表示小数点位数。精确数值

BigDecimal

NUMERIC(M,D)

M/D最大值+2

同DECIMAL

BigDecimal

数值类型可以指定为无符号,表示不取负数。1字节表示8bit。

2.字符串类型

数据类型

大小

说明

对应Java类型

VARCHAR(SIZE)

0-65535字节

可变长度字符串

String

TEXT

0-65535字节

长文本数据

String

MEDIUMTEXT

0-16777215字节

中等长度文本数据

String

BLOB

0-65535字节

二进制形式的长文本数据

byte[]

3.日期类型

数据类型

大小

说明

对应Java类型

DATETIME

8字节

范围从1000到9999年,不会进行时区的检索及转换

java.util.Date 、 java.sql.Timestamp

TIMESTAMP

4字节

范围从1970到2038,自动检索当前时区并进行转换

java.util.Date 、 java.sql.Timestamp

MySQL简单的增删改查

增删改查即CRUD,新增数据,查询数据,修改数据,删除数据。数据库的增删改查操作将会是我们在今后操作中遇到的最频繁的工作内容,也是最基础最核心的业务,所以我们必须熟练掌握数据库的增删改查相关代码。

下面我来演示一下相关操作:

这是当前我电脑已经存在的数据库。 使用下面代码创建一个student表

代码语言:javascript
复制
-- 创建一张学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
   id INT,
   sn INT comment '学号',
   name VARCHAR(20) comment '姓名',
   qq_mail VARCHAR(20) comment 'QQ邮箱'
);
1.插入数据:

注意,MySQL在执行语句时不区分大小写。下面往表中插入数据:

代码语言:javascript
复制
INSERT INTO student VALUES (100, 10000, '唐三藏', NULL);
INSERT INTO student VALUES (101, 10001, '孙悟空', '11111');

//插入多行数据
INSERT INTO student (id, sn, name) VALUES
 (102, 20001, '曹孟德'),
 (103, 20002, '孙仲谋');
2.查询数据:

基本语法: SELECT [ DISTINCT ] {* | {column [, column ] ...} [ FROM table_name ] [ WHERE ...] [ ORDER BY column [ ASC | DESC ], ...] LIMIT ...

2.1全列查询

代码语言:javascript
复制
//通常情况下不建议使用*进行全列查询
//1.查询的列越多,意味着需要传输的数据量越大;
//2. 可能会影响到索引的使用。
SELECT * FROM exam_result;

2.2指定列查询

代码语言:javascript
复制
//指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;

2.3查询字段可以为表达式

代码语言:javascript
复制
-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

2.4为查询结果中的列指定别名,语法格式如下:

代码语言:javascript
复制
SELECT column [AS] alias_name [...] FROM table_name;

2.5使用distinct关键字去重

代码语言:javascript
复制
SELECT math FROM exam_result;
+--------+
| math |
+--------+
|     98 |
|     78 |
|     98 |
|     84 |
|     85 |
|     73 |
|     65 |
+--------+
7 rows in set (0.00 sec)
-- 去重结果
SELECT DISTINCT math FROM exam_result;
+--------+
| math |
+--------+
|     98 |
|     78 |
|     84 |
|     85 |
|     73 |
|     65 |
+--------+
6 rows in set (0.00 sec)

2.6使用order by关键字进行排序,

语法:

代码语言:javascript
复制
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...] 
 ORDER BY column [ASC|DESC], [...];

1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

3. 使用 表达式别名 排序

代码语言:javascript
复制
-- 查询同学及总分,由高到低
SELECT name, chinese + english + math FROM exam_result 
 ORDER BY chinese + english + math DESC;
SELECT name, chinese + english + math total FROM exam_result 
 ORDER BY total DESC;

4. 可以对多个字段进行排序,排序优先级随书写顺序

代码语言:javascript
复制
-- 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
SELECT name, math, english, chinese FROM exam_result 
 ORDER BY math DESC, english, chinese;

2.7使用where关键字进行条件查询

代码语言:javascript
复制
-- 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT name, english FROM exam_result WHERE english<60;

SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70;
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;

SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

//模糊查询 like
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权

2.8分页查询关键字limit,语法如下:

代码语言:javascript
复制
-- 起始下标为 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;
3.修改语句:

语法:

代码语言:javascript
复制
UPDATE table_name SET column = expr [, column = expr ...]
 [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

代码语言:javascript
复制
-- 将孙悟空同学的数学成绩变更为 80 分
UPDATE exam_result SET math = 80 WHERE name = '孙悟空';
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE exam_result SET math = 60, chinese = 70 WHERE name = '曹孟德';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE exam_result SET math = math + 30 ORDER BY chinese + math + english LIMIT
3;
-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE exam_result SET chinese = chinese * 2;
4.删除语句:

语法:

代码语言:javascript
复制
DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

案例:

代码语言:javascript
复制
-- 删除孙悟空同学的考试成绩
DELETE FROM exam_result WHERE name = '孙悟空';
-- 删除整张表数据
-- 准备测试表
DROP TABLE IF EXISTS for_delete;
CREATE TABLE for_delete (
 id INT,
 name VARCHAR(20)
);
-- 插入测试数据
INSERT INTO for_delete (name) VALUES ('A'), ('B'), ('C');
-- 删除整表数据
DELETE FROM for_delete;

主页已更新完Java基础内容,数据结构基础, 正在更新算法篇,数据库篇, 未来会更新Java项目,SpringBoot,Redis以及各种Java路线会用到的技术。 求点赞!求收藏!求评论!求关注! 谢谢大家!!!!!!!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库
    • MySQL的常用数据类型
      • 1.数值类型:
      • 2.字符串类型
      • 3.日期类型
    • MySQL简单的增删改查
      • 1.插入数据:
      • 2.查询数据:
      • 3.修改语句:
      • 4.删除语句:
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档