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;

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

相关推荐
czhaii13 小时前
STC ai助手单片机工程项目创建实例
数据库·mongodb
山峰哥13 小时前
数据库性能救星:Explain执行计划深度拆解
服务器·开发语言·数据库·sql·启发式算法
oradh14 小时前
Oracle 11g rac IP地址修改(public ip、vip、scan ip、priviate ip)
数据库·tcp/ip·oracle·rac ip地址修改
YOU OU14 小时前
Redis哨兵 & 集群
数据库·redis·sentinel
小罗水14 小时前
第8章 文档解析与文本切片
数据库·spring·spring cloud·微服务
瞬间&永恒~14 小时前
【MySQL】 主从复制多拓扑搭建实验
运维·数据库·mysql·云原生
han_hanker15 小时前
sql语法 DECODE, CASE ... WHEN
数据库·sql·oracle
井川廊咏15 小时前
vi 删除指定范围的行,不用再反复按 dd
数据库·mysql
小码农 - 初16 小时前
MySQL前言
mysql
z落落16 小时前
StudentInfo表 分页、增删改 存储过程+C# WinForm 存储过程实现分页和增删改查
数据库·sql·mysql