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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
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)



最后


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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
247 62
|
2月前
|
SQL 存储 关系型数据库
MySQL功能模块探秘:数据库世界的奇妙之旅
]带你轻松愉快地探索MySQL 8.4.5的核心功能模块,从SQL引擎到存储引擎,从复制机制到插件系统,让你在欢声笑语中掌握数据库的精髓!
|
2月前
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
98 11
|
2月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
304 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
221 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
207 0
MySQL---数据库从入门走向大神系列(五)-存储过程
|
数据库
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
272 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
275 0
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
|
数据库
MySQL---数据库从入门走向大神系列(一)-基础入门(2)
MySQL---数据库从入门走向大神系列(一)-基础入门(2)
184 0
MySQL---数据库从入门走向大神系列(一)-基础入门(2)

推荐镜像

更多