【MySQL】逻辑库与数据表相关操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 总结一下数据库与表的一些常见操作,由此为基础我们后面才能慢慢学习更加高级的操作。

前言


上篇博客让我们了解了什么是数据库和我们为什么要学习MySQL数据库,如果没有看的兄弟可以先去看看那一篇然后再回来继续看本篇。


传送门:为什么要学习MySQL数据库呢?


本篇文章就来总结一下数据库与表的一些常见操作,由此为基础我们后面才能慢慢学习更加高级的操作。


逻辑库的相关操作

数据库可以说是存储数据库对象的容器。创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,如果管理员在设置权限时为用户创建了数据库,则可以直接使用,否则需要用户自己创建数据库。


MySQL中创建数据库的基本SQL语法格式为:

CREATE DATABASE 数据库名称;


如:CREATE DATABASE bai_test;


输出:


在创建完成后如果我们需要使用到这个逻辑空间,例如在这个逻辑空间中建表,或者对该逻辑空间中的表进行操作时我们就需要把逻辑空间切换到这个我们所用到的这个空间。


切换时使用的SQL语句为:

USE 数据库名称;


如:USE bai_test;


输出:


删除数据库是将已经存在的数据库从磁盘空间上清除。清除之后,数据库中的所有数据也将一同被清除。MySQL中删除数据库的语法格式如下:


DROP DATABASE 数据库名称;


如:DROP DATABASE bai_test;


输出:



MySQL中的数据类型

在学习表的操作之前我们来学习,MySQL中的数据类型。MySQL支持多种数据类型,主要有数值类型、日期/时间类型和字符串类型。


数值类型

下面没有说到的就是DEC和DECIMAL类型。当要求小数数据精度非常高的时候,则可以选择DEC和DECIMAL类型,他们的精度比DOUBLE类型还要高。它们的原理就是把数字转换为字符串进行存储,所以说不会有数据的丢失。


类型名称 说明 存储需求

TINYINT 很小的整数 1个字节

SMALLINT 小的整数 2个字节

MEDIUMINT 中等大小的整数 3个字节

INT 普通大小的整数 4个字节

BIGINT 大整数 8个字节

FLOAT 单精度浮点数 4个字节

DOUBLE 双精度浮点数 8个字节

时间类型

DATE 表示年月日,DATETIME 表示年月日时分秒,TIMESTAMP 经常插入或更新日期时使用,TIME 表示时分秒,YEAR 表示年。


类型名称 日期格式 存储需求

YEAR YYYY 1个字节

TIME HH:MM:SS 3个字节

DATE YYYY-MM-DD 3个字节

DATETIME YYYY-MM-DD HH:MM:SS 8个字节

TIMESTAMP YYYY-MM-DD HH:MM:SS 4个字节

字符串类型

CHAR(M)、VARCHAR(M),其中M表示字节数。VARCHAR类型的长度是可以改变的。如果所存储的字符串长度不会经常变化,可以选择CHAR类型,否则选择VARCHAR类型。BLOB类型,如果需要存储大量二进制数据的时候(存储电影等视频文件),可以选择BLOB类型数据。


类型名称 说明 存储需求

CHAR 固定长度字符串 M个字节,1<=M<=255

VARCHAR 可变长度字符串 M+1个字节,1<=M<=255

BLOB 字节类型 M+2个字节,M<2^16

ENUM 枚举类型 1或2个字节

表的相关操作

表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成。主要用来存储数据记录。表的操作,包含创建表、删除表、修改表等。


创建表

数据表属于数据库,在创建数据表之前,应该使用语句“USE 数据库名称”切换到指定数据库中。如果没有选择数据库,会抛出“No database selected”的错误。


创建数据表的语法格式如下:

CREATE TABLE 表名
(
  字段名1  数据类型 [列级别约束条件][默认值],
  字段名2  数据类型 [列级别约束条件][默认值],
  … …
);


其中约束条件与默认值可有可无


建表示例:


我们创建了一个学生表,里面信息包括:姓名、学号、手机号和老师的编号,如下:

USE bai_test;
CREATE TABLE student
(
  name VARCHAR(4) NOT NULL,
  id INT UNSIGNED NOT NULL,
  phone INT(11) UNSIGNED ,
  teatch INT UNSIGNED
);


输出:


image.png


image.png

修改表

修改表指的是修改数据库中已经存在的数据表的结构。MySQL使用ALTER TABLE语句修改表


1.修改表名


ALTER TABLE 原来表名 RENAME 新表名;


2.添加字段

#在表的最后一个位置增加一个字段
ALTER TABLE  表名 ADD 字段名 字段类型 
#在表的第一个位置增加一个字段
ALTER TABLE  表名 ADD 字段名 字段类型  FIRST
#在表的指定的字段之后增加字段
ALTER TABLE  表名 ADD 字段名 字段类型  AFTER 字段名


3.删除字段

#删除表中指定的字段
ALTER TABLE  表名 DROP 字段名


4.修改字段

修改某个字段的数据类型
ALTER TABLE 表名 MODIFY 字段名 字段类型 
修改某个字段的名称
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段名的数据类型


5.修改字段的顺序

调整某个字段到表的第一个位置
ALTER TABLE 表名 MODIFY 字段名 字段类型 FIRST
调整某个字段到表的某个字段之后
#字段名1是要调整的字段,字段名2 是要调整到字段后面
ALTER TABLE 表名 MODIFY 字段名1 字段类型 AFTER 字段名2


示例:

我们对原来的表进行以下操作
ALTER TABLE student RENAME students;
ALTER TABLE students ADD hight FLOAT;
ALTER TABLE students CHANGE teatch teach_id INT UNSIGNED;
ALTER TABLE students MODIFY id INT FIRST;


输出结果:


image.png

image.png


删除表

删除数据表就是将数据库已经存在的表从数据库中删除。需要注意的是,在删除表的同时,表的定义和所有数据都会被删除。使用DROP TABLE语句可以一次性删除一个数据表或者多个数据表,语法格式如下:

DROP TABLE [IF EXISTS] 表名1,表名2,... 表名n;


注:IF EXISTS 用于在删除前判断删除的表是否存在。加上该参数后再删除表时,如果表不存在,SQL语句也可以顺利执行,但是会发出警告


字段约束

在上面提到过,创建表的语法为:

CREATE TABLE 表名
(
  字段名1  数据类型 [列级别约束条件][默认值],
  字段名2  数据类型 [列级别约束条件][默认值],
  … …
);


这里面有 [列级别约束条件],这里就来说一下这个约束条件


为了防止往数据表中插入错误的数据,在MySQL中,定义了一些维护数据库完整性的规则,即表的约束


主键约束 Primary Key

主键的概念:记录的唯一标识,能够通过该标识确定唯一一条记录。如上表中唯一能够确定学生记录的只能是学号,因此学号是主键。主键是不允许为空,不允许出现重复。可以在定义数据表字段时给字段添加主键约束。语法结构为 :


字段名称 数据类型 PRIMARY KEY;


例如:

id INT UNSIGNED PRIMARY KEY;


如上表所示,定义学生学号字段名称为id ,数据类型为整型,设置其为主键


在定义主键时需要注意多字段组合形式主键的定义,在很多情况下我们的主键需要由多个字段所组成,如学生成绩信息表,主要字段包括学号、姓名、老师编号。针对该表主键为学号与老师编号组合。


PRIMARY KEY(id,teach_id);


外键约束 Foreign Key

外键约束主要针对多个表之间的关系进行描述,外键的定义描述如下:


对于字段F在表A中不是主键,但在另外一个表B中表示主键,这个时候字段F对于表A可称为外键,在定义过程中需指明F在哪个表中是主键。另外需要注意,两个表中并不需要都是用F作为字段名,只要两者存储数据含义与类型一致即可。


默认值约束 Default

默认值约束主要用于实现为字段提供统一的默认值,如学生信息表中,所有的班级编号字段都取值1,为简化操作,我们可以直接为班级编号定义默认值约束,取值为1,在后期录入数据时,可直接去掉对该字段的数据录入。在定义字段时可直接指明默认值,基本语法:


字段名称 数据类型 DEFAULT 默认值

#设置学生信息表中学生默认联系方式为:11112345678
phone INT(11) DEFAULT "11112345678";


唯一约束Unique

唯一约束主要用于约束字段取值的唯一性,有些情况下需要在录入数据时保存数据的唯一性,如在上表学生信息表中,需要学生的联系电话唯一,即该字段不允许输入重复的值。示例代码如下:

字段名称 数据类型 UNIQUE;


示例:

phone INT(11) UNIQUE;


空值约束 NULL

字段允许取空值则可使用空值约束,默认情况下,字段是允许为空的。如我们创建一个学生成绩表,在录入成绩之前需要将学号,课程编号写入数据表,但是允许成绩为空时,对成绩字段设置允许为空。代码说明如下:

字段名称 数据类型 NULL | NOT NULL;



自动增长约束 Auto_increment

自动增长可以理解为一种约束,也可以理解为一种数据类型。是指某一个字段值依次增长,且不重复,(序号)在这种情况下可以将其设置为自动增长类型。如我们可以将班级信息表中的班级编号设置为自动增长字段:

id INT AUTO_INCREMENT PRIMARY KEY;



索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。


打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。


拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。


索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。


创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。


实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。


上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。


建立索引会占用磁盘空间的索引文件。


索引这部分大家可以去MySQL索引看看,我也是看这里的。


结语

这部分讲到的内容都是非常基础的东西,但是只有学好这部分东西后面的学习才能顺利,数据库大家还是多多练习为好。


大家学习数据库可以使用Navicat,这是将数据库图形界面化的一个软件,对新手也比较友好,坚持努力!


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 监控 关系型数据库
MySQL 延迟从库介绍
本文介绍了MySQL中的延迟从库功能,详细解释了其工作原理及配置方法。延迟从库允许从库在主库执行完数据变更后延迟一段时间再同步,主要用于快速恢复误操作的数据。此外,它还可用于备份、离线查询及数据合规性需求。通过合理配置,可显著提升数据库系统的稳定性和可靠性。
161 4
|
3月前
|
SQL 关系型数据库 MySQL
MySQL操作利器——mysql-connector-python库详解
MySQL操作利器——mysql-connector-python库详解
825 0
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
66 5
|
1月前
|
SQL DataWorks 关系型数据库
阿里云 DataWorks 正式支持 SelectDB & Apache Doris 数据源,实现 MySQL 整库实时同步
阿里云数据库 SelectDB 版是阿里云与飞轮科技联合基于 Apache Doris 内核打造的现代化数据仓库,支持大规模实时数据上的极速查询分析。通过实时、统一、弹性、开放的核心能力,能够为企业提供高性价比、简单易用、安全稳定、低成本的实时大数据分析支持。SelectDB 具备世界领先的实时分析能力,能够实现秒级的数据实时导入与同步,在宽表、复杂多表关联、高并发点查等不同场景下,提供超越一众国际知名的同类产品的优秀性能,多次登顶 ClickBench 全球数据库分析性能排行榜。
|
1月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
36 1
|
2月前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
41 2
|
2月前
|
监控 关系型数据库 MySQL
MySQL数据表索引命名规范
MySQL数据表索引命名规范
102 1
|
2月前
|
存储 监控 关系型数据库
MySQL造数据占用临时表空间
MySQL造数据占用临时表空间
41 0
|
2月前
|
Oracle 关系型数据库 MySQL
shell获取多个oracle库mysql库所有的表
请注意,此脚本假设你有足够的权限访问所有提到的数据库。在实际部署前,请确保对脚本中的数据库凭据、主机名和端口进行适当的修改和验证。此外,处理数据库操作时,务必谨慎操作,避免因错误的脚本执行造成数据损坏或服务中断。
43 0
|
3月前
|
存储 SQL 关系型数据库
MySQL 数据表操作
MySQL 数据表操作
43 1