MySQL 简介及SQL 语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL 简介及SQL 语句

MySQL 简介及SQL 语句



一、数据库概述


1.数据库的分类

1)区别

2.MySQL 概述

3.MySQL 存储原理


二、部署 MySQL 数据库


1.安装 MySQL 数据库

2.优化调整 MySQL 程序

3.初始化 MySQL 数据库服务

4.登录验证


三、SQL 语句操作——增删改查


1.SQL 语句分类

2.数据记录类型

3.表相关 SQL

4.简单操作


一、数据库概述



数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。


1.数据库的分类


  • 关系型数据库:Oracle、DB2、SQL Server、MySQL 等。
  • 非关系型数据库:Memcached、MongoDB 和 Redis 等。


1)区别


关系型数据库:


  • 安全,因为是将数据保存到磁盘之中,所以基本不可能出现丢失数据的情况。
  • 但是比较浪费时间,因为是使用二维表的形式存储数据的。


非关系型数据库:


  • 存储数据的效率比较高,因为所有的非关系型数据库都是尽可能的将数据存放到内存当中。
  • 但不是特别安全,如突然断电时会导致数据丢失。


2.MySQL 概述


  • MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。
  • 是一个真正的多用户、多线程 SQL 数据库。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。
  • MySQL 是以一个 C/S 结构实现的,它由一个服务器守护程序 mysqld 和很多不同的客户程序和库组成。
  • SQL 是一种标准化的语言,它使得存储、更新和存取信息更容易。


3.MySQL 存储原理


MySQL 整体架构:


image.png


  1. 连接池:负责和客户端进行连接,连接池可以同时处理多个数据库请求。同时还有 SSL 的安全概念,可以确保连接是安全的。
  2. SQL 接口:当 SQL 语句进入 MySQL 后,会先到 SQL 接口中,将传过来的 SQL 语句拆散,将底层的结果封装成 SQL 的数据格式。
  3. 解析器:负责将 SQL 语句进行拆分,如果语句有问题那么就返回错误,如果没问题就继续向下执行。
  4. 优化器:对 SQL 查询的结果优化处理,产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返回结果。
  5. 缓存:对要查询的 SQL 语句进行 hash 缓存,如果下一次是相同的查询语句,则在 SQL 接口之后直接返回结果。
  6. 存储引擎:MySQL 有很多种存储引擎,每一种存储引擎有不同的特性,它们负责组织文件的存放形式,位置,访问文件的方法等等。
  7. 文件系统:真正存放物理文件的单位。


二、部署 MySQL 数据库



准备工作:


image.png


  • 注意:boost 软件包需要在 Windows 系统中下载:下载地址


1.安装 MySQL 数据库


[root@MySQL ~]# tar zxf boost_1_59_0.tar.gz
[root@MySQL ~]# mv boot_1_59_0 /usr/local/boost
[root@MySQL ~]# wget http://dev.mysql.com/Downloads/MySQL-5.7/mysql-5.7.12.tar.gz
[root@MySQL ~]# yum -y install gcc gcc-c++ ncurses bison libgcrypt perl cmake ncurses-devel
[root@MySQL ~]# groupadd mysql
[root@MySQL ~]# useradd -r -g mysql mysql
[root@MySQL ~]# tar zxf mysql-5.7.12.tar.gz -C /usr/src/
[root@MySQL ~]# cd /usr/src/mysql-5.7.12/   #当编译多次时. 需要删除CMAKE的缓存. rm -rf /usr/src/mysql-5.7.12/CMakeCache.txt
[root@MySQL mysql-5.7.12]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DENABLE_DOWNLOADS=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost \
-DSYSCONFDIR=/etc
[root@MySQL mysql-5.7.12]# make -j `cat /proc/cpuinfo | grep processor | wc -l`
[root@MySQL mysql-5.7.12]# make install


注解:


  • -DCMAKE_INSTALL_PREFIX=/usr/local/mysql:MySQL 安装的根目录。
  • -DMYSQL_DATADIR=/usr/local/mysql/data:MySQL 数据库文件存放目录。
  • -DDEFAULT_CHARSET=utf8:设置默认字符集为 utf8。
  • -DDEFAULT_COLLATION=utf8_general_ci:设置默认字符校对。
  • -DMYSQL_TCP_PORT=3306:MySQL 的监听端口。
  • -DMYSQL_USER=mysql:MySQL 用户名。
  • -DWITH_MYISAM_STORAGE_ENGINE=1:安装 MySQL 的 myisam 数据库引擎。
  • -DWITH_INNOBASE_STORAGE_ENGINE=1:安装 MySQL 的 innodb 数据库引擎。
  • -DWITH_ARCHIVE_STORAGE_ENGINE=1:安装 MySQL 的 archive 数据库引擎。
  • -DWITH_BLACKHOLE_STORAGE_ENGINE=1:安装 MySQL 的 blackhole 数据库引擎。
  • -DWITH_MEMORY_STORAGE_ENGINE=1:安装 MySQL 的 memory 数据库引擎。
  • -DENABLE_DOWNLOADS=1:编译时允许自主下载相关文件。
  • -DDOWNLOAD_BOOST=1:允许下载 boost 。
  • -DWITH_BOOST=/usr/local/boost:指定系统中存储的 boost 目录。
  • -DSYSCONFDIR=/etc:MySQL 配置文件所在目录。


以下模块自行配置即可:


  • -DWITH_READLINE=1:MySQL的 readline library。
  • -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock:MySQL 的通讯目录。
  • -DENABLED_LOCAL_INFILE=1:启动加载本地数据。
  • -DWITH_PARTITION_STOPAGE_ENGINE=1:启动 MySQL 的分区存储结构。
  • -DEXTRA_CHARSETS=all:使用 MySQL 支持所有的扩展字符。
  • -DWITH_DEBUG=0:禁止调试模式。
  • -DMYSQL_MAINTAINER_MODE=0:禁止 MySQL 维护器特定的开发环境。
  • -DWITH_SSL:STRING=bundled:通讯时支持 SSL 协议。
  • -DWITH_ZLIB:STRING=bundled:允许使用 zlib library。


2.优化调整 MySQL 程序


[root@MySQL ~]# chown -R mysql:mysql /usr/local/mysql
[root@MySQL ~]# cp /usr/src/mysql-5.7.12/support-files/my-default.cnf /etc/my.cnf
[root@MySQL ~]# cp /usr/src/mysql-5.7.12/support-files/mysql.server /etc/init.d/
[root@MySQL ~]# chmod +x /etc/init.d/mysql.server
[root@MySQL ~]# cat <<END > /usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqldapi
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/mysql/logs/mysqld.pid
ExecStart=/etc/init.d/mysql.server start
ExecReload=/etc/init.d/mysql.server restart
ExecStop=/etc/init.d/mysql.server stop
PrivateTmp=Flase
[Install]
WantedBy=multi-user.target
END
[root@MySQL ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile     #设置环境变量
[root@MySQL ~]# source /etc/profile                           #使其生效


注解:


  • PrivateTmp=Flase:此选项必须关闭,不然 MySQL 连接文件 mysql.sock 会默认生成在 /tmp/.../... 目录中。
  • 将该配置项关闭后,文件会正常生成在 /tmp/mysql.sock 文件中。


3.初始化 MySQL 数据库服务


[root@MySQL ~]# mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data


注解:


  • --initialize-insecure:禁用 MySQL 的密码策略(密码复杂性等)。
  • --initializeaize:开启后会在 mysqld.log 文件中自动生成 MySQL 密码。
  • --user=mysql:运行的账户。
  • --basedir=/usr/local/mysql:MySQL 的安装位置。
  • --datadir=/usr/local/mysql/data:MySQL 数据库中数据的物理存放路径。


[root@MySQL ~]# cat <<END > /etc/my.cnf
[mysqld]                            # 声明区域
basedir = /usr/local/mysql                    # MySQL 的安装位置
datadir = /usr/local/mysql/data                 # MySQL 的物理文件存放位置
port = 3306                           # MySQL 服务监听的端口
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES       # MySQL 的模式
character_set_server=utf8                   # 服务器使用的字符集
init_connect='SET NAMES utf8'                 # 初始化连接都设置为 utf8 字符集
log-error=/usr/local/mysql/logs/mysqld.log            # 指定日志文件位置
pid-file=/usr/local/mysql/logs/mysqld.pid           # 指定运行服务所产生的 PID 文件位置
skip-name-resolve                       # 跳过 MySQL 的域名反向解析
END


[root@MySQL ~]# mkdir /usr/local/mysql/logs           # 创建日志存放位置
[root@MySQL ~]# chown mysql:mysql /usr/local/mysql/logs/    # 赋权
[root@MySQL ~]# systemctl start mysqld              # 开启 MySQL 数据库
[root@MySQL ~]# systemctl enable mysqld             # 设置 MySQL 开机自启
[root@MySQL ~]# netstat -anpt | grep 3306


4.登录验证


[root@MySQL ~]# mysqladmin -u root password '123123'      # 创建 MySQL 数据库密码
[root@MySQL ~]# mysql -u root -p 123123             # 登录 MySQL 数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye


MySQL 5.7 安装完成之后,默认的 4 个数据库:


  • information_schema:是一个信息数据库,这个数据库保存了所有数据库信息。如:数据库名、数据库表、访问权限等。
  • mysql:是一个系统库,主要负责存储数据库的用户,权限设置等。
  • performance_schema:是 MySQL 5.5 新增的一个性能优化引擎。
  • sys:库中数据与 performance_schema 一致,但是把 performance_schema 中内容复杂度降低了。


三、SQL 语句操作——增删改查



1.SQL 语句分类


  • DDL:数据定义语言,用来建立数据库,数据对象和定义其列。如 create alter drop。
  • DML:数据操纵语言,用来查询、插入、删除、修改数据库中的数据。如 select insert update delete。
  • DCL:数据控制语言,用来控制数据库组件的存取许可,存取权限等。如 commit rollback grant revoke。


2.数据记录类型


日期类型:


image.png


小数类型:


image.png


字符串类型:


image.png


3.表相关 SQL


  • 表是数据库中的数据组成的单位,类似于 Java 中的类,每个字段都有对应的数据类型。


创建表的原理:


  • 在客户端中写完创建表的 SQL 语句后客户端会把 SQL 语句交给 DBMS(MySQL);
  • DBMS(MySQL) 解析后会在数据库中创建语句中的表和表中字段。


表的引擎:


  • InnoDB:支持数据库的高级处理包括事务外键等。(表默认的引擎就是 InnoDB)
  • Myisam:只支持数据的基本存储。


创建表时指定表的字符集和引擎


格式:create table person (id int,name varchar(10)) engine=myisam charset=utf8;


  • 修改表的名字:rename table 旧表名 to 新表名


4.简单操作


[root@localhost ~]# mysql -uroot -p123123         #登录 MySQL 数据库
mysql> create database Coco;                #创建一个数据库名为 Coco
mysql> show create database Coco;             #查看 Coco 数据库详情
mysql> use Coco;                      #切换到 Coco 库中
mysql> create table 成绩表 (姓名 varchar(11),年龄 int,出生日期 date,身份证号 char(18) not null,成绩 float,primary key (身份证号));
mysql> describe 成绩表;                    #查看成绩表数据结构


注解:


  • varchar:可变长字符串类型。
  • int:整数类型。
  • date:时间类型。
  • char:固定字符串类型。
  • not null:不允许为空。
  • float:浮点类型。
  • primary key:设置主键,具有唯一性。


mysql> insert into 成绩表 values("张三",18,"2003-01-01",10086,85.5);
mysql> insert into 成绩表 values("李四",21,"2000-02-02",20086,85.5);
mysql> insert into 成绩表 values("王五",23,"1998-03-03",30086,86.5);
mysql> select * from 成绩表;


image.png


在成绩表最后添加字段:


mysql> alter table 成绩表 add 性别 char(8);


image.png


在成绩表最前面添加:


mysql> alter table 成绩表 add ID int first;


image.png


在某个字段后面添加:


mysql> alter table 成绩表 add 籍贯 varchar(20) after 出生日期;


image.png


删除表中指定字段:


mysql> alter table 成绩表 drop 籍贯;


image.png


修改成绩表字段名和类型:


mysql> alter table 成绩表 change 姓名 name char(14);


image.png


修改成绩表类型和顺序:


mysql> alter table 成绩表 modify name varchar(11) first;


  • 如想修改到某个位置,使用 alter table 成绩表 modify 字段名 新字段类型 after 年龄(就是将字段修改到年龄后面)。


image.png


修改成绩表引擎和字符集:


mysql> alter table 成绩表 engine=myisam charset=utf8;


image.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
存储 SQL 关系型数据库
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分表; 表设计优化:数据类型优化、冷热数据分表等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化。
【MySQL调优】如何进行MySQL调优?从参数、数据建模、索引、SQL语句等方向,三万字详细解读MySQL的性能优化方案(2024版)
|
7天前
|
存储 关系型数据库 MySQL
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
覆盖索引、前缀索引、索引下推、SQL优化、EXISTS 和 IN 的区分、建议COUNT(*)或COUNT(1)、建议SELECT(字段)而不是SELECT(*)、LIMIT 1 对优化的影响、多使用COMMIT、主键设计、自增主键的缺点、淘宝订单号的主键设计、MySQL 8.0改造UUID为有序
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
|
5天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
19 2
|
8天前
|
SQL 关系型数据库 MySQL
SQL和MySQL
SQL和MySQL
26 1
|
8天前
|
SQL 关系型数据库 MySQL
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
MySQL根据某个字段包含某个字符串或者字段的长度情况更新另一个字段的值,如何写sql
21 0
|
4天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
6天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
66 11
|
25天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
29天前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
1天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
26 13
MySQL的安装&数据库的简单操作

热门文章

最新文章