speculiarZZ

导航

MariaDB简介

一、什么是数据库

  DB 与 DBMS :DB(DataBase)即数据库,存储已经组织好的数据的容器。DBMS(DataBase Manage System)是数据库管理系统用来对数据库及数据库中的数据进行操作。 我们平时所说的 Oracle、Mysql、MariaDB 指的就都是 DBMS。 在数据库中存放的数据都是以表的形式进行的,在数据库中表(table)是结构化的文件,用来存储特定类型的数据。一个数据库中,表的名字是唯一的。 对于表要关注以下几个部分:(1)框架(Schema):关于数据库和表布局以及属性信息。(2)列(column):表中的一个字段,表由一列或多列构成,列中存储表的一部分信息,每一列存储一条特定信息。 数据库中的每一列都有相应的数据类型,数据类型定义了该列可以存储哪种类型的数据。(3)行(row):表中的一条记录。(4)主键(primary key):唯一标识表中每一行的列(或者多列的集合),任意两行不具有相同的主键值(主键列中的每行数据不能相同), 主键列不能包含空值(NULL)。

  SQL 语句 定义:结构化语言(Structured Query Language)用来管理关系型数据库,可以大致做如下分类(1)数据查询语言(DQL:Data Query Language):功能:从数据库中查询相关信息或记录,主要的关键字:SELECT,WHERE,ORDER BY,GROUP BY 和 HAVING(2)数据操作语言(DML:Data Manipulation Language):功能:对数据库中的表的内容进行相关操作,主要的关键字:INSERT,UPDATE 和 DELETE(3)数据控制语言(DCL):功能:对权限进行相关操作,主要的关键字:GRANT或REVOKE (4)数据定义语言(DDL):功能:对数据库、表等进行相关操作,主要的关键字:CREATE和DROP (5)事务处理语言(TPL):功能:对事务进行相关操作,主要的关键字:START TRANSACTION,COMMIT和ROLLBACK(6)指针控制语言(CCL):功能:对指针进行相关操作,主要的关键字:DECLARE CURSOR(指针),FETCH INTO和 UPDATE WHERE CURRENT。MariaDB 是一个基于 Mysql 的DBMS,完成了存储,获取,管理以及操作数据库的工作。DBMS一类是基于共享文件系统,另一类是基于客户端/服务器。对于文件系统的适用于桌面应用,一般不用来进行较高端或者更苛刻的应用。而基于客户端/服务器的 DMBS 中,客户端与服务器的关系如下:(1)用户使用客户端,向服务器发送数据库操作的指令。(2)服务器接受到来自客户端的指令,根据指令对数据库或数据库中的数据进行 相关操作。(3)服务器将操作完成后的结果返回给客户端供用户查看。

二、MariaDB 的安装及初始化

1、配置好本地 yum 源

2、安装 MarIaDB 的服务器端和客户端 yum install mariadb -y版本较低,可以使用新的源安装

3、开启 mariadb 服务 systemctl start mariadb开机自启数据库 systemctl enable mariadb

4、初始化 MariaDB mysql_secure_installation

MariaDB 软件的相关信息 (1)MariaDB 配置文件:/etc/my.cnf 配置文件目录:/etc/my.cnf.d (2)MariaDB 配置文件模板:/usr/share/mysql (3)MariaDB 日志:/var/log/mariadb (4)MariaDB 数据库:/var/lib/mysql 

 

三、MariaDB简单的基础操作

1、登录 mysql -u 用户名 -p 此方法密码被隐藏或:mysql -u 用户名 -p 密码 

2、查看当前 DBMS 下管理的所有的数据库 show databases;

3、创建数据库 create database 数据库名;

4、使用数据库 use 数据库名;

5、查看当前数据库内的所有表 show tables;

 

6、建立新表create table 表名(字段1,字段2);

7、查看表的结构 describe 表名;

8、检索表中所有字段(查看表中所有列/查看表的全部内容) select 查询的字段 from 表名;

9、显示当前服务器状态 show status; 注:查询的结果是变量名和变量的具体值

10、显示创建数据库/表所使用的命令

创建数据库的命令:show create database 数据库名;

创建表的命令:show create table 表名;

11、显示当前登录账户的权限 show grants; 

四、数据库简单查询

一、select简单查询 

对于数据库来说,最重要的操作可以说是数据的查询了,大多数情况我们需要查询到自己想要东西来获取信息

1、select检索一列或多列(1)检索单独一列 select 列名 from 表名;(2)检索多列数据 select 列 1,列 2... from 表名;(3)查询所有字段 select * from 表名;

2、去除查询结果中的重复值 select distinct 列 1,列 2... from 表名;distinct 关键字对它后面跟的所有列都生效

3、使用 limit 子句控制显示结果条目数(1)select 列 1,列 2... from 表名 limit 需要显示的行数;(2)select 列 1,列 2... from 表名 limit x,y;x 是从第几行开始显示(包括 x) y 是显示的行数MariaDB的行数从第 0 行开始

4、使用 order by 子句排序
order by 子句对查询结果排序,默认正序排列。

1)、针对单独列进行排序(1)select 列名 from 表名 order by 列名;(2)select 列名 1 from 表名 order by 列名 2;

2)、针对多列进行排序(1)select 列 1,列 2 from 表名 order by 列 1,列 2;(2)降序排序(desc) select 列 1,列 2 from 表名 order by 列 1 desc,列 2; desc 仅对其前面的列有效,其他后面没有 desc 的列仍然以正序排序

3)、使用 order by 子句和 limit 子句显示最大/最小值(1)显示最小值 select 列 1 from 表名 order by 列 1 limit 1;(2)显示最大值 select 列 1 from 表名 order by 列 1 desc limit 1; 

5、where 子句
1)、使用=操作符查询 select 列 1,列 2... from 表名 where 列 1='值'

2)、使用<操作符查询 select 列 1,列 2... from 表名 where 列 1<'值'

3)、使用 between 操作符查询 select 列 1,列 2... from 表名 where 列 between 值 1 and 值 2;注:between 和 and 为闭区间(即包含两边的值)

4)、使用 in 操作符查询 select 列 1,列 2 from 表名 where 列 in (值 1,值 2,值 3...)

二、 子查询

多个表间的 select 语句的嵌套查询 例:检索所有订单包含物品 TNT2 的客户信息 1、不使用子查询时 (1)先查询所有包含物品 TNT2 的订单的订单号 select order_num,prod_id from orderitems where prod_id='TNT2'; (2)再查询上述订单号的订单是哪个客户下的 select cust_id,order_num from orders where order_num in(20005,20007); (3)最后查询上述客户的详细信息 select cust_id,cust_name,cust_contact from customers where cust_id in (10001,10004); 2、使用子查询 select cust_id,cust_name,cust_contact from customers where cust_id in (select cust_id from orders where order_num in(select order_num from orderitems where prod_id='TNT2')); 注:子查询最多不超过 15 级,一般使用时不超过 2 级 大多数子查询都可以更改为连接查询

三、连接查询

联合查询
使用 union 连接两个 select 语句进行联合查询: select 列 1,列 2... from 表名 where 条件 union select 列 1,列 2... from 表名 where 条件;

使用 union 查询的特点(1)一个 union 必须包含两个或两个以上 select 语句(2)在 union 中的每个查询都必须包含相同的列、表达式或者聚合函数(3)列数据类型必须是兼容的,他们不必是完全相同的类型,但必须是 MariaDB 能够转换的(4)union 从查询结果集中自动移除任何重复行,如果要返回所有匹配结果,用 union all 代替 union(5)当使用 union 联合查询时只可以使用一个 order by 子句,并且必须出现在 最后一个 select 语句后面(6)union 也适用于对不同的表进行联合查询
连接查询
1、内连接 

使用 inner join … on 语句: select 数据库名.表名 from 库名 inner join 数据库名 on 条件
2、外连接 左外连接以左侧数据表为基础,右外连接以右侧数据表为基础。

(1)左外连接 查询所有客户的订单信息:select c.cust_id,o.order_num from customers as c left outer join orders as o on c.cust_id=o.cust_id;

(2)右外连接 查询所有订单是哪些客户下的:select c.cust_id,o.order_num from customers as c right outer join orders as o on c.cust_id=o.cust_id; 

 

五、视图、事务

  视图是一个虚拟表,其内容由查询定义。 视图的优点: (1)视点集中 (2)简化操作 (3)定制数据 (4)分隔合并数据 (5)安全性好

在数据库中语法格式及限定条件(1)语法格式:create view 视图名 as select 语句; (2)限定条件: 1) 像表一样,视图命名必须唯一 2) 创建视图没有数量限制 3) 创建视图必须有安全访问权限(由数据库管理员授予) 4) 视图可以嵌套,即可以建立一个视图,该视图可以使用基于其他视图返回 数据的查询 5) 视图不可以建立索引,触发器。

想要删除视图 drop view 视图名; 注:删除视图不会删除视图中数据来源的基本表。
事务
1、相关概念 (1)事务(transaction):一组 SQL 语句 (2)回滚(rollback):撤销指定 SQL 语句的处理过程 (3)提交(Commit):将还未保存的数据库语句写入数据库表 (4)保存点 (Savepoint):事务集中的一个临时占位符,可进行回滚(与撤销整个 事务不同)

2、事务的特性(ACID) A 原子性:(Atomicity)要么全部执行,要么全不执行 C 一致性: (Consistency)事务的相关操作,需要保持数据的一致 I 隔离性: (Isolation)事务与事务间互相隔离 D 持久性:(Durability)事务一旦提交,数据立即生效

3、使用事务处理  

start transaction;进行相关操作;commit;即可完成一个事务

如果不commit,直接rollback;就会回滚到事务开启之前的状态

六、数据操作

1、创建表 创建表语法结构: create table 表名 ( 列名 1 数据类型 是否可以为空 是否自增长, 列名 2 数据类型 是否可以为空 是否自增长, …… …… primary key(主键列名) )engine=引擎名;
(1)数据类型 字符串数据类型:char、varchar 数值数据类型:int(整数)、boolean、decimal(小数) 时间和日期数据类型:date、datetime 二进制数据类型 (2)是否自增长 auto_increment (3)如何查看当前 DBMS 支持的所有数据库引擎 show engines

2、修改表中的列(字段)

(1)向表中新增一个字段 alter table 表名 add 列名 列的属性;

(2)从表中删除一个字段 alter table 表名 drop column 列名;

(3)更改表中某列的数据类型: alter table 表名 modify 列名 新的列的类型;

         同时更改列名及数据类型: alter table 表名 change 旧列名 新列名 新的列类型; alter table 表名 change column 旧列名 新列名 新的列类型;

3、重命名表 rename table 旧表名 to 新表名;

4、删除表 drop table 表名; 

5、向表内插入数据 (1)直接插入数据 insert into 表名 values ('值 1','值 2',...);(2)指定字段插入 insert into 表名(列名 1,列名 2...) values ('值 1','值 2'...); 
(3)插入多条记录 insert into 表名(列名 1,列名 2...) values ('值 1','值 2'...),( '值 1','值 2'...);

6、更新表中数据 update 表名 set 列名='新值' where 主键列名='值 1';

7、删除表中数据 delete from 表名 where 列名='值'; (1)删除表中的所有记录: delete from 表名; (2)快速清空整个表: truncate 表名; truncate h_info; 注: truncate 比 delete 执行的速度快,占用资源少,truncate 可清空主键记录。
8、为关系表增加外键
sql 语句格式: alter table 表 1 add constraint 约束名 foreign key(表 1 中列) references 表 2(列名);

七、访问控制

1、访问控制 通过创建不同的用户,并给这些用户赋予适当的权限来实现 MariaDB 的访问控制。
2、用户管理 (1)查看当前系统用户 当前 DBMS 的账户信息存储在 mysql 数据库下的 user 表内 use mysql; select user from user;

(2)创建用户 create user 用户名 identified by '密码';

(3)修改用户 重命名用户: rename user 旧名 to 新名;修改用户密码: set password for 用户名=password('密码'); 修改当前登录用户密码 set password=password('密码');

(4)修改用户权限 (a)新建用户的默认权限:没有权限 (b)查看用户权限 show grants for 用户名; (c)为用户赋权 grant 权限 on 数据库.表 to 用户名; 
 (d)撤销用户权限 revoke 权限 on 数据库.表 from 用户名; revoke select on test.* from jack; 注:在撤销权限时,撤销的权限必须存在。

(5)删除用户 drop user 用户名;注:可以直接对 mysql 数据库下的 user 表进行添加/删除/更新操作来添加/删除 /更新用户。但直接对该表进行操作可能会对该表及该表的架构产生一定的风险, 所以推荐使用命令及相关函数来实现用户的添加/删除/更新。

posted on 2019-05-22 15:14  投个小三分  阅读(887)  评论(0编辑  收藏  举报