目录
概念
数据库的基本概念
- 数据(Data)
- 描述事物的符号记录
- 包括数字、文字、图形、图像、声音、档案记录等
- 以"记录"形式按统一的格式进行存储
- 表
- 将不同的记录组织在一起
- 用来存储具体数据
- 数据库
- 表的集合,是存储数据的仓库
- 以一定的组织方式存储相互有关的数据集合
- 数据库管理系统(DBMS)
- 是实现对数据库资源有效组织、管理和存取的系统软件
- 数据库系统
- 是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
- 用户可以通过DBMS或应用程序操作数据库
关系型数据库
- 关系数据库系统是基于关系模型的数据库系统
- 关系模型的数据结构使用简单易懂的二维数据库
- 关系模型可用简单的 "实体-关系" (E-R)图来表示
- E-R图中包含了实体(数据对象)、关系和属性三个要素
- 实体
-
- 也称为实例,对应现实世界中可区别于其他对象的"时间"或"事物"
- 如银行客户、银行账户等
- 属性
-
- 实体所具有的某一特性,一个实体可以有多个属性
- 如"银行账户"实体集中的每个实体均具有姓名、住址、电话等属性
- 实体所具有的某一特性,一个实体可以有多个属性
- 联系
- 实体集之间的对应关系成为联系,也称为关系
- 如银行客户和银行账户之间存在"储蓄"的关系
- 实体集之间的对应关系成为联系,也称为关系
- 所有实体及实体之间联系的集合构成一个关系数据库
- 关系数据库的存储结构是二维表格
- 每一行称为一条记录,用来描述一个对象的信息
- 每一列称为一个字段,用来描述对象的一个属性
非关系型数据库
- 非关系型数据库也被称作NoSQL(Not Only SQL)
- 存储数据不以关系模型为依据,不需要固定的表格式
- 优点
- 数据库可高并发读写
- 对海量数据高效率存储与访问
- 数据库具有高扩展性与高可用性
- 常用的有:Redis、MongoDB
MySQL
SQL:结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
- 一款开源的关系型数据库
- Oracle旗下产品
- 遵守GPL协议,可以免费使用与修改
- 特点
- 性能卓越、服务稳定
- 开源、无版权限制、成本低
- 多线程、多用户
- 基于C/S(客户端/服务器)架构
- 安全可靠
商业版与社区版
- MySQL商业版是由MySQL AB公司负责开发与维护,需要付费才能使用
- MySQL社区版是由分散在世界各地的MySQL开发者、爱好者一起开发与维护,可以免费使用
- 两者区别
- 商业版组织管理与测试环节更加严格,会比社区版更稳定
- 商业版不遵守GPL,社区版遵从GPL可以免费使用
- 商业版可获得7*24小时的服务,社区版则没有
示例
初始化MySQL
导入已经编译过的MySQL安装包,使用tar命令解压
bash
[root@localhost ~]# tar zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
安装所需依赖yum -y install gcc libaio
创建程序用户,关闭防火墙和内核安全机制
bash
[root@localhost ~]# useradd -M -s /sbin/nologin mysql
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
因为是解压即用的软件包,所以可以直接移动到方便使用的位置,并重命名为mysql
bash
[root@localhost ~]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/local/mysql
cd进入移动的目录内,创建数据目录,用于存放MySQL生成的数据,创建程序用户并修改该目录的属主和属组为mysql程序用户
最后创建软链接便于在终端中使用mysql命令
bash
[root@localhost ~]# cd /usr/local/mysql/
[root@localhost mysql]# mkdir data
[root@localhost mysql]# useradd -M -s /sbin/nologin mysql
[root@localhost mysql]# chown -R mysql:mysql data/
[root@localhost mysql]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
cd进入bin/目录下,使用mysqld脚本初始化
在初始化完成后的最后一行,最后一行会显示出临时密码,利用临时密码登录MySQL,把密码改为自己的密码。
bash
[root@localhost bin]# ./mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
2024-07-22T02:29:46.322987Z 1 [Note] A temporary password is generated for root@localhost: B;jb1+:.aah6 # 临时密码
cd到mysql安装目录下的data目录,初始化完成后,刚刚新建的data目录内也生成了文件和数据库
打开MySQL的配置文件,删除在安装系统时MariaDB数据库生成的全部内容,添加MySQL数据库对应内容。
bash
[root@localhost data]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address=0.0.0.0
port=3306
skip-name-resolve
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
- [mysqld_safe]:mysql启动时要执行的操作
优化参数不加也可以正常使用mysql
|------------------------|-----------------------|
| 优化参数 | 说明 |
| [mysqld_safe] | mysql启动时要执行的操作 |
| socket | 告诉本地客户端用哪个socket连接服务端 |
| bind-address | 绑定监听地址,0.0.0.0表示所有地址 |
| port | 指定端口号 |
| skip-name-resole | 跳过与客户端的域名解析,增加连接效率 |
| max_connections | 允许最大连接数 |
| character-set-server | 指定服务端使用的字符集 |
| default-storage-engine | 创建新表时默认使用的存储引擎 |
| lower_case_table_names | 表名不区分大小写 |
添加系统服务
拷贝mysql提供的服务文件到对应位置
bash
[root@localhost init.d]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
创建systemd守护进程能够管理mysql的服务文件,最后重载systemd
bash
[root@localhost init.d]# vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecReload=/etc/init.d/mysqld restart
ExecStop=/etc/init.d/mysqld stop
PrivateTmp=true # 把临时数据放到私有的临时目录里
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
然后利用临时密码修改mysql登录的密码
bash
[root@localhost ~]# mysql -uroot -p
password:这里输入之前生成的临时密码,回车
进入mysql界面
mysql> set password='123456'; # 修改密码
mysql> show databases; # 显示当前所有数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
进入名为mysql的数据库,列出所有表
再使用select命令测试查询mysql数据库中user表的所有内容,包括所有列的详细信息(\G 是以垂直方式显示,代替默认的水平方式)
bash
mysql> use mysql;
mysql> show tables;
mysql> select * from user\G