MySQL(一)——初识数据库(概念、数据类型、基本表库操作)

这是我们 MySQL 学习的第一程,话不多说,直接开始吧!

初识数据库

数据库相关基本概念

【数据库(DataBase)】

数据库(DB)是一个按照数据结构来组织、存储和管理数据的仓库,通俗点,就是存储数据的仓库。

数据库与数据结构的关系:

数据库是一个用于存储、管理和操作大量数据的系统,而数据结构则提供了数据的组织和存储方式,使数据库能够高效地管理和操作这些数据。通俗的讲,数据库底层使用了合适的数据结构来组织存储数据。

为什么要使用数据库?

最简单的一点就是,为了保证数据的持久性

我们在例如IDEA上编程并运行时,数据会存在内存中,这些数据会存在安全问题,断电或其他系统故障可能导致内存中的数据未能及时保存到磁盘而丢失,所以引出了数据库。

当然,我们要使用数据库还有其他的原因,例如:数据共享与协同合作、支持复杂数据分析。

为什么不使用文件呢?

因为文件系统通常面向某一特定应用程序,数据共享性差,冗余度大,并且数据独立性较差,同时不利于数据查询和管理,不利于存储海量数据。

综上所述,我们要学习使用数据库。


【数据库管理系统(DataBase Management System)】

数据库管理系统(DBMS)是建立、操作和管理数据库的大型软件,通俗地讲,就是操作数据库的工具


【数据库服务】

数据库服务是指提供数据库访问和管理功能的系统或软件。它通常包括数据库服务器、网络连接、存储设备等组件,用于存储、检索和管理数据。数据库服务可以由多个客户端应用程序共享,并提供数据的一致性、安全性和可靠性。常见的数据库服务包括MySQL、Oracle、Microsoft SQL Server等。

数据库服务与数据库管理系统的区别:

数据库服务是一个更广泛的概念,涵盖了数据库管理系统以及相关的硬件和软件组件;而数据库管理系统则是具体的软件产品,专注于管理和操作数据库的功能。


【SQL】

SQL(Structured Query Language)是一种特定于数据库的编程语言,用于管理、查询和操作关系型数据库。

SQL分类:

  • 数据查询语言(DQL)
    • DQL是SQL中最重要的部分,用于从数据库中检索数据。
    • 主要命令是SELECT,用于选择表中的特定列和行。
  • 数据定义语言(DDL)
    • DDL用于定义和管理数据库的结构,包括创建、修改和删除表和其他数据库对象。
    • 主要命令包括CREATE(创建数据库对象)、ALTER(修改数据库对象)、DROP(删除数据库对象)和TRUNCATE(清空数据库对象)
  • 数据操纵语言(DML)
    • DML用于添加、修改和删除数据库中的数据。
    • 主要命令包括INSERT(插入数据)、UPDATE(更新数据)和DELETE(删除数据)
  • 数据控制语言(DCL)
    • DCL用于控制对数据库的访问权限,确保数据的安全和完整。
    • 主要命令包括GRANT(授予权限)和REVOKE(撤销权限)
  • 事务控制语言(TCL)
    • TCL用于管理数据库中的事务,确保数据的一致性和完整性。
    • 主要命令包括COMMIT(提交事务)和ROLLBACK(回滚事务)
  • 游标控制语言(CCL)
    • CCL用于管理和操作数据库中的游标,游标是一个存储在DBMS服务器上的数据库查询。
    • 主要命令包括DECLARE(声明游标)和FETCH(获取游标中的数据)

所以,我们使用 SQL 操作 数据库管理系统(DBMS),再通过 数据库管理系统 操作 数据库以及数据库中的数据。

在这里插入图片描述


数据库的分类

数据库大体可分为关系型数据库非关系型数据库

  • 关系型数据库(Relational Database)

    指采用了关系模型来组织数据的数据库。

    使用表格来组织数据,每个表由行和列组成,具有固定的模式(schema),对数据的结构和关系进行严格定义。关系模型可以简单理解为二维表格模型,一个关系型数据库就是由这些二维表及其之间的关系组成的数据组织。

    例如:OracleMySQLSQL Server

  • 非关系型数据库(NoSQL DataBase)

    不使用传统关系模型的数据库系统,并且不基于SQL

    它们通常以不同的方式存储和处理数据,旨在解决关系型数据库在某些应用场景下的局限性,如大规模数据、高并发访问和高可扩展性需求等。

    例如:redismongodbhbase


区别:

关系型数据库非关系型数据库
使用SQL不强制要求,一般不基于SQL实现
事务支持支持不支持
复杂操作支持不支持
海量读写操作效率低效率高
基本结构基于表和列,结构固定灵活性比较高,例如键值对、文档
使用场景业务方面的联机事务处理(OLTP)系统用于数据的缓存、或基于统计分析的联机分析处理(OLAP)系统

主流数据库一览(2019年的,了解为主):

了解数据库(包括数据库发展史、分类、著名人物、主流数据库、关系与非关系型数据库)_BBOYWISH的博客-CSDN博客


MySQL数据库

MySQL是一种流行的开源关系型数据库管理系统,用于有效地存储、管理和处理数据。它由瑞典MySQL AB公司开发,并现属于Oracle公司。作为一个关系型数据库,MySQL使用表格来存储数据,支持标准的SQL语言,并能够运行在多种系统和多语言环境下。

MySQL因其开源高效灵活的特点,成为广泛应用的数据库管理系统。无论是小型网站还是大型企业应用,MySQL都能提供强大的数据管理和处理能力。


数据模型

MySQL的数据模型指的是数据库中数据的组织结构和操作方式。数据模型是数据库系统的核心,它定义了如何存储、访问和管理数据。

MySQL的数据模型的类型有很多,最常用的就是关系模型,除关系模型外,还有网状模型和层次模型等,但关系模型因其简单性和强大的数学理论基础被广泛使用,我们后续讨论的就是关系模型。

我们的MySQL关系型数据库建立在关系模型的基础上,由多张相互连接的二维表及其关系组成。

我们只需要记住:一个MySQL数据库服务下,可以有多个数据库,而一个数据库中可以有多张表,一张表中可以有很多的数据行(或记录),每条记录由很多的属性(字段、列)构成。

二维表,可称为数据表,由行和列组成,一行代表一条记录,一列代表一个属性或字段

如下图就是两个二维表及其关系:
在这里插入图片描述

  • 如员工表中1 金庸 总裁 2这一行就是一条记录(数据行)
  • id、name、job、dept_id分别是员工表这张二维表的四个属性
  • 一个关系型数据库就是由这些二维表及其之间的关系组成的数据组织

基本操作

了解了MySQL数据库是由一张张二维表组成等基本结构的知识后,我们学习一些最基本SQL语句来操作数据库,主要包括基本库操作,基本表操作,另外还有数据类型。其他的知识后序会不断发文介绍的,这只是我们的第一步!

库操作

查看数据库、创建数据库、删除数据库、选中数据库

查看数据库

语法:

SHOW DATABASES;
  • 分号问题: MySQL分号是可选的,并且可以省略。每条语句默认以换行符作为结束标志。这意味着你可以在一行中编写多个SQL语句,而不需要使用分号分隔它们。

    但为了确保你的SQL语句在不同的数据库系统中都能正确执行,建议在每个SQL语句的末尾添加分号。 这样可以提高代码的可移植性,并避免潜在的语法错误。

  • SHOW 是一个关键字,作用是显示某些信息

  • 注意DATABASES是复数。

  • 作用就是:查看当前服务器的所有数据库

例如:
在这里插入图片描述


创建数据库

语法:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}
  • |:表示"或"的意思,用于分隔不同的选项。例如,在CREATE语句中,可以选择CREATE DATABASE或者CREATE SCHEMA来创建一个数据库(最常用的是DATABASE)。
  • []:表示可选的部分。例如,在CREATE DATABASE语句中,IF NOT EXISTScreate_option都是可选的,不选也可以达到效果,不过会有差别,这要视情况而定。
  • {}:表示一组选项中的一个必须被选择。例如,用户选择创建数据库必须选择DATABASE | SCHEMA
  • =:表示赋值操作符,用于给变量或参数赋值。例如,在CHARACTER SET [=] charset_name中,等号左边的CHARACTER SET是一个变量名,右边的charset_name是要赋给它的值。
  • 大写显示的都是关键字,db_name是我们要创建的数据库的名称

【最简单的建库语法】

CREATE DATABASE db_name;

用对关键字并自定义一个数据库名,就可以创建成功;不过,以这种方式创建数据库,如果数据库已经存在(重名),就会报错,而一旦报错整个SQL就会终止

在这里插入图片描述

【加上IF NOT EXISTS

CREATE DATABASE IF NOT EXISTS db_name;

IF NOT EXISTS翻译过来就是如果不存在,意味着只有db_name这个数据库不存在时才会创建,相当于多了一层校验,如果数据库存在,最多只会警告(终端),有的甚至没有显式地展示警告(如 Navicat Premium Lite 17),这样的话,就不会出现一条语句的错误影响整个执行的情况了。

【加上可选选项】

可选项有三个,可多选,用于指定数据库的特性:

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}
  • CHARACTER SET指定数据库使用的字符编码方式,通常采用utf8mb4
  • COLLATE指定数据库中的字符排序规则,常用utf8mb4_0900_ai_ci
    • utf8mb4是一种字符集,支持最多4个字节的UTF-8编码。与传统的utf8(实际上是utf8mb3,即最多3个字节)不同,utf8mb4能够存储更多的Unicode字符,包括所有的emoji表情符号和一些特殊字符。
    • 0900表示使用Unicode的排序规则(collation),其中"0900"是该排序规则的编号。
    • ai代表“accent insensitive”(不区分重音符号),意味着在排序和比较时,带有重音符号的字符(如“á”和“a”)会被视为相等。
    • ci代表“case insensitive”(不区分大小写),意味着在排序和比较时,大写和小写字符(如“A”和“a”)会被视为相等,所以,当设定成功后,我们编写的所有SQL语句就不区分大小写了,将关键字大写只是方便区分而已。
  • ENCRTPTION用于指定数据库是否加密

例如:

CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

【以关键字为库名】

直接将关键字作为库名是不可以的,需要用``(反引号)`引起来

CREATE DATABASE IF NOT EXISTS `create`;

在这里插入图片描述

  • 以后若想将关键字作为名字,就得使用反引号引起来。

删除数据库

语法

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
  • 不加IF EXISTS校验,如果删除不存在的库,就会报错,终止;如果需要删除建议加上校验
  • 删库操作谨慎使用,误删后果十分严重

选中数据库

语法:

USE db_name;
  • 选择了数据库才可以在选中数据库中执行建表等操作,如果想换数据库,那就再用USE db_name切换即可。

  • 可以通过数据库的一个内置函数观察当前连接(选择)的数据库,语法如下:

    SELECT DATABASE();
    
    • 如果没有选择任何数据库,得到的结果就是NULL

在这里插入图片描述

  • 如果选择了某个数据库,就会显示该数据库的名字:

在这里插入图片描述

  • NULL并不是空指针或空引用,SQL中的NULL表示缺失值或未知值,具有很多特性,后序将在合适的位置介绍

数据类型

数值类型
类型大小作用
TINYINT1 BytesTINYINT(1)用作BOOL类型,常用作表示性别
SMALLINT2 Bytes大整数值
MEDIUMINT3 Bytes大整数值
INT4 Bytes大整数值
BIGINT8 Bytes极大整数值,一般编号为此类型
FLOAT4 Bytes单精度浮点数值,存在精度损失(可以像DECIMAL一样使用M和D)
DOUBLE8 Bytes双精度浮点数值,存在精度损失,但比FLOAT精度高(可以像DECIMAL一样使用M和D)
DECIMAL(M, D)如果M>D,为M+2,否则D+2M表示位数(包括小数位),D指定小数位数,精度极高,一般用于表示金额
NUMERIC(M, D)如果M>D,为M+2,否则D+2等同于DECIMAL
  • 数值类型默认为有符号类型,如果需要可以指定为无符号,做法如:INT UNSIGNED、BIGINT UNSIGNED,尽量不使用无符号,容量不足时,建议更换更大的类型(如int转为bigint),而不是有符号转无符号

  • 对于整型类型范围(不必特意记忆):

    • 有符号范围:-2^(类型字节数 * 8-1)到2^(类型字节数 * 8-1)-1,如int是4字节,就 是-231到231-1

    • 无符号范围:0到2^(类型字节数 * 8)-1,如int就是2^32-1


字符串类型
类型大小作用
CHAR(SIZE)0-255 bytes定长字符串,SIZE指定字符数,固定占用指定空间
VARCHAR(SIZE)0-65 535 bytes变长字符串,SIZE指定字符数,最多占用指定空间,根据实际存储字符串的长度来占用存储空间
TINYBLOB0-255 bytes不超过255个字符的二进制字符串
TINYTEXT0-255 bytes短文本字符串
BLOB0-65 535 bytes二进制形式的长文本数据
TEXT0-65 535 bytes长文本数据
MEDIUMBLOB0-16 777 215 bytes二进制形式的中等长度文本数据
MEDIUMTEXT0-16 777 215 bytes中等长度文本数据
LONGBLOB0-4 294 967 295 bytes二进制形式的极大文本数据
LONGTEXT0-4 294 967 295 bytes极大文本数据
  • CHAR类型占用固定长度的空间,当存储较短的字符串时会浪费存储空间,但这样的好处是提高了检索效率。定长字段的存取效率通常高于变长字段。适用于存储长度相近或固定长度的数据,如身份证号码、电话号码等。
  • VARCHAR(SIZE)是使用最多的字符串类型,按实际存储内容占用空间,适合存储长度变化较大的字符串,从而可以节省存储空间。但是在检索效率上通常低于CHAR类型。适合用于存储长度不定的文本数据,如评论、文章内容等。

日期类型
类型大小范围格式用途
YEAR1 bytes1901/2155YYYY年份值
DATE3 bytes1000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3 bytes‘-838:59:59’ / ‘838:59:59’HH:MM:SS时间值或持续时间
DATETIME8 bytes1000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP4 bytes从1970到2038年,自动检索当前时 区并进行转换。YYYYMMDDHHMMSS时间戳
  • 最常用的就是DATEDATETIMEDATE用于表示如生日,DATETIME用于表示如创建xx的时间等

表操作

查看某个数据库的表,查看表结构,创建表,删除表

查看所有表

语法:

SHOW TABLES;
  • 一定要选中数据库才可以查看该数据库的所有表

在这里插入图片描述


查看表结构

语法:

DESC tbl_name;

在这里插入图片描述

解释:(后四条有关约束,后面发文介绍)

  • Field:属性(字段)名
  • Type:属性(字段)类型
  • NULL:是否允许为空
  • Key:索引类型(键值的类型)
  • Default:默认值
  • Extra:拓展功能

查看的是结构,并不是数据。


创建表

语法:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (
 field1 datatype [COMMENT 'string'],
 field2 datatype [COMMENT 'string'],
 field3 datatype [COMMENT 'string']
);
  • field1、field2… 均为自定义的字段名;datatype为该字段的数据类型;注意最后个字段后没有逗号

  • 可以使用COMMENT关键字增加字段说明(注意 注释说明必须被单引号引起来,不论中文还是英文):
    在这里插入图片描述

  • 加上TEMPORARY意味着创建的是一个临时表(否则就是永久表),临时表通常以特定的命名约定(例如,以#开头)来标识,是在数据库会话期间创建的,它们通常用于存储中间结果或临时数据。这些表只在当前会话中可见,并且在会话结束时会自动删除。

    • 临时表和真实的表(永久表)的区别

      1. 生命周期:临时表只在当前会话期间存在,当会话结束时,临时表会自动删除。而真实的表是持久化的,它们存储在数据库中,并且可以在多个会话之间共享和使用。
      2. 可见性:临时表仅对创建它们的会话可见,其他会话无法访问或修改这些表。而真实的表可以被所有连接到数据库的用户访问和操作。
      3. 数据持久性:临时表的数据不是永久存储的,它们只存在于内存中,并且在会话结束后会被自动清除。真实的表则将数据存储在磁盘上,即使会话结束,数据仍然存在。
      4. 用途:临时表通常用于存储中间结果、临时计算或处理大量数据时使用。它们提供了一种快速且临时的方式来存储和操作数据,而不会对真实表造成影响。真实的表通常用于长期存储和管理数据,如用户信息、订单记录等。
      5. 性能:由于临时表存储在内存中,访问速度通常比真实表快,因为它们不需要从磁盘读取数据。然而,如果内存不足,临时表可能会被交换到磁盘上,导致性能下降。
    • SHOW TABLES;不会显示临时表

    • DESC tmp_tbl_name;可以查看临时表的结构

【拓展】

快速创建结构相等的表

上面例子我们已经创建好了一张表table1,我们快速创建一个结构相等的表,语法如下:

CREATE TABLE [IF NOT EXISTS] tbl_name LIKE copyed_tbl_name;

在这里插入图片描述

  • 只复制表的结构,不会复制表的数据!

删除表

语法:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...;
  • 一条语句可以删除多个表,多个表的表名用,(逗号)连接,但注意一条语句只能删除一条数据库
  • TEMPORARY用于显式地说明删除的是临时表,即使不加TEMPORARY也可以删除临时表,因为临时表和永久表不能重名
  • 删除操作谨慎执行,不论是删表还是删库

其他操作

查看警告信息

语法:

SHOW WARNINGS;
  • 目前我前已知的警告信息只有IF NOT EXISTS发现存在、IF EXISTS发现不存在抛出的。

查看编码集

语句:

SHOW VARIABLES LIKE '%character%';

在这里插入图片描述

  • 该语句用于显示MySQL数据库中所有与字符相关的系统变量。这些变量包括字符集、排序规则等设置。

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值