MySQL 简介及SQL 语句

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: 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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
302 11
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
|
SQL 存储 缓存
一文搞懂MySQL中一条SQL语句是如何执行的
一文搞懂MySQL中一条SQL语句是如何执行的
|
存储 SQL 缓存
【Mysql】执行sql语句后,mysql都做了什么?
【Mysql】执行sql语句后,mysql都做了什么?
【Mysql】执行sql语句后,mysql都做了什么?
|
SQL 关系型数据库 MySQL
MySQL SQL语句给当前日期加一天和减一天
MySQL SQL语句给当前日期加一天和减一天
|
SQL 关系型数据库 MySQL
MySQL初级篇——常用SQL语句(大总结)(下)
MySQL初级篇——常用SQL语句(大总结)(下)
MySQL初级篇——常用SQL语句(大总结)(下)
|
SQL 关系型数据库 MySQL
MYSQL 批量修改表前缀与删除数据表 sql 语句
MYSQL 批量修改表前缀与删除数据表 sql 语句
|
存储 SQL 缓存
MySQL | SQL 语句是怎样执行的呢?
高产似母猪,废话少说,今天刚好读到一篇关于 MySQL 语句底层如何执行的文章,以下是我的理解,分享给你们。
MySQL | SQL 语句是怎样执行的呢?