1、基本概念
- 关系型数据库
关系:关系就是二维表。并满足如下性质:
表中的行、列次序并不重要
行row:表中的每一行,又称为一条记录record
列column:表中的每一列,称为属性,字段,域field
主键(Primary key):用于惟一确定一个记录的字段
域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值 - 事务
事务transaction:多个操作被当作一个整体对待,比如cmd1,cmd2,cmd3是 一个事务,如果只做了前两个动作就停电了,说明事务还没有做完,下次来电的时候系统会自动撤销前两个动作进行重做,叫做回滚rollback,如果三个动作都做完了,会执行提交指令commit,就回滚不了了。
undo:撤销,就相当于回滚。
redo:重做,数据库也有日志,数据库对文件进行修改时也是在内存中进行修改,修改完毕后先保存到日志里,但还没有保存到数据库里就停电了。来电之后会把事务重新保存到数据库里称为重做。 - 范式
1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一的区分。通常为表的某一列加一个主键primary key,非主键的字段需要与整个主键有直接相关性,比如主键由两列组成时,非主键的字段不能与主键某一列有相关性,而是要与整个两个列有相关性。
3NF:属性不依赖于其它非主键的属性,满足第三范式必须先满足第二范式。第三范式要求非主键的字段间不能有从属关系。 - 约束
约束:constraint,表中的数据要遵守的限制
主键:作用在某一列时,这一列中的每一行必须唯一不能重复,而且这一列不能不赋值,即NOT NULL,也可以两个或者多个列合起来做为主键,叫做复合主键,两个列合起来的每一行必须唯一,不能有重复,但单独某一列可以重复,一个表只能存在一个主键
惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据,这个表被称为外键表,也就是这个外键表里的某个字段的数据来自于另外一个表里的主键或者唯一键字段的数据。
检查:字段值在一定范围内 - 关系运算:
选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联 - 索引
可以对表中的某一个列创建索引,相当于书的目录,便于以后快速查找
索引是特殊数据结构;定义在查找时作为查找条件的字段
优点:提高查询速度
缺点:占用额外空间,影响插入速度
创建索引必须要有索引名称 - 视图
是一个虚拟的表,把真实的表中的某一行或者某一列提取出来,用于给户客户端显示。 - 触发器
作用是可以让多张表同步,比如数据库中有两张表,一张表为客户所买商品的表,另外一张为库存表,客户买了一个商品后会在商品表里增加一个商品,同时库存表里会减少一个库存,触发器的作用就是使这两张表同步。
2、数据库软件mysql和mariadb的安装
提供数据库管理的软件在centos上一般有两种,centos6中默认的是mysql,centos7中默认是mariadb,这两种软件是同一个创始人创建的,是完全兼容的。
- CentOS安装光盘
项目官方:
https://downloads.mariadb.org/mariadb/repositories/
这个网站提供的连接可以直接做为yum源如下图
image.png
这个网址中centos6和centos7都可以使用做为yum源 - 安装 mysql和mariadb
服务器端
yum isntall mysql-server
yum install mariadb-server
客户端工具是mysql
[root@centos6 lib]#rpm -qf `which mysql`
mysql-5.1.73-8.el6_8.x86_64
- 启动服务
service mysqld start
systemctl start mariadb
[root@centos7 ~]#ss -ntlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:* users:(("mysqld",pid=5207,fd=14))
mysql服务走的是tcp的3306端口。
3、简单的操作
[root@centos6 lib]#mysql ---可以加-u表示以谁的身份登录
mysql> show databases; ----显示数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> use mysql ---切换到这个数据库下,相当于cd命令
mysql> show tables; ---显示这个数据库下有哪些表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| user |
+---------------------------+
23 rows in set (0.00 sec)
mysql> desc user; ---显示这个表里包含哪些列
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Password | char(41) | NO | | | |
mysql> select user,host,password from user; ---表示选择查看表里的哪些列
如果没有use到mysql就得输入:select user,host,password from mysql.user ---指明查看哪个数据库里的哪张表
+------+--------------------+----------+
| user | host | password |
+------+--------------------+----------+
| root | localhost | |
| root | centos6.magedu.com | |
| root | 127.0.0.1 | |
| | localhost | |
| | centos6.magedu.com | |
+------+--------------------+----------+
5 rows in set (0.00 sec)
mysql> select user(); ---显示登录的用户名
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
在mysql里面登录的用户名由用户名+主机名/IP两部分组成。
4、如何提高访问速度
配置文件:
/etc/my.cnf和/etc/my.cnf.d/ *.cnf
Vim /etc/my.cnf
[mysqld]加一行:
skip-networking=1 ---加上此行就表示ip地址不反向解析成名字,可以提高访问速度
注意:加这一行之前要先把服务启动了,然后再修改配置文件,然后重新启动服务,否则服务起不来
5、设置密码口令,提高安全性
输入如下命令即可进行设置
mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库