MySQL数据库总结

作者:爱塔居-CSDN博客

专栏:数据库

目录

前言

一、数据库操作

[1.1 创建数据库](#1.1 创建数据库)

[1.2 显示当前数据库](#1.2 显示当前数据库)

[1.3 使用数据库](#1.3 使用数据库)

[1.4 删除数据库](#1.4 删除数据库)

二、表的操作

[2.1 查看表结构](#2.1 查看表结构)

[2.2 创建表](#2.2 创建表)

[2.3 删除表](#2.3 删除表)

三、表的增删改查操作(CRUD))

[3.1 新增](#3.1 新增)

[3. 2 查询](#3. 2 查询)

[3.2.1 全列查询](#3.2.1 全列查询)

[3.2.2 指定列查询](#3.2.2 指定列查询)

[3.2.3 查询字段为表达式](#3.2.3 查询字段为表达式)

[3.2.4 别名](#3.2.4 别名)

[3.2.5 去重](#3.2.5 去重)

[3.3.5 排序](#3.3.5 排序)

[3.2.6 条件查询:WHERE](#3.2.6 条件查询:WHERE)

[3.3 修改](#3.3 修改)

[3.4 删除](#3.4 删除)


前言

数据库相比于文件存储数据,更具有安全性、利于数据查询管理、存储海量数据、在程序中方便控制。数据库大体分为关系型数据库和非关系型数据库。常用关系型数据库如:Oracle、MySQL、SQL Server。这篇博客讲解的是MySQL。


一、数据库操作

1.1 创建数据库

sql 复制代码
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification]...]

create_specification:
        [DEFAULT] CHARACTER SET charset_name
        [DEFAULT] COLLATE collation_name

说明:

  • 1.大写的表示关键字
  • 2.[]是可选项
  • 3.CHARACTER SET:指定数据库采用的字符集
  • 4.COLLATE:指定数据库字符集的校验规则

示例:
🍟创建名为 db_test1 的数据库

sql 复制代码
CREATE DATABASE db_test1;

说明:当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则
是:utf8_ general_ ci
🍠如果系统没有 db_test2 的数据库,则创建一个名叫 db_test2 的数据库,如果有则不创建

sql 复制代码
CREATE DATABASE IF NOT EXISTS db_test2;

🍍如果系统没有 db_test 的数据库,则创建一个使用 utf8mb4 字符集的 db_test 数据库,如果有则
不创建

sql 复制代码
CREATE DATABASE IF NOT EXISTS db_test CHARACTER SET utf8mb4;

说明:MySQL的utf8编码不是真正的utf8,没有包含某些复杂的中文字符。MySQL真正的utf8是使用utf8mb4,建议大家都使用utf8mb4.

1.2 显示当前数据库

sql 复制代码
SHOW DATABASES;

1.3 使用数据库

sql 复制代码
use 数据库名;

1.4 删除数据库

sql 复制代码
DROP DATABASE [IF EXISTS] db_name;

示例:

🍧删除名为db_test1的数据库

sql 复制代码
drop database db_test1;

🍨如果存在名为db_test1的数据库,删除掉该数据库(一般情况是使用这个,会更加严谨)

sql 复制代码
drop database if exist db_test1;

二、表的操作

注意:需要操作数据库中的表时,必须先使用该数据库

2.1 查看表结构

sql 复制代码
desc 表名;

2.2 创建表

sql 复制代码
CREATE TABLE table_name (
 field1 datatype,
 field2 datatype,
 field3 datatype
);

说明:datatype指代数据类型

1.数值类型:

整数类型常用INT、BIGINT

浮点数和双精度浮点数类型:FLOAT(占用4个字节)和DOUBLE(占用8个字节)

定点数类型:DECIMAL,用于需要精确小数的场景。

2.日期和时间类型:

常用DATETIME、TIMESTAMP,用于存储日期和时间信息,提供不同精度的日期和时间值。

|-----------|-----|-------------------------------|-----------------------------------|--------------------------------------------|
| 数据类型 | 大小 | 说明 | 对应java类型 | 适用场景 |
| DATETIME | 8字节 | 范围从1000念到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp | 适用于需要人类可读的日期和时间表示场景,例如日历应用 |
| TIMESTAMP | 4字节 | 范围从1970年到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp | 适用于需要计算时间间隔、排序或进行时间计算的场景,例如数据库记录的时间戳、日志数据戳 |

3.字符串类型:

CHAR和VARCHAR,用于存储定长和变长字符串。

TEXT和BLOB,用于存储大文本和二进制数据。

ENUM和SET,用于存储枚举和集合类型的值。

4.二进制字符串类型:

BINARY和VARBINARY,用于存储定长和变长二进制数据。

BLOB,用于存储二进制数据。

5.其他特殊类型:

BIT,用于存储二进制数。

JSON,用于存储JSON对象或数组。

可以使用comment增加字段说明

示例:

sql 复制代码
create table stu_test(
    id int;
    name varchar(20) comment '姓名',
    password varchar(50) comment '密码',
    age int,
    sex varchar(1)
);

2.3 删除表

sql 复制代码
DROP TABLE [IF EXISTS] tb1_name

示例:

删除stu_test表

sql 复制代码
drop table stu_test;

如果存在stu_test表,则删除stu_test表

sql 复制代码
drop table if exists stu_test;

三、表的增删改查操作(CRUD)

注释:在 SQL 中可以使用 "-- 空格 + 描述 " 来表示注释说明
CRUD 即增加 (Create) 、查询 (Retrieve) 、更新 (Update) 、删除 (Delete) 四个单词的首字母缩写。

3.1 新增

sql 复制代码
INSERT INTO table_name
[(column[,column]...)]
    VALUES (value_list)[,(value_list)]... 

value_list:value,[,value]...

示例:

sql 复制代码
-- 创建学生表
create table stu_test(
    id int;
    name varchar(20) comment '姓名',
    password varchar(50) comment '密码',
    age int comment '年龄',
    sex varchar(1) comment '性别'
);

单行数据 + 全列插入

sql 复制代码
-- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
INSERT INTO student VALUES (1,'张三', '111', 13,'男');
INSERT INTO student VALUES (2,'李四', '222', 14,'女');

多行数据+指定列插入

sql 复制代码
-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
INSERT INTO student (id, name, age) VALUES
(1,'张三',13),
(2,'李四',14);

3. 2****查询

sql 复制代码
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...

3.2.1****全列查询

sql 复制代码
SELECT * FROM stu_test;

3.2.2 指定列查询

sql 复制代码
--指定列的顺序不需要按定义表的顺序来
SELECT id,age,name FROM stu_test;

3.2.3****查询字段为表达式

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

3.2.4****别名

sql 复制代码
SELECT column [AS] alias_name[...] FROM table_name;

3.2.5****去重

sql 复制代码
--查询exam_result表中math列数据,分数重复的,只显示一个
SELECT DISTINCT math FROM exam_result;

3.3.5****排序

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

示例:

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

3.2.6 条件查询:WHERE

基础查询:

sql 复制代码
-- 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT name, english FROM exam_result WHERE english < 60;
-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english;
-- 查询总分在 200 分以下的同学
SELECT name, chinese + math + english 总分 FROM exam_result 
 WHERE chinese + math + english < 200;

ADN和OR:

sql 复制代码
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;

BETWEEN ... AND ...

sql 复制代码
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;

模糊查询:LIKE

sql 复制代码
--匹配任意多个(包括0个)字符
 --可以匹配到陈x、陈xx、陈xxx....
SELECT name FROM exam_result WHERE name LIKE '陈%'; 
-- _ 匹配严格的一个任意字符
--可以匹配到陈x
SELECT name FROM exam_result WHERE name LIKE '陈_';

3.3****修改

sql 复制代码
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

示例

sql 复制代码
UPDATE stu_test set age=20 where name='李四';

优先级顺序:

where>group by>having>order by

3.4****删除

sql 复制代码
DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

示例

sql 复制代码
DELETE FROM stu_test WHERE name='李四';
相关推荐
一叶飘零_sweeeet几秒前
MongoDB 基础与应用
数据库·mongodb
猿小喵17 分钟前
DBA之路,始于足下
数据库·dba
tyler_download26 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
weixin_449310841 小时前
高效集成:聚水潭采购数据同步到MySQL
android·数据库·mysql
CodingBrother1 小时前
MySQL 和 PostgreSQL 的使用案例
mysql·adb·postgresql
Cachel wood2 小时前
Github配置ssh key原理及操作步骤
运维·开发语言·数据库·windows·postgresql·ssh·github
standxy2 小时前
如何将钉钉新收款单数据高效集成到MySQL
数据库·mysql·钉钉
Narutolxy3 小时前
MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108
数据库·mysql
Venchill3 小时前
安装和卸载Mysql(压缩版)
数据库·mysql
Humbunklung3 小时前
一种EF(EntityFramework) MySQL修改表名去掉dbo前缀的方法
数据库·mysql·c#