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
相关文章
|
29天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
45 1
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
124 1
|
18天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
32 0
|
18天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
30 0
|
1月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
45 0
|
1月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
13 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
23 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
81 1