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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 踏入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)



最后


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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
14天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
54 13
|
8天前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
24 4
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
20 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
81 1
|
3天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
27 0
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
17天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
59 2
|
20天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
80 4
|
26天前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?