1 SQL简介
SQL(Structured Query Language)是一种用于管理和操作关系型数据库的编程语言。它被用于创建、修改和查询数据库,以及执行诸如数据插入、删除和更新等各种任务。SQL在Web开发、数据分析和数据库管理系统中被广泛应用。
SQL具有以下特点:
- 关系型数据库:SQL用于管理关系型数据库,其中数据被组织为表(Table)的形式。表由行(Row)和列(Column)组成,行表示数据记录,列表示数据属性。
- 数据定义语言(DDL):SQL包括数据定义语言,用于创建、修改和删除数据库对象,例如,CREATE TABLE用于创建表,ALTER TABLE用于修改表结构,DROP TABLE用于删除表。
- 数据操作语言(DML):SQL还包括数据操作语言,用于插入、更新和删除表中的数据。例如,INSERT INTO用于插入数据,UPDATE用于更新数据,DELETE用于删除数据。
- 查询语言(SELECT):SQL提供了强大的查询语言,用于从一个或多个表中检索数据。SELECT语句用于指定所需的列和条件,从而获取满足条件的数据。
- 条件和过滤:SQL允许使用条件和过滤器来限制查询结果。WHERE子句用于指定条件,以筛选满足条件的数据。
- 排序和分组:SQL允许对查询结果进行排序和分组。ORDER BY子句用于按照指定的列对结果进行排序,GROUP BY子句用于按照指定的列对结果进行分组。
- 连接和关联:SQL允许通过连接(JOIN)操作将多个表关联起来。通过指定关联条件,可以检索到相关联的数据。
- 聚合函数:SQL提供了各种聚合函数,如SUM、AVG、COUNT等,用于对数据进行统计和计算。
具体的SQL实现可能在不同的数据库管理系统中略有不同,每个系统可能具有自己的附加功能和语法,但基本的SQL概念在不同的实现中基本保持一致。
2环境搭建
安装VMware Workstation
创建一台虚拟机
#系统版本
[root@mrloam ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
#cpu
[root@mrloam ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 233M 2.6G 11M 843M 3.2G
Swap: 3.9G 0B 3.9G
虚拟机配置,由于我们只是针对sql进行学习,所有无需过多配置
2.1配置主机名和ip地址
[root@localhost ~]# hostnamectl set-hostname mrloam
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses "192.168.1.8/24" ipv4.gateway 192.168.1.254 ipv4.dns "8.8.8.8,114.114.114.114" connection.autoconnect yes
[root@localhost ~]# nmcli connection up ens33
2.2配置yum源
#使用本地镜像包挂载
cat >> /etc/fstab << 'EOF'
/media/CentOS-7-x86_64-Everything-2009.iso /mnt iso9660 defaults 0 0
EOF
#让配置生效
mount -a
#编写yum配置文件
cd /etc/yum.repos.d/
mkdir bak
mv * bak/
cat > local.repo << 'EOF'
[dvd]
name=dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
#查看yum软件包
yum clean all
yum repolist
3安装mysql
3.1下载mysql安装包
MySQL官网: http://www.mysql.com
[root@mrloam ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-el7-x86_64.tar.gz
3.2卸载系统自带的mariadb软件
#检查系统中的Mysql或mariadb,如果存在将其卸载。
[root@mrloam ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
#卸载mariadb
[root@mrloam ~]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@mrloam ~]# rpm -qa | grep mysql
#创建用户,主要的目的是为了统一MySQL的用户。
[root@mrloam ~]# useradd mysql -s /sbin/nologin
#按需安装依赖包
[root@mrloam ~]# yum -y install ncurses-devel libaio-devel gcc gcc-c++ numactl libaio glibc cmake autoconf
3.3解压mysql安装包并配置环境变量
[root@mrloam ~]# tar -xf mysql-5.7.35-el7-x86_64.tar.gz -C /usr/local/
[root@mrloam ~]# cd /usr/local/
[root@mrloam local]# mv mysql-5.7.35-el7-x86_64/ mysql
#创建mysql数据目录以及配置目录
[root@mrloam local]# mkdir -p /data/mysql/{data,logs,binlog}
#配置mysql环境变量,方便执行
[root@mrloam local]# cat >> /etc/profile << 'EOF'
#MYSQL
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin
EOF
[root@mrloam local]# source /etc/profile
3.4配置mysql
#创建mysql配置文件
[root@mrloam local]# cat > /etc/my.cnf << 'EOF'
#客户端配置,包括客户端连接mysql服务器的相关配置
[client]
port = 3306
socket = /usr/local/mysql/mysqld.sock
default-character-set = utf8mb4
#MySQL命令行客户端的配置
[mysql]
#指定MySQL命令行提示符的格式。
prompt="\u@mysqldb \R:\m:\s [\d]> "
#禁用自动补全功能
no-auto-rehash
#指定MySQL命令行客户端的默认字符集
default-character-set = utf8mb4
#MySQL服务器的配置
[mysqld]
#指定MySQL服务器运行的用户 (一般设置为mysql,需要提前创建mysql用户)
user = mysql
#指定MySQL服务器监听的端口号
port = 3306
socket = /usr/local/mysql/mysqld.sock
#禁用DNS反向解析
skip-name-resolve
# 设置字符编码
character-set-server = utf8
collation-server = utf8_general_ci
# 设置默认时区
#default-time_zone='+8:00'
#指定MySQL服务器的唯一标识
server_id = 8
# Directory
#安装目录
basedir = /usr/local/mysql
#数据存储目录
datadir = /data/mysql/data
#安全文件目录
secure_file_priv = /data/mysql/data
#PID文件的路径
pid-file = /usr/local/mysql/mysql.pid
#MySQL服务器的最大连接数
max_connections = 1024
#最大连接错误数
max_connect_errors = 100
#连接超时时间
wait_timeout = 100
#最大允许数据包大小
max_allowed_packet = 128M
#表缓存数量
table_open_cache = 2048
#连接请求队列长度
back_log = 600
#指定MySQL服务器的默认存储引擎
default-storage-engine = innodb
#允许二进制日志中包含函数创建语句
log_bin_trust_function_creators = 1
# Log
#关闭通用查询日志
general_log=off
#general_log_file = /data/mysql/logs/mysql.log
#错误日志的路径
log-error = /data/mysql/logs/error.log
# binlog
#指定二进制日志的路径和格式
log_bin = /data/mysql/binlog/mysql-binlog
binlog_format=mixed
#slowlog慢查询日志
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 2
log_output = FILE
log_queries_not_using_indexes = 0
#global_buffers
innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 64M
innodb_log_file_size = 512M
innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_data_file_path = ibdata1:20M:autoextend
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mysqldump]
#指定mysqldump工具使用快速导出模式
quick
#指定mysqldump工具允许的最大数据包大小为32M
max_allowed_packet = 32M
EOF
3.5初始化mysql并启动
#将MySQL目录授权,之所以需要授权,主要的目的是为了让MySQL启动的时候不至于应为权限的问题导致启动报错。
[root@mrloam local]# chown -R mysql.mysql /usr/local/mysql /data
#初始化mysql
[root@mrloam local]# mysqld --initialize --user=mysql --datadir=/data/mysql/data/ --basedir=/usr/local/mysql
#设置mysql快捷启动
[root@mrloam local]# cp mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mrloam local]# vim /etc/init.d/mysqld
...
basedir=/usr/local/mysql
datadir=/data/mysql/data
...
[root@mrloam local]# chmod +x /etc/init.d/mysqld
#启动mysql
[root@mrloam local]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
3.6连接mysql并修改默认密码
[root@mrloam local]# grep password /data/mysql/logs/error.log
2023-09-04T03:11:29.716467Z 1 [Note] A temporary password is generated for root@localhost: asptc;*Au1Dq
[root@mrloam local]# mysql -uroot -p'asptc;*Au1Dq'
root@mysqldb 11:26: [(none)]> set PASSWORD = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@mysqldb 11:27: [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
root@mysqldb 11:27: [(none)]> grant all privileges on *.* to 'root'@'%' identified by '123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
3.7配置systemctl管理mysql
[root@mrloam ~]# cat > /usr/lib/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
3.8 重新加载启动文件
#关闭mysql
[root@mrloam ~]# ps -ef | grep mysql
[root@mrloam ~]# kill -9 11957 12497
[root@mrloam ~]# systemctl daemon-reload
[root@mrloam ~]# systemctl enable --now mysql
[root@mrloam ~]# systemctl status mysql
3.9重新进入mysql
[root@mrloam ~]# mysql -uroot -p123