一 mariadb简介
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的XtraDB,InnoDB的变体
二 mariadb支持事务transaction
事务(Transaction):组织多个操作为一个整体,要么全部执行,要么全部不执行。但是必须遵循ACID原则:A(原子性)C(一致性)I(隔离性)D(持久性)。
三 RDMBS设计范式基础
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF )即可。
- 1NF:每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列
- 2NF:第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK。非PK的字段需要与整个PK有直接的相关性。
- 3NF:满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的紫毒案件不能有从属关系
四 约束
- 约束:constraint ,表中的数据要遵守的限制
- 主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL ,一个表只能存在一个
- 惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL ,一个表可以存在多个
- 外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
- 检查:字段值在一定范围内
五 索引
将表中的某一个或某些字段抽取出来,单独将其组织到一个独特的数据结构中
常用的索引类型:树型 hash(只有使用MEMORY引擎的表才能使用)实现级别在存储引擎,应该创建在经常用作查询条件的字段上,索引有助于读请求,但不利于写请求
六 SQL语句
DDL: Data Defination Language
CREATE, DROP, ALTER
# 创建数据库
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
CHARACTER SET 'character set name'
COLLATE 'collate name'
# 删除数据库
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
DROP TABLE [IF EXISTS] tb_name;
# 修改数据库
ALTER TABLE 'tbl_name'
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
删除字段:drop
修改字段:
alter (默认值), change (字段名), modify
DML: Data Manipulation Language
INSERT, DELETE, UPDATE
# 插入数据
INSERT [INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} (val1,...),(...),...
# 删除数据
DELETE FROM tbl_name [WHERE clause] [ORDER BY'col_name'[DESC]][LIMIT [m,]n];
# 更新数据
UPDATE tbl_name SET col1=val1, col2=val2, ...[WHERE clause] [ORDER BY 'col_name' [DESC]][LIMIT [m,]n];
DCL :Data Control Language
GRANT, REVOKE
# 授权
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];
# 回收授权
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host
注意:MariaDB 服务进程启动时会读取mysql 库中所有授权表至内存
(1)GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
(2)对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:FLUSH PRIVILEGES;
DQL :Data Query Language
SELECT
# 数据提取 SELECTcol1,col2,...FROMtbl_name[WHEREclause][ORDERBY'col_name'[DESC]] [LIMIT [m,]n];
七 密码问题
当你刚刚创建数据库的时候有较大的安全漏洞,所以需要运行一个内置命令mysql_secure_installation
按照提示给数据库创建密码,和删除test.database(测试库)删除匿名用户,是否确定远程登陆、是否删除,最后一定要重新加载表的权限。
忘记管理员密码的解决办法:
(1) 启动mysqld进程时,使用--skip-grant-tables和--skip-networking选项;
CentOS 7:mariadb.service
CentOS 6:/etc/init.d/mysqld
改完后,systemctl daemon-reload
(2) 通过UPDATE命令修改管理员密码;
(3) 以正常方式启动mysqld进程