MySQL学习 [第一天] ——数据库的基本操作 Ⅰ

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 从零开始学习MySQL,学习使用这个“无敌好用”的数据库管理系统

一、前言

大数据的学习道路上离不开数据库的学习,我们学校在上学期开设了有关数据库的课程,但学习的是SQL Server,虽然不管使用什么数据库SQL语法都差不多,但是SQL Server在平时确实用的很少,所以本学期我准备重新开始学习数据库,并且以MySQL 8为学习目标,进一步学习有关数据库的知识。

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

我学习参考的书籍是《MySQL 8从入门到精通》,我正在看,大家如果想去阅读,可以去微信阅读上看或者上网找免费的电子版学习,后续学习总结的内容都会依据这本书来为大家总结。

好啦,废话不多说,我们开始数据库的学习之旅!

二、我的环境

  • 电脑系统:Windows 11
  • 数据库管理系统版本:MySQL 8
  • 数据库管理工具:Nacicat Premium 16

三、数据库的创建与删除

1、数据库的创建

MySQL安装完成之后,它自动的生成几个系统的数据库,我们可以使用如下SQL语句来查询看看:

SHOW DATABASES;

image-20220919230750340.png

这些数据库都不能轻易删除,它们是MySQL所必需的,它们的作用在后面的学习中会讲到。

创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理,在MySQL中创建数据库的基本SQL语法格式是:

CREATE DATABASE database_name;

database_name是要创建的数据库的名称,新建的数据库不能和已存在的数据库重名。

OK,现在我们来尝试创建我们的第一个数据库:

CREATE DATABASE test_db;

数据库创建好之后,我们再次使用上面的语句查看一下:

image-20220919232107684.png

OK,我们已经成功迈出了第一步了。

2、数据库的删除

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

DROP DATABASE database_name

用DROP DATABASE声明删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复,如果要删除的数据库不存在,就会报错。

我们试着将刚才创建的数据库删除:

image-20220919233156310.png

DROP DATABASE test_db;

我们刷新一下,就会发现数据库已经被成功删除了。

四、数据表的基本操作

在数据库中,数据表是数据库中最重要、最基本的操作对象,是数据存储的基本单位。数据表被定义为列的集合,数据在表中是按照行和列的格式来存储的。每一行代表一条唯一的记录,每一列代表记录中的一个域。

接下来我们将学习有关数据表的基本操作。

1、创建数据表

创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性等)约束的过程。

创建数据表的语句如下:

CREATETABLE<表名>(    字符串1, 数据类型 [列级别约束条件][默认值],    字符串2, 数据类型 [列级别约束条件][默认值],    ......
[表级别约束条件]);

创建数据表的前提是有一个数据库,我们在创建表时需要指定是在哪个数据库里创建表,例如我们先创建一个数据库,然后再创建一个表:

USE test_db;CREATETABLE tb_emp1 
( id INT(11),NAME VARCHAR(25),deptId INT(11),salary FLOAT);

image-20220920224450840.png

2、使用主键约束

主键,又称主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一,并且不允许为空。主键能够唯一地标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。

主键分为两种类型:单字段主键和多字段联合主键。

  • 单字段主键
    语法格式如下:
字段名 数据类型 PRIMARY KEY [默认值]
  • 例如我们将刚才的表的id设置为主键,并命名为新的数据表tb_emp2:
USE test_db;CREATETABLE tb_emp2 
(id INT(11) PRIMARY KEY,name VARCHAR(25),deptId INT(11),salary FLOAT);
  • 我们还可以再所以列定义完之后再指定主键:
USE test_db;CREATETABLE tb_emp3
(id INT(11),name VARCHAR(25),deptId INT(11),salary FLOAT,PRIMARY KEY(id));
  • 多字段联合主键
    语法格式如下:
PRIMARY KEY [字段1, 字段2, ... ..., 字段n]
  • 例如,我们可以将name和deptId联合起来作为主键:
USE test_db;CREATETABLE tb_emp4
(name VARCHAR(25),deptId INT(11),salary FLOAT,PRIMARY KEY(name, deptId));
  • 这样name和deptId字段组合起来成为表tb_emp4的多字段联合主键。

3、使用外键约束

外键用来在两个表的数据之间建立连接,可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

外键是表中的一个字段,需要对应另一个关联表的主键,设置外键的原因在于保证数据引用的完整性,在定义外键之后,就不允许删除在另一个表中具有关联关系的行了。

创建外键的语法格式是:

[CONSTRAINT <外键名>] FOREIGN KEY 字段1 [, 字段名2, ...]REFERENCES <主表名> 主键列1 [,  主键列2,...]

例如我们创建一个部门表tb_dept1:

USE test_db;CREATETABLE tb_dept1
(id INT(11) PRIMARY KEY,name VARCHAR(22)NOTNULL,location VARCHAR(50));

然后我们再创建一个数据表tb_emp5,让它的键deptId作为外键关联到tb_dept1的主键id:

USE test_db;CREATETABLE tb_emp5
(id INT(11) PRIMARY KEY,name VARCHAR(25),deptId INT(11),salary FLOAT,CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id));

我们再表tb_emp5上添加了一个名为fk_emp_dept1的外键约束,外键为deptId,它依赖于表tb_dept1的主键id。

4、使用非空约束

非空约束意思为字段的值不能为空,字段再设置非空约束之后,如果不指定值,就会报错。

非空约束的语法格式为:

字段名 数据类型 NOTNULL

5、使用唯一约束

设置唯一约束要求该列唯一,可以为空,但只能出现一个空值,其作用是可以确保一列或者多列不出现重复着。

设置唯一约束可以再定义列之后直接指定唯一约束:

字段名 数据类型 UNIQUE

例如:

USE test_db;CREATETABLE tb_dept2
(id INT(11) PRIMARY KEY,name VARCHAR(25) UNIQUE,location VARCHAR(50));

设置唯一约束还可以再定义所以列之后指定唯一约束:

[CONSTRAINT <约束名>] UNIQUE(<字段名>)

例如:

USE test_db;CREATETABLE tb_dept3
(id INT(11) PRIMARY KEY,name VARCHAR(22),location VARCHAR(50),CONSTRAINT STH UNIQUE(name));

学到这里,有人可能会问,主键跟唯一约束不都是确定唯一值吗,它们有什么区别,我想说的是唯一约束在一个表中可以有多个字段声明,而且字段可为空值,但是主键只能声明一个,且不能为空。

6、使用默认约束

默认约束意思是指定某列的默认值,它的语法格式如下:

字段名 数据类型 DEFAULT 默认值

例如:

USE test_db;CREATETABLE tb_emp7
(id INT(11) PRIMARY KEY,name VARCHAR(25)NOTNULL,deptId INT(11) DEFAULT 0000,salary FLOAT);

我们将部门编号默认为0000,如果插入数据时不指定编号那么就是默认的编号。

五、最后我想说

开始部分内容比较多,我准备分成几个博客进行总结更新,接下来的博客依旧会继续更新有关数据库的基本操作内容,大家耐心等待,谢谢啦!

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3天前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
47 25
|
12天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
91 42
|
26天前
|
关系型数据库 MySQL 数据库连接
数据库连接工具连接mysql提示:“Host ‘172.23.0.1‘ is not allowed to connect to this MySQL server“
docker-compose部署mysql8服务后,连接时提示不允许连接问题解决
|
30天前
|
缓存 关系型数据库 MySQL
【深入了解MySQL】优化查询性能与数据库设计的深度总结
本文详细介绍了MySQL查询优化和数据库设计技巧,涵盖基础优化、高级技巧及性能监控。
257 0
|
2月前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
73 3
|
2月前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
117 2
|
2月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
125 3
|
2月前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
2月前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
385 15
|
2月前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。