踏入MySQL世界:从零开始的数据库入门指南

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 踏入MySQL世界:从零开始的数据库入门指南

一、引言


1.1 现有的数据存储方式有哪些?

  • Java程序存储数据(变量、对象、数组、集合),数据保存在内存中,属于瞬时状态存储。
  • 文件(File)存储数据,保存在硬盘上,属于持久状态存储。



1.2 以上存储方式存在哪些缺点?

  • 没有数据类型的区分。
  • 存储数据量级较小。
  • 没有访问安全限制。
  • 没有备份、恢复机制。




二、数据库基本知识


2.1 为什么需要数据库?

数据库的出现,很好的解决了数据的存储效率和读取效率。

存储成一个文件,不大方便操作,也不大方便共享。


2.2 概念

数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。


2.2.1什么是数据库

数据库就是存储数据的仓库。为了方便数据的存储和管理,将数据按照特定的规则存储在磁盘上。通过数据管理系统,有效的组织和管理存储在数据库中的数据。


数据库(DATABASE)是按照数据结构来组织、存储和管理数据的仓库(通常是一个文件或一组文件)。


理解数据库的一种简单方法就是将其想象成一个文件柜,此文件柜是一个存储存放数据的位置。


注意:有些人通常使用数据库这个术语来代表他们使用的数据库软件,这是不正确的。确切的说,数据库软件对应DBMS(数据库管理系统)。数据库是通过DBMS操纵的容器。我们不直接访问数据库,我们使用的是DBMS,它替我们访问数据库。


2.2.2什么是数据库系统

数据库系统和数据库不是一个概念,数据库系统DBS数据库大很多,由数据库,数据库管理系统,应用开发工具构成。


数据库,数据表,表的结构。。


DB:是指datebase(数据库)


数据库是存储数据的一个集合,数据库中通常使用数据表等组成,而数据表是由数据的字段和数据的值等信息组成。

DBMS:是指datebase mangement systerm(数据库管理系统)


它是操作数据库和管理数据库的一个系统,比如mysql、sqlserver等都是属于数据库管理软件,人们通过这些系统或者工具来管理数据库内的数据。


DBS:是指datebase systerm (数据库系统)

数据库系统由数据库和数据库管理软件等组成,数据库是一个逻辑上的存储数据的概念,而对应的是实体是数据库管理软件存储在硬盘上的数据库,所以数据库系统包含数据库和数据库管理软件。


比较一下DB,DBMS,DBS


2.3 数据库的分类


  • 网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。
  • 层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。
  • 关系结构数据库:Oracle、DB2、MySQL、SQL Server,以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。
  • 关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。




2.4关系型数据库的介绍


关系型数据库模型是吧复杂的数据结构归结为简单的二元关系(即二维表格形式)


在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系的表格上,通过对这些关联的表格分裂、合并、连接或选取等运算来实现数据库的管理。


Oracle在数据库领域上升到了霸主地位

MySQL数据库在中小企业和免费市场具有绝对地位


关系型数据库的几个概念:


表:

表(table)是数据库存储数据的基本单位。

列:

列(column)表中的一个字段。所有的表都是由一个或多个列组成

数据类型:

数据类型(datatype)每个列都有相应的数据类型,用来限制该列存储的数据。

行:

行(row)表中的一个(行)记录

表中的数据是按行存储的,所保存的每个记录存储在自己的行内,如果将表想象成网格,网格中垂直的列为表列,水平行为表行


主键:

主键(primary key)一列或一组列,其值能够唯一区分表中的每一行。


表中每一行都应该可以唯一标识自己的一列。一个顾客表可以使用顾客编号,而订单表可以使用订单ID。一个表中没有主键的话,更新或删除特定行的话很困难,因为没有相关的方法保证只涉及相关的行。


主键的规则 表中的任何列都可以作为主键,只要它满足以下条件:


  • 任何两行都不具有相同的主键值(每一行的主键值唯一)
  • 每个行都必须具有主键值(主键值不允许null)

主键的好习惯除了强制的规则外,应该坚持的几个普遍认可的好习惯:

  • 不更新主键列中的值
  • 不重用主键列的值
  • 不在主键列中使用可能更改的值





三、MySQL


3.1 简介


MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。


官方网站:https://www.mysql.com/

下载地址:https://dev.mysql.com/downloads/mysql/



3.3 登录

方式一:DOS窗口:输入以下命令:

mysql -u root -p
回车后输入密码即可


方式二:通过Mysql的Command Line来登录:

直接输入密码即可


方式三:通过其他的可视化工具软件:可以使用navicat



3.4 创建数据库:


1.创建数据库:

mysql> create database tulingDB character set utf8;
Query OK, 1 row affected (0.00 sec)


说明:

  1. 数据库名不要使用中文,
  2. 由于数据库将来存储一些非ascii码的字符,所以务必指定字符编码,一般都是指定utf-8编码
  3. charset指定utf8 COLLATE 指定utf8_general_ci
  4. mysql中文字符集是utf8,不是utf-8



2.显示有哪些数据库:

mysql> show databases;


3.切换到数据库:以后的操作都是针对该数据库的,比如建表。。

mysql> use tulingDB;


4.查看当前数据库有哪些数据表:

mysql> show tables;


5.删除数据库:

mysql> drop database if exists tulingDB;



3.5 数据类型


MySQL支持多种类型,大致可以分为三类


  • 数值:常用的是int(整数)和decimal(浮点数)
  • 日期/时间:最常用的是datetime
  • 字符串(字符):最常用的是char,varchar和text

char(10)-->定长的字符串,查找速度更快一些

"hello    "
"abc     "


varchar(10)-->变长,节省空间

"hello"
“abc”


总结常用的类型:

int :整型;

double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值:999.99

decimal:浮点型,不会出现精度缺失问题,比如金钱

char:固定长度字符串类型,最大长度:char(255)

varchar:可变长度字符串类型,最大长度:varchar(65535)

text(clob):字符串类型,存储超大文本

blob:字节类型,最大4G

date:日期类型;格式:yyyy-MM-dd

time:时间类型;格式:hh:mm:ss

timestamp:时间戳

datetime:



3.6 数据表的操作


1.创建数据库:

mysql> create database if not exists tulingDB default charset utf8 collate utf8_general_ci;


2.创建数据表:

创建表语法:

CREATE TABLE [IF NOT EXISTS]表名(
  列名 列类型(长度) 约束 默认值,
    列名 列类型(长度) 约束 默认值,
    ...
);

注意:

  • 字段使用NOT NULL,是因为我们不希望这个字段的值为NULL。因此,如果用户尝试创建具有NULL值的记录,那么MYSQL会产生错误
  • 字段的AUTO_INCREMENT属性告诉MySQL自动增加id字段下一个可以用的编号。
  • DEFAULT 设置默认值
  • 关键字primary key 用于定义此列作为主键。
mysql> create table users(
    -> id int(4) primary key auto_increment,
    -> username varchar(20) ,
    -> pwd varchar(30));


3.查看表结构:desc-->describe

mysql> desc users;


4.显示检表语句:

mysql> show create table users;


5.插入一条数据:

mysql> insert into users(id,username,pwd) values(1,'admin','123456');
Query OK, 1 row affected (0.02 sec)


6.查询数据:

mysql> select * from users;
+----+----------+--------+
| id | username | pwd    |
+----+----------+--------+
|  1 | admin    | 123456 |
+----+----------+--------+
1 row in set (0.00 sec)



3.7 修改表结构


alter table 表名 xxx。。。


  1. 添加字段:add
mysql> alter table users add(
    -> age int(4),
    -> birthday date);


  1. 修改已有字段的数据类型:modify
mysql> alter table users modify age float(4,1);


注意点:并不能随意的更改已有列的数据类型。尤其是表中已经有数据了

A:兼容类型:长度可以从小到大,不能已有的数据越界。
B:不兼容类型:varchar-->int,更改失败。
alter tables users modify name int;


3.删除某列:drop

mysql> alter table users drop birthday;


如果该列存在数据,那么数据也会被删掉。

4.删除表:drop table

mysql> drop table user3;



3.8 插入数据


1.插入数据:

insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。)

全列插入:如果有所有列都要插入数据,那么可以省略列的名字

对自动增长的数据,在全列插入的时候需要占位处理,一般使用0来占位,但是最终的值以实际为准;


缺省插入:如果有某一个或一些字段没有数值,那么就要写清楚列名和值。


插入的时候,not null和primary key的列必须赋值,其他的列根据情况来赋值,如果没有赋值则会使用默认值

同时插入多行:

insert into 表名(列1,列2,列3.。。) values(值1,值2,值3.。。),(值1,值2,值3.。。),....;



3.9 修改数据

语法结构:

update 表名 set 列1=值1,列2=值2...[where 条件];


where后是修改条件:为true,才会修改数据。

注意点:

  1. 条件必须是boolean类型的值或表达式;
运算符:
  =,数值相等
  !=,<>,数值不等
  between ... and,区间
  >
  <
  >=
  <=
  or
  and
  in(值1,值2,值3.。)
  is null 
  is not null


3.is null不是=null(永远是false)

select * from student where birthday=null;


1.修改学号为1006的同学姓名为麻雷子

mysql> update student set name='麻雷子' where no=1006;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from student;
+------+--------+------+------+------------+
| no   | name   | age  | sex  | birthday   |
+------+--------+------+------+------------+
| 1001 | 王二狗 |   18 | 男   | 2007-10-10 |
| 1002 | rose   |   19 | 女   | 2006-09-09 |
| 1003 | jack   |   20 | 男   | 2005-08-06 |
| 1004 | 张三   |   18 | 女   | 1990-12-12 |
| 1005 | 李四   |   21 | 男   | 1991-06-08 |
| 1006 | 麻雷子   |   22 | 男   | 1992-10-10 |
+------+--------+------+------+------------+
6 rows in set (0.00 sec)

2.年龄小于19岁的同学,性别改为女

mysql> update student set sex='女' where age < 19;
Query OK, 1 row affected (0.01 sec)
Rows matched: 2  Changed: 1  Warnings: 0
mysql> select * from student;
+------+--------+------+------+------------+
| no   | name   | age  | sex  | birthday   |
+------+--------+------+------+------------+
| 1001 | 王二狗 |   18 | 女   | 2007-10-10 |
| 1002 | rose   |   19 | 女   | 2006-09-09 |
| 1003 | jack   |   20 | 男   | 2005-08-06 |
| 1004 | 张三   |   18 | 女   | 1990-12-12 |
| 1005 | 李四   |   21 | 男   | 1991-06-08 |
| 1006 | 麻雷子   |   22 | 男   | 1992-10-10 |
+------+--------+------+------+------------+
6 rows in set (0.01 sec)


3.年龄大于等于18岁,并且小于等于19岁的同学姓名改为马冬梅

mysql> update student set name='马冬梅' where age >= 18 and age <= 19;
Query OK, 3 rows affected (0.01 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> select *from student;
+------+--------+------+------+------------+
| no   | name   | age  | sex  | birthday   |
+------+--------+------+------+------------+
| 1001 | 马冬梅 |   18 | 女   | 2007-10-10 |
| 1002 | 马冬梅 |   19 | 女   | 2006-09-09 |
| 1003 | jack   |   20 | 男   | 2005-08-06 |
| 1004 | 马冬梅 |   18 | 女   | 1990-12-12 |
| 1005 | 李四   |   21 | 男   | 1991-06-08 |
| 1006 | 麻雷子   |   22 | 男   | 1992-10-10 |
+------+--------+------+------+------------+
6 rows in set (0.00 sec)

4.修改年龄19到20岁之间的同学姓名为马春梅:

mysql> update student set name='马春梅' where age between 19 and 20;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0
mysql> select * from student;
+------+--------+------+------+------------+
| no   | name   | age  | sex  | birthday   |
+------+--------+------+------+------------+
| 1001 | 马冬梅 |   18 | 女   | 2007-10-10 |
| 1002 | 马春梅 |   19 | 女   | 2006-09-09 |
| 1003 | 马春梅 |   20 | 男   | 2005-08-06 |
| 1004 | 马冬梅 |   18 | 女   | 1990-12-12 |
| 1005 | 李四   |   21 | 男   | 1991-06-08 |
| 1006 | 麻雷子   |   22 | 男   | 1992-10-10 |
+------+--------+------+------+------------+
6 rows in set (0.00 sec)


3.10删除数据


语法结构:

delete from 表名[where 条件]
mysql> delete from student2 where no=1001 or no=1002;
Query OK, 2 rows affected (0.14 sec)



最后


本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
17 3
|
4天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
21 3
|
4天前
|
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`
26 2
|
11天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
17天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
125 15
|
18天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
22天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
1月前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
40 1
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
62 4