MySQL(1)—— 基本概念和操作

本文主要讨论MySQL的内容。

什么是MySQL?

MySQL 是一款开源、跨平台、基于关系模型的关系型数据库管理系统(RDBMS),使用结构化查询语言(SQL) 进行数据管理。它具有高性能、高可靠性、易用性、可扩展性等特点,广泛应用于 Web 应用、企业系统、云计算等领域,是目前全球主流的开源关系型数据库。

主流的数据库可以分为两大类:关系型数据库和非关系型数据库。

1、关系型数据库

  • MySQL:是一款开源的关系型数据库,是目前主流的选择。
  • Oracle Database:商用关系型数据库,面向高并发、高安全、高可用的企业级核心业务。需要付费,一般在大公司中才使用。
  • SQL server:微软推出的商用关系型数据库,适用于 Windows 生态企业应用。

2、非关系型数据库

  • Redis:开源内存数据结构存储,用作数据库、缓存、消息中间件。
  • MongoDB:开源文档型 NoSQL 数据库,面向高可扩展性、灵活结构的应用场景。

SQL语言

SQL本身是针对数据库操作的语言,和数据库其实是两个概念。SQL语言分为三种类型:DDL、DML和DCL。

1、DDL

DDL(data definition language):数据定义语言,用来维护存储数据的结构。

代表指令有:create 、drop、alter等

2、DML

DML(data manipulation language):数据操作语言,用来对数据进行操作。

代表指令有:insert、delete、update等

3、DCL

DCL(data control language):数据控制语言,主要负责权限管理和事务。

代表指令有:grant、revoke、commit等


数据库的基本操作

1、查询数据库

在实际工作中,在创建数据库之前,由于不能重复命名,在团队协作中可能会出现已经创建该名字的数据库,所以在创建之前需要检查一下已有的数据库。

sql 复制代码
show databases;

使用上面的命令可以查看当前已经创建好的数据库。运行后可以看到如下:

如图,目前已经有了6个数据库并显示出了它们的名字。其中,information_schema、mysql、performance_schema和sys四个数据库是MySQL自带的数据库,记录的是一些关于它本身的配置、性能、系统变量信息等。

2、创建数据库

创建数据库的语句具体如下:

sql 复制代码
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] DB_NAME [create_option]

create_option:[DEFAULT]{
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}

先来看第一行代码:

sql 复制代码
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] DB_NAME [create_option]

CRAETE关键字表示创建,而 { } 中的DATABASE和SCHEMA都表示数据库,两个选一个来进行书写;

中表示的为可选项。此处的 IF NOT EXISTS表示如果不存在则创建数据库。

sql 复制代码
create_option:[DEFAULT]{
    --字符集
    CHARACTER SET [=] charset_name
    --排序规则
  | COLLATE [=] collation_name
    --是否加密
  | ENCRYPTION [=] {'Y' | 'N'}
}

下面我们创建一个test_one的数据库:

sql 复制代码
CREATE DATABASE test_one;

如果配置文件中设置了大小写不敏感,则关键字使用小写也能实现同样的功能。

sql 复制代码
create databese test_one;

创建好之后可以看到打印出了 Query OK;说明创建成功。我们也可以查询一下是否创建成功:

此外,我们也可以使用上面 中的指令,例如:

sql 复制代码
create databasxe if not exists test_db;

此外,在创建时还可以手动指定字符集和排序规则:

sql 复制代码
create database if not exists test_two character set utf8mb4 collate utf8mb4_0900_ai_ci;

如果不清楚默认的字符集,我们可以使用如下的指令进行查询:

sql 复制代码
show variables like '%character%';

3、删除数据库

有创建也会有删除。删除数据库的语法如下:

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

下面我们试着把上面创建的test_one数据库删除:

sql 复制代码
drop database if exists test_one;

【注意】删除数据库是一个非常危险的操作,一定要慎用!


常用数据类型

|--------------|------------|-----------------------------------|--------------------------------|
| 数据类型 | 大小 | 说明 | 对应 |
| BIT(M) | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2......M-1 | 常用Boolean对应BIT,此时默认是1位,即只能存0和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 |


字符串类型

|---------------|--------------|-----------------------------------|----------|
| 数据类型 | 大小 | 说明 | 对应 |
| VARCHAR(SIZE) | 0-65535字节 | 可变长度字符串;可以说是最常用的一种字符串类型,可以指定长度是多少 | String |
| TEXT | 0-65535字节 | 长文本数据 | String |
| MEDIUMTEXT | 0-16777215字节 | 中等长度文本数据 | String |
| BLOB | 0-65535字节 | 二进制形式的长文本数据 | byte\[\] |


日期类型

|-----------|-----|-----------------------------|
| 数据类型 | 大小 | 说明 |
| DATETIME | 8字节 | 范围从1000到9999年,不会进行时区的检索以及转换 |
| TIMESTAMP | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换 |


表的操作

什么是表?

在数据库里,表(Table)就是用来存放数据的 "结构化表格",类似于 Excel 里的一张工作表。一个表的数据结构包含三个部分:

  • 表名
  • 列(字段):每一列是一种属性
  • 行(记录):每一行是一条完整数

1、选择数据库

在创建表之前,我们需要选择在哪个数据库中创建表;在test_db中创建该表,要先选择该数据库:

sql 复制代码
--切换当前操作的数据库为 test_db
use test_db;
--查询当前正在使用的数据库名称
select database();

2、创建表

创建一个表的语法规则如下:

sql 复制代码
CREATE TABLE table_name (
    field1 datatype,
    field2 datatype,
    --...
    fieldn datatype
);
--注意使用的是()!

根据这个规则,下面我们试着创建一个名为student的学生表,表中包含两个字段,其中id表示编号,name表示姓名,长度为50:

sql 复制代码
create table studengt (
id bigint,
name varchar(50),
);

之后使用如下命令查看所有的表:

sql 复制代码
show tables;

3、查看表结构

查看表结构使用下面的命令:

sql 复制代码
desc 表名;
  • Field:表中的字段
  • Type:字段的数据类型
  • Null:当前字段是否允许null
  • key:键值的类型
  • Default:当前列的默认值
  • Extra::其他扩展内容

4、删除表

删除表的语法如下:

sql 复制代码
DROP [TEMPORARY] TABLE [IF EXISTS] tb_name [,tb_name];

我们可以试着使用一下:

sql 复制代码
drop table if exists test;

由于我们没有这个表,有if exists就会报出一条警告。查看警告使用如下的命令:

sql 复制代码
SHOW WARNINGS;

【注意】删除表的操作同样要慎用!

相关推荐
Elastic 中国社区官方博客1 小时前
Elastic 线下 Meetup 将于 2026 年 7 月 26 号下午在深圳举行
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
YL200404262 小时前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
DIY源码阁2 小时前
JavaSwing宿舍管理系统 - MySQL版
java·数据库·mysql·eclipse
cfm_29142 小时前
MySQL8.0 InnoDB Cluster
数据库·mysql
kTR2hD1qb2 小时前
Claude Code Skill的介绍与使用
java·前端·数据库·人工智能
一 乐2 小时前
汽车租赁|基于SprinBoot+vue的汽车租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·汽车·论文·毕设·汽车租赁管理系统
zandy10113 小时前
衡石科技 NL2Metrics 技术深度解析(2026):ChatBI 准确度破局的关键路径
数据库·科技·oracle
Elastic 中国社区官方博客3 小时前
Elasticsearch 如何通过 synthetic _id 和 Bloom filters 将时序存储降低 34%
大数据·数据库·elasticsearch·搜索引擎·serverless·全文检索·时序数据库