一、数据库简介
1.1数据库的组成
- 数据:描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以“记录”形式按统一格式进行存储
- 表:将不同的记录组织在一起,用来存储具体数据
- 数据库: 表的集合,是存储数据的仓库以一定的组织方式存储的相互有关的数据集合
1.2数据的分类
- 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据
- 非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如网页,有时候非常长,有时候几句话就没了;例如语音,视频都是非结构化的数据
- 半结构化数据:比如:XML或者HTML的格式的数据
1.3 数据库系统发展阶段
-
萌芽阶段:文件系统
-
使用磁盘文件来存储数据
-
-
初级阶段:第一代数据库
-
出现了网状模型、层次模型的数据库
-
-
中级阶段:第二代数据库
-
关系型数据库和结构化查询语言
-
-
高级阶段:新一代数据库
-
“关系-对象”型数据库
-
1.4 数据库管理系统(DBMS)
是实现对数据库资源有效组织、管理和存取的系统软件
功能:数据库的建立和维护功能、数据定义功能、数据操控功能、数据库的运行管理功能、通信功能
- 数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
- 数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保密模式 及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语 义的错误数据被输入或输出。
- 数据操纵功能:包括数据查询统计和数据更新两个方面。
- 数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
- 通信功能:DBMS 与其他软件系统之间的通信,如 Access 能与其他 Office 组件进行 数据交换。
1.5数据库系统(DBS)
是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库
1.6关系型数据库介绍
关系模型的数据结构使用简单易懂的二维数据表
- 每一行称为一条记录,用来描述一个对象的信息
- 每一行称为一个字段,用来描述对象的一个属性
实体联系模型E-R
实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实
体,把实体名写在框内
属性:实体所具有的特征或性质
联系:联系是数据之间的关联集合,是客观存在的应用语义链
• 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间
有一种关联关系
• 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间
• 实体之间的联系用菱形框表示
联系类型
-
一对一联系(1:1)
-
一对多联系(1:n):外键
-
多对多联系(m:n):增加第三张表
数据的操作
-
数据提取:在数据集合中提取感兴趣的内容。SELECT
-
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE
1.7非关系型数据库介绍
非关系数据库也称为NoSQL (Not Only SQL)
存储数据不以关系模型为依据,不需要固定的表格式
非关系型数据库的优点
数据库可高并发读写
对海量数据高效率存储与访问
数据库具有高扩展性与高可用性
二、数据库基本操作
2.1SQL分类
- 数据库:database
- 表:table,行:row 列:column
- 索引:index
- 视图:view
- 存储过程:procedure
- 存储函数:function
- 触发器:trigger
- 事件调度器:event scheduler,任务计划
- 用户:user
- 权限:privilege
2.2常用的数据类型
注:
对char来说,最多能存放字符个数255个,char如果存入数据的实际长度比指定长度要小 会补空格至指定长度 如果存入的数据的实际长度大于指定长度 低版本会被截取 高版本会报错
char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了
varchar存储规则:
4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节
2.3SQL 语言规范
书写规范
-
在数据库系统中,SQL 语句不区分大小写,建议用大写
-
SQL语句可单行或多行书写,默认以 " ; " 结尾
-
关键词不能跨多行或简写
-
用空格和TAB 缩进来提高语句的可读性
-
子句通常位于独立行,便于编辑,提高可读性
命名规则:
必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
不要使用MySQL的保留字,如tabble select show databases
SQL语句分类
DDL: Data Defination Language 数据定义语言 CREATE,DROP,ALTER
DML: Data Manipulation Language 数据操纵语言 INSERT,DELETE,UPDATE
软件开发:CRUD
DQL:Data Query Language 数据查询语言 SELECT
DCL:Data Control Language 数据控制语言 GRANT,REVOKE
TCL:Transaction Control Language 事务控制语言 COMMIT,ROLLBACK,SAVEPOINT
三、多实例
什么是数据库多实例
多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307等),同时运
行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。
多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现
多实例的好处
可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
多实例弊端
存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以具体的需求要根据自己的实际情况而定。
1. #安装mariadb-server并启动登入系统
yum -y install mariadb-server
systemctl start mariadb.service
#一路回车,并设置密码
mysql_secure_installation
#登入系统
mysql -u root -p123123
2. #创建目录和文件夹
mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
3. #设置属主属组
chown -R mysql.mysql /mysql
tree -d /mysql/
4. #初始化数据库
mysql_install_db --user=mysql --datadir=/mysql/3306/data
mysql_install_db --user=mysql --datadir=/mysql/3307/data
mysql_install_db --user=mysql --datadir=/mysql/3308/data
5. #编辑配置文件
vim /mysql/3306/etc/my.cnf
[mysqld]
port=3306
datadir=/mysql/3306/data
socket=/mysql/3306/socket/mysql.sock
log-error=/mysql/3306/log/mysql.log
pid-file=/mysql/3306/pid/mysql.pid
6. #修改3307和3308配置文件
sed 's/3306/3307/' /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf
sed 's/3306/3308/' /mysql/3306/etc/my.cnf >
/mysql/3308/etc/my.cnf
7. #准备启动脚本
vim /mysql/3306/bin/mysqld
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/usr/bin"
mysql_basedir="/mysql"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
function_start_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "Starting MySQL...\n"
${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
else
printf "MySQL is running...\n"
exit
fi
}
function_stop_mysql()
{
if [ ! -e "$mysql_sock" ];then
printf "MySQL is stopped...\n"
exit
else
printf "Stoping MySQL...\n"
${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
fi
}
function_restart_mysql()
{
printf "Restarting MySQL...\n"
function_stop_mysql
sleep 2
function_start_mysql
}
case $1 in
start)
function_start_mysql
;;
stop)
function_stop_mysql
;;
restart)
function_restart_mysql
;;
*)
printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
8. #重复上述过程,分别建立3307,3308的启动脚本
9. #授权并启动服务
chmod +x /mysql/3306/bin/mysqld
chmod +x /mysql/3307/bin/mysqld
chmod +x /mysql/3308/bin/mysqld
/mysql/3306/bin/mysqld start
/mysql/3307/bin/mysqld start
/mysql/3308/bin/mysqld start
#查看有没有启动成功
ss -natp|grep 33
10. #怎么看mysql这个进程是不是超线程
1)#找到mysql进程号
pstree -p
2)#查看,5450就是查看的进程号
cat /proc/5450/status |grep Threads
11. #登入mysql
#示例
mysql -h127.0.0.1 -P3308
12. #怎么杀掉这个进程,示例
/mysql/3308/bin/mysqld stop
13. #修改密码示例
mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password
'123123'
14. #设置开机启动
vim /etc/rc.d/rc.local
for i in {3306..3308};do /mysql/$i/bin/mysqld start;done
chmod +x /etc/rc.d/rc.local
开机后
bash /etc/rc.d/rc.local