MySQL
1:数据库结构模型
数据库模型主要有:
- 层次模型
- 网络模型
- 关系模型
- 对象模型
关系模型:
二维关系:row(行), column(列)
数据库管理系统: DBMS
关系: Relational ,RDBMS
2: RDBMS专业名词
常见的关系型数据库管理系统
- MySQL:5.7之前版本是开源版本,8.0以后是商业软件
- PostgreSQL: 简称为pgsql
- Oracle (甲骨文)商业软件
- MSSQL (微软数据库)
- MariaDB: (MySQL团队开发的类似于MySQl的开源软件)
SQL: 结构化查询语言,语法规则:
-
基础SQL指令通常是以行为单位
-
SQL指令需要语句结束符,默认是英文分号:
;
、\g、\G- \G:主要用于查询数据,立体展示结果
约束: 向数据表提供数据要遵守的限制
- 主键约束: (primay key ) 唯一且非空,必须提供数据
- 唯一约束 :(unique key) 唯一标识本行,可以空,但是只能有一个空值 不同于主键一个表可以有多个
- 检查约束: 对该列数据的范围、格式的限制
- 默认约束:输入空值自动填入该数据的默认值
- 外键约束: (foreign key) 建立两表间的关系并引用在主表的列中
**索引:**将表中的一个或多个字段中的数据复制一份另存,并且这些数据需要按特定次序排序存储,查询时起到字典目录的作用,提升查询效率
3 SQL语句
SQL语句有三种类型:
DDL: (Data Defination Language)数据定义语言
DML:( Data Manipulation Language)数据操纵语言
DCL: (Data Control Language)数据控制语言
SQL语句类型 | 对应操作 |
---|---|
DDL | create : 创建 drop:删除 alter : 修改 |
DML | insert: 向表中插入数据 delete: 删除表中的数据 update: 更新表中数据 select:查询表中的数据 |
DCL | grant: 授权 revoke: 移除授权 |
4: MySQL安装与配置
#: 安装依赖(系统环境redhat8)
[root@localhost local]# yum -y install ncurses-devel openssl-devel openssl cmake mariadb-devel
#: 将mysql源码包上传至服务器中或者直接使用wget下载进行解压
[root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
[root@localhost ~]# tar -xf mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz
#: 将解压后的文件移动到/usr/local下,并改名为mysql
[root@localhost ~]# mv mysql-5.7.39-linux-glibc2.12-x86_64 /usr/local/mysql
[root@localhost ~]# ls /usr/local/
apache apr-util etc include lib64 mysql share
apr bin games lib libexec sbin src
#: 创建mysql系统用户和mysql系统组
[root@localhost ~]# groupadd -r mysql
[root@localhost ~]# useradd -r -s /sbin/nologin -M -g mysql mysql
[root@localhost ~]# id mysql
uid=993(mysql) gid=990(mysql) groups=990(mysql)
#:递归修改mysql文件夹的属主属组
[root@localhost ~]# cd /usr/local/
[root@localhost local]# chown -R mysql:mysql mysql
[root@localhost local]# ll -d mysql/
drwxr-xr-x. 9 mysql mysql 129 Aug 29 14:04 mysql/
[root@localhost local]# ll mysql/
total 268
-rw-r--r--. 1 mysql mysql 255074 Jun 8 2022 LICENSE
-rw-r--r--. 1 mysql mysql 566 Jun 8 2022 README
drwxr-xr-x. 2 mysql mysql 4096 Aug 29 14:04 bin
drwxr-xr-x. 2 mysql mysql 55 Aug 29 14:04 docs
-----省略-----
#: 添加mysql的环境变量
[root@localhost local]# echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@localhost local]# . /etc/profile.d/mysql.sh
[root@localhost local]# echo $PATH
/usr/local/mysql/bin:/usr/local/apache/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#: 建立mysql数据存放目录
[root@localhost local]# mkdir /opt/data
[root@localhost local]# chown -R mysql:mysql /opt/data/
[root@localhost local]# ll -d /opt/data
drwxr-xr-x. 2 mysql mysql 6 Aug 29 14:25 /opt/data
#: 初始化数据库
[root@localhost local]# ./mysql/bin/mysqld --initialize --user=mysql --datadir=/opt/data/
-------省略-------
2023-08-29T06:30:30.734710Z 1 [Note] A temporary password is generated for root@localhost: lzH?uSii>4X%
***:最后一行有一个mysql登录的临时密码,只能使用一次,登录数据库后必重新设置一次密码
#: 配置mysql
[root@localhost local]# ls
apache apr-util etc include lib64 mysql share
apr bin games lib libexec sbin src
[root@localhost local]# ln -s mysql/include/ include/mysql
[root@localhost local]# ll -d include/mysql
lrwxrwxrwx. 1 root root 14 Aug 29 14:36 include/mysql -> mysql/include/
[root@localhost local]# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
[root@localhost local]# ldconfig
#: 生成配置文件
[root@localhost local]# cat > /etc/my.cnf <<EOF
> [mysqld]
> basedir = /usr/local/mysql
> datadir = /opt/data
> socket = /tmp/mysql.sock
> port = 3306
> pid-file = /opt/data/mysql.pid
> user = mysql
> skip-name-resolve
> EOF
#: 配置启动脚本
[root@localhost local]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost local]# sed -ri 's#^(basedir=).*#\1/usr/local/mysql#g' /etc/init.d/mysqld
[root@localhost local]# sed -ri 's#^(datadir=).*#\1/opt/data#g' /etc/init.d/mysqld
#: 启动mysql
[root@localhost local]# service mysqld start
Starting MySQL.Logging to '/opt/data/localhost.localdomain.err'.
SUCCESS!
[root@localhost local]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 80 *:3306 *:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
#: 修改mysql数据库的密码
[root@localhost lib]# mysql -uroot -p
Enter password: #:这个密码是初始化时自动生成的密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.39
mysql> set password = password('Liuhongsheng1');
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> exit
Bye
#: 用户免密登录,在root家目录书写以下文件
[root@localhost ~]# cat .my.cnf
[client]
user = <用户名>
password = <密码>
如果登录时发现如下报错可以使用如下方式解决
#: 登录mysql时,出现的错误
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
#: 此处报错信息提示缺少libncurses.so.5文件,在lib64里找到一个最新版本的做一个软连接,使文件存在
[root@localhost lib]# ln -s /lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5
#:再次登录时又缺少另外一个libtinfo.so.5包
[root@localhost lib]# mysql -uroot -p
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
[root@localhost lib]# ln -s /lib64/libtinifo.so.6 /usr/lib64/libtinifo.so.5