MariaDB 教程:通过示例学习语法、命令
什么是 MariaDB?
MariaDB 是 MySQL 数据库管理系统。它由其原始开发人员创建。此 DBMS 工具为小型和企业任务提供数据处理功能。
MariaDB 是一个改进版本 MySQL。它具有许多内置的强大功能以及许多可用性、安全性和性能改进,这些改进是您在 MySQL.
这里有特点 MariaDB:
- 它在 GPL、BSD 或 LGPL 许可下运行。
- MariaDB 支持流行且标准的查询语言。
- 它带有许多存储引擎,包括可以与其他关系数据库管理系统集成的高性能存储引擎。
- 它提供了Galera集群技术。
- MariaDB 支持流行的 Web 开发语言 PHP。
- MariaDB 可以在不同的操作系统上运行,并且支持多种编程语言。
- MariaDB 附带了 MySQL. MySQL 具有对 DBMS 性能产生负面影响的功能。此类功能已在 MariaDB.
MariaDB 与 MySQL
以下是两者之间的一些主要区别 MariaDB vs MySQL
产品型号 | MariaDB | MySQL |
---|---|---|
更多存储引擎选项 | MariaDB 有 12 个新的存储引擎,你不会在 MySQL. | 与……相比,它的存储选项较少 MariaDB. |
速度改进 | MariaDB 相比而言,速度有所提高 MySQL。它具有许多用于优化速度的功能。这些功能包括派生视图/表、子查询、执行控制、磁盘访问和优化器控制。 | MySQL 与相比,速度较慢 MariaDB。它仅依赖少数功能进行速度优化,例如哈希索引。 |
更快的缓存/索引 | 使用内存存储引擎 MariaDB,INSERT 语句可以比标准完成 24% MySQL. | 内存存储引擎 MySQL 相比之下速度较慢 MariaDB. |
更大、更快的连接池 | MariaDB 带有先进的线程池,运行速度更快,支持多达 200,000 多个连接。 | 提供的线程池 MySQL 无法支持单次最多200,000万个连接。 |
改进复制 | In MariaDB,复制可以更安全、更快速地完成。与传统方式相比,更新速度也可以提高 2 倍 MySQL. | MySQL的社区版允许连接静态数量的线程。 MySQL的企业计划附带线程功能。 |
新功能/扩展 | MariaDB 带有新功能和扩展,包括 JSON、WITH 和 KILL 语句。 | 新的 MariaDB 未提供以下功能 MySQL. |
缺少功能 | MariaDB 缺少 MySQL 企业版。为了解决这个问题,它提供了替代的开源插件。因此, MariaDB 用户可以享受与 MySQL 企业版用户。 | 企业版 MySQL 使用专有代码。只有 MySQL 企业版可以使用此功能。 |
如何安装 MariaDB
作为独立应用程序安装
为了使用 MariaDB,你必须将它安装到你的电脑上。
可以按照以下步骤进行安装:
步骤1) 打开以下网址
从链接下载安装文件 https://downloads.mariadb.org/
步骤2) Double 单击文件开始安装
下载完成后,打开文件
步骤3) 单击“下一步”按钮
在弹出的窗口中,单击下一步按钮:
步骤4) 接受许可协议
然后单击下一步按钮:
步骤5) 选择 MariaDB 服务器
选择要安装的功能,然后单击下一步
步骤6) 输入密码
在下一个窗口中,您将需要更改 root 用户的密码。
- 输入密码并通过重新输入相同的密码进行确认。如果您想允许远程机器访问,请激活必要的复选框。
- 完成后,单击下一步按钮。
步骤7) 输入名称并选择端口号
在下一个窗口中,输入实例的名称,选择端口号,并设置必要的大小。单击下一步按钮:
步骤8) 点击下一步
在下一个窗口中,只需单击下一步按钮。
步骤9) 点击安装
单击“安装”按钮启动安装。
步骤10) 显示进度条
将显示一个显示安装进度的进度条:
步骤11) 点击完成按钮
安装完成后,您将看到“完成”按钮。单击按钮关闭窗口:
步骤12) 祝贺您!
你现在有 MariaDB 安装在您的计算机上。
使用命令提示符
现在,你有 MariaDB 安装在您的计算机上后,您就可以启动它并开始使用它了。这可以通过 MariaDB 命令提示符。
按照以下步骤进行操作:
步骤1) 单击“开始”,选择“所有程序”,然后单击 MariaDB...
步骤2) 选择 MariaDB 命令提示符。
步骤3) - MariaDB 命令提示符将启动。现在是登录的时候了。您应该以 root 用户身份登录,并使用在安装期间设置的密码 MariaDB. 在命令提示符中输入以下命令:
MySQL -u root -p
步骤4) 输入密码并按回车键。您应该已登录,如下所示:
您现在已登录 MariaDB.
数据类型
MariaDB 支持以下数据类型:
- 字符串数据类型
- 数字数据类型
- 日期/时间数据类型
- 大对象数据类型
字符串数据类型
其中包括:
字符串数据类型 | 描述 |
---|---|
字符(大小) | size 表示要存储的字符数。最多可存储 255 个字符。固定长度的字符串。 |
varchar(大小) | size 表示要存储的字符数。最多可存储 255 个字符。可变长度的字符串。 |
字体大小) | size 表示要存储的字符数。最多可存储 255 个字符。固定长度的字符串。 |
二进制(大小) | size 表示要存储的字符数。最多可存储 255 个字符。固定大小的字符串。 |
数值数据类型
它们包括以下内容:
数值数据类型 | 描述 |
---|---|
位 | 相当于 tinyint(1)的非常小的整数值。有符号值的范围在 -128 到 127 之间。无符号值的范围在 0 到 255 之间。 |
整数(米) | 标准整数值。有符号值的范围为 -2147483648 到 2147483647。无符号值的范围为 0 到 4294967295。 |
浮点数(m,d) | 具有单精度的浮点数。 |
双精度(m,d) | 双精度浮点数。 |
浮点(p) | 一个浮点数。 |
日期/时间数据类型
其中包括:
日期/时间数据类型 | 描述 |
---|---|
日期 | 显示格式为“yyyy-mm-dd”。值范围介于“1000-01-01”和“9999-12-31”之间。 |
日期时间 | 显示格式为“yyyy-mm-dd hh:mm:ss”。值范围为“1000-01-01 00:00:00”至“9999-12-31 23:59:59”。 |
时间戳(米) | 显示格式为“yyyy-mm-dd hh:mm:ss”。值范围为“1970-01-01 00:00:01”(utc)和“2038-01-19 03:14:07”(utc)。 |
时间 | 显示格式为“hh:mm:ss”。值范围为“-838:59:59”至“838:59:59”。 |
大对象数据类型 (LOB)
它们包括以下内容:
大对象数据类型 | 描述 |
---|---|
小斑点 | 其最大大小为 255 字节。 |
斑点(大小) | 最大大小为 65,535 字节。 |
中等斑点 | 其最大大小为 16,777,215 字节。 |
长文本 | 其最大尺寸为 4GB。 |
创建数据库和表
在中创建一个新数据库 MariaDB,您应该拥有仅授予根用户和管理员的特殊权限。
要创建新的数据库,您应该使用 CREATE DATABASE 命令,其语法如下:
CREATE DATABASE DatabaseName;
在这种情况下,您需要创建一个数据库并将其命名为 Demo。
开始 MariaDB 命令提示符并通过键入以下命令以 root 用户身份登录:
mysql -u root -p
输入 root 密码并按回车键。您将登录。
现在,运行以下命令:
CREATE DATABASE Demo;
然后,您就创建了一个名为 Demo 的数据库。确认数据库是否创建成功对您很有帮助。您只需运行以下命令即可显示可用数据库的列表:
SHOW DATABASES;
以上输出表明 Demo 数据库是列表的一部分,因此数据库创建成功。
MariaDB 选择数据库
为了能够使用或操作某个数据库,您必须从可用数据库列表中选择它。选择数据库后,您可以执行诸如在数据库中创建表之类的任务。
要选择数据库,您应该使用 USE 命令。其语法如下:
USE database_name;
您需要使用Demo数据库,可以通过以下命令选择:
USE Demo;
上图显示 MariaDB 命令提示符已从无更改为已选择的数据库的名称。
您现在可以继续在 Demo 数据库中创建表。
MariaDB –创建表
为了能够创建表,您必须选择一个数据库。可以使用 CREATE TABLE 语句创建表。以下是该命令的语法:
CREATE TABLE tableName (columnName columnType);
您可以将其中一列设置为主键。此列不应允许空值。
我们将在 Demo 数据库中创建两个表:Book 表和 Price 表。每个表有两列。
首先,我们创建包含两列(id 和 name)的 Book 表。运行以下命令:
CREATE TABLE Book( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(100) NOT NULL, PRIMARY KEY (id));
PRIMARY KEY 约束已用于将 id 列设置为表的主键。AUTO_INCREMENT 属性将为表中插入的每个新记录自动将 id 列的值增加 1。所有列都不允许为空值。
现在,创建第二张表,即价格表:
CREATE TABLE Price( id INT NOT NULL AUTO_INCREMENT, price float NOT NULL, PRIMARY KEY (id));
id 列已设置为该表的主键。
显示表格
现在您已经创建了两个表,确认表是否创建成功对您很有帮助。您可以通过运行以下命令来显示数据库中包含的表列表:
SHOW TABLES;
上面的截图显示在Demo数据库中成功创建了两个表。
显示表结构
要查看任何特定表的结构,可以使用 DESCRIBE 命令(通常缩写为 DESC)。该命令采用以下语法:
DESC TableName;
例如,要查看名为 Book 的表的结构,可以运行以下命令;
DESC Book;
该表有两列。要查看 Price 表的结构,可以运行以下命令:
DESC Price;
CRUD 和子句
插入
将数据插入到 MariaDB 表,则应使用 INSERT INTO 语句。此命令采用以下语法:
INSERT INTO tableName (column_1, column_2, ... ) VALUES (value1, value2, ... ), (value1, value2, ... ), ...;
上述语法表明您必须指定要插入数据的表列以及需要插入的数据。
让我们在 Book 表中插入一条记录:
INSERT INTO book (id, name) VALUES(1, 'MariaDB Book');
您已将一条记录插入表中。将一条记录插入 Price 表中:
INSERT INTO price (id, price) VALUES(1, 200);
已创建记录。
选择
SELECT 语句可帮助我们查看或查看数据库表的内容。例如,要查看 Book 表的内容,您需要运行以下命令:
SELECT * from book;
现在,查看 Price 表的内容:
SELECT * from price;
插入多条记录
我们可以将多条记录插入到 MariaDB 一次完成一个表。为了演示这一点,运行以下示例:
INSERT INTO book (id, name) VALUES (2,'MariaDB Book2'), (3,'MariaDB Book3'), (4,'MariaDB Book4'), (5,'MariaDB Book5');
您可以查询表来检查记录是否插入成功:
SELECT * FROM book;
记录已成功插入。通过运行此示例将多条记录插入 Price 表:
INSERT INTO price (id, price) VALUES (2, 250), (3, 220), (4, 190), (5, 300);
我们来确认一下记录是否创建成功:
SELECT * FROM price;
更新
UPDATE 命令帮助我们更改或修改已插入表中的记录。您可以将其与 WHERE 子句结合使用以指定要更新的记录。语法如下:
UPDATE tableName SET field=newValue, field2=newValue2,... [WHERE ...]
UPDATE 命令还可以与 SET、WHERE、LIMIT 和 ORDER BY 等子句结合使用。您很快就会看到这一点:
考虑包含以下记录的 Price 表:
我们将 id 为 1 的书的价格从 200 改为 250:
UPDATE price SET price = 250 WHERE id = 1;
该命令已成功运行。您现在可以查询表以查看更改是否已发生:
上面的截图显示更改已实施。考虑包含以下记录的 Book 表:
让我们将 Book 书名改为 MariaDB Book1。请注意,这本书的 ID 为 1。以下是该命令:
UPDATE book SET name = “MariaDB Book1” WHERE id = 1;
检查变更是否已实施:
上面的截图显示更改已成功实施。
在上面的例子中,我们每次只更改了一列。但是,我们可以一次更改多列。让我们用一个例子来演示一下。
让我们使用包含以下数据的价格表:
让我们更改 id 为 5 的书的 id 和价格。我们将其 id 更改为 6,将价格更改为 6。运行以下命令:
UPDATE price SET id = 6, price = 280 WHERE id = 5;
现在,查询表来检查更改是否成功:
更改已成功完成。
删除
当我们需要从表中删除一个或多个记录时,我们使用 DELETE 命令。该命令的语法如下:
DELETE FROM tableName [WHERE condition(s)] [ORDER BY exp [ ASC | DESC ]] [LIMIT numberRows];
考虑具有以下记录的价格表:
我们需要从表中删除最后一条记录。它的 ID 为 6,价格为 280。让我们删除该记录:
DELETE FROM price WHERE id = 6;
命令运行成功。让我们查询表来确认删除是否成功:
输出表明该记录已成功删除。
其中
WHERE 子句帮助我们指定需要进行更改的确切位置。它与 INSERT、SELECT、UPDATE 和 DELETE 等语句一起使用。考虑包含以下数据的 Price 表:
假设我们需要查看价格低于 250 的记录。我们可以运行以下命令:
SELECT * FROM price WHERE price < 250;
所有价格低于250的记录均已返回。
WHERE 子句可以与 AND 语句结合使用。假设我们需要查看 Price 表中价格低于 250 且 id 高于 3 的所有记录。我们可以运行以下命令:
SELECT * FROM price WHERE id > 3 AND price < 250;
只返回了一条记录。原因是它必须满足所有指定条件,即 id 大于 3 且价格低于 250。如果违反其中任何一个条件,则不会返回该记录。
该子句还可以与 OR 命令结合使用。让我们将上一个命令中的 AND 替换为 OR,然后查看收到的输出类型:
SELECT * FROM price WHERE id > 3 OR price < 250;
我们现在得到 2 条记录而不是 1 条。这是因为,对于符合条件的记录,它只需满足指定条件之一。
喜欢
此子句用于指定访问需要精确匹配的表数据时的数据模式。它可以与 INSERT、UPDATE、SELECT 和 DELETE 语句结合使用。
您应该将要查找的数据模式传递给该子句,它将返回 true 或 false。以下是可以与该子句一起使用的通配符:
- %:匹配 0 个或多个字符。
- _:用于匹配单个字符。
以下是 LIKE 子句的语法:
SELECT field_1, field_2,... FROM tableName1, tableName2,... WHERE fieldName LIKE condition;
让我们演示如何使用带有 % 通配符的子句。让我们使用包含以下记录的 Book 表:
我们需要查看名称以 M 开头的所有记录。我们可以运行以下命令:
SELECT name FROM book WHERE name LIKE 'M%';
所有记录都已返回,因为它们的名称以字母 M 开头。要查看所有以 4 结尾的名称,可以运行以下命令:
SELECT name FROM book WHERE name LIKE '%4';
仅返回一个名称,因为它是唯一满足条件的名称。
我们还可以用通配符来包围搜索模式:
SELECT name FROM book WHERE name LIKE '%DB%';
除了 % 通配符外,LIKE 子句还可以与 _ 通配符一起使用。这是下划线通配符,它只会查找单个字符。
让我们处理包含以下记录的价格表:
让我们检查价格为 1_0 的记录。我们运行以下命令:
SELECT * FROM price WHERE price LIKE '1_0';
它返回了价格为190的记录。我们还可以尝试另一种模式:
SELECT * FROM price WHERE price LIKE '_2_';
我们可以将 LIKE 子句与 NOT 运算符一起使用。这将返回所有不符合指定模式的记录。例如:
让我们使用包含以下记录的价格表:
让我们找出所有价格不是以 2 开头的记录:
SELECT * FROM price WHERE price NOT LIKE '2%';
只有一条记录不符合指定的模式。
排列方式
此子句可帮助我们按升序或降序对记录进行排序。我们将它与 SELECT 语句一起使用,如下所示:
SELECT expression(s) FROM tables [WHERE condition(s)] ORDER BY exp [ ASC | DESC ];
我们可以使用此子句而不添加 ASC 或 DESC 部分。例如:
我们将使用包含以下记录的价格表:
针对表运行以下命令:
SELECT * FROM price WHERE price LIKE '2%.' ORDER BY price;
在上面的命令中,我们按价格排序。记录按价格升序排列。这意味着当我们不指定顺序时,默认按升序排序。
让我们使用 DESC 选项运行该子句:
SELECT * FROM price WHERE price LIKE '2%' ORDER BY price DESC;
记录已按照我们指定的方式按价格降序排列。
让我们将 ORDER BY 子句与 ASC 属性一起使用:
SELECT * FROM price WHERE price LIKE '2%.' ORDER BY price ASC;
记录已排序,但价格按升序排列。这类似于我们使用不带 ASC 或 DESC 属性的 ORDER BY 子句的情况。
DISTINCT,
此子句帮助我们在从表中选择记录时消除重复。这意味着它帮助我们获得唯一的记录。其语法如下:
SELECT DISTINCT expression(s) FROM tableName [WHERE condition(s)];
为了证明这一点,我们将使用包含以下数据的价格表:
当我们从表中选择价格列时,我们得到以下结果:
SELECT price FROM Price;
我们有两条价格为 250 的记录,因此产生了重复。我们只需要唯一的记录。我们可以使用 DISTINCT 子句过滤这些记录,如下所示:
SELECT DISTINCT price FROM Price;
现在,上面的输出中没有任何重复项。
从
FROM 子句用于从数据库表中提取数据。它在连接表时也很有用。以下是该命令的语法:
SELECT columnNames FROM tableName;
要查看 book 表的内容,请运行以下命令:
SELECT * FROM price;
该子句可帮助您从数据库表中仅获取单个列。例如:
SELECT price FROM Price;
高级任务
存储过程
程序是指 MariaDB 可以向其传递参数的程序。过程不返回值。要创建过程,我们使用 CREATE PROCEDURE 命令。
为了演示如何创建和调用过程,我们将创建一个名为 myProcedure() 的过程,该过程可帮助我们从 book 表中选择 name 列。过程如下:
DELIMITER $ CREATE PROCEDURE myProcedure() BEGIN SELECT name FROM book; END; ;
过程已创建。我们只是将 SELECT 语句括在过程的 BEGIN 和 END 子句中。
现在,我们可以通过其名称调用该过程,如下所示:
CALL myProcedure();
该过程在调用时返回 book 表的名称列。
我们可以创建一个接受参数的过程。例如,我们需要选择书籍名称并使用书籍 ID 进行过滤。我们可以为此创建以下过程:
DELIMITER $ CREATE PROCEDURE myProcedure2(book_id int) BEGIN SELECT name FROM book WHERE id = book_id; END; ;
上面,我们创建了一个名为 myProcedure2() 的过程。此过程采用一个名为 book_id 的整数参数,它是我们需要查看其名称的书籍的 ID。要查看 ID 为 3 的书籍的名称,我们可以按如下方式调用该过程:
CALL myProcedure2(3);
功能
与过程不同,我们必须将参数传递给函数,并且函数必须返回一个值。要在 MariaDB,我们使用 CREATE FUNCTION 语句。该语句采用以下语法:
CREATE [ DEFINER = { CURRENT-USER | username } ] FUNCTION function-name [(parameter datatype [, parameter datatype]) ] RETURNS datatype [LANGUAGE SQL | DETERMINISTIC | NOT DETERMINISTIC | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA} | SQL SECURITY {DEFINER | INVOKER} | COMMENT 'comment' BEGIN declaration-section executable-section END;
上述参数说明如下:
产品型号 | 描述 |
---|---|
DEFINER 子句 | 此参数是可选的。如果不指定,则定义者将成为创建该函数的用户。如果需要指定不同的定义者,请包含 DEFINER 子句,其中 user_name 将成为该函数的定义者。 |
函数名 | 在 MariaDB. |
参数 | 传递给函数的参数。在函数创建过程中,所有参数都被视为 IN 参数 (而不是 OUT/INOUT 参数)。 |
返回数据类型 | 函数返回值的数据类型。 |
语言 SQL | 它影响便携性,但不影响功能。 |
确定性 | 仅当给定多个参数时,该函数才会返回一个结果。 |
不确定 | 当给定多个参数时,函数可能会返回不同的结果。 |
包含 SQL | 通知 MariaDB 此函数包含 SQL。数据库不会验证这是否属实。 |
没有 SQL | 此子句未使用,并且对您的功能没有影响。 |
读取 SQL 数据 | 告诉 MariaDB 该函数将使用 SELECT 语句读取数据,但不会修改数据。 |
修改 SQL 数据 | 告诉 MariaDB 此函数将使用 INSERT、DELETE、UPDATE 和其他 DDL 语句来修改 SQL 数据。 |
申明部分 | 这是应该声明局部变量的地方。 |
可执行部分 | 此处应添加功能代码。 |
下面是一个例子 MariaDB 功能:
DELIMITER // CREATE FUNCTION sumFunc (x INT ) RETURNS INT DETERMINISTIC BEGIN DECLARE sum INT; SET sum = 0; label1: WHILE sum <= 3000 DO SET sum = sum + x; END WHILE label1; RETURN sum; END; // DELIMITER ;
然后我们可以按如下方式调用上述函数:
select sumFunc(1000);
该命令将返回以下内容:
一旦完成某个函数的使用,删除它就大有裨益。这很容易,因为您只需调用采用以下语法的 DROP FUNCTION 语句:
DROP FUNCTION function_name;
例如,要删除名为 myFunc 的函数,我们可以运行以下命令:
DROP FUNCTION myFunc;
注册
当您需要一次从多个表中检索数据时,请使用 MariaDB JOINS。这意味着 注册 处理两个或多个表。支持以下三种类型的 JOINS MariaDB:
- 内/简单连接
- 左外连接/左连接
- 右外连接/右连接
让我们逐一讨论一下:
INNER JOIN
内连接返回连接条件为真的表中的所有行。其语法如下:
SELECT columns FROM table-1 INNER JOIN table-2 ON table-1.column = table-2.column;
例如:
我们将使用我们的两张桌子、书籍和书籍。
书籍表包含以下数据:
价格表包含以下数据:
目标是将 Book 表中的名称列和 Price 表中的价格列合并为一个表。这可以通过内连接来实现,如下所示:
SELECT book.name, price.price FROM book INNER JOIN price ON book.id = price.id;
该命令返回以下内容:
左外连接
此连接返回左侧表中的所有行以及另一个表中连接条件为真的行。其语法如下:
SELECT columns FROM table-1 LEFT [OUTER] JOIN table-2 ON table-1.column = table-2.column;
OUTER 关键字放在方括号内,因为它是可选的。
例如:
SELECT book.name, price.price FROM book LEFT JOIN price ON book.id = price.id;
该命令返回以下内容:
上表中的最后一条记录左侧没有匹配值。因此它被替换为 NULL。
右外连接
此连接返回右侧表中的所有行以及另一个表中连接条件为真的行。其语法如下:
SELECT columns FROM table-1 RIGHT [OUTER] JOIN table-2 ON table-1.column = table-2.column;
OUTER 关键字放在方括号内,因为它是可选的。
例如:
SELECT book.name, price.price FROM book RIGHT JOIN price ON book.id = price.id;
该命令返回以下内容:
原因是右侧表中的所有行都与另一个表中的行匹配。如果某些行不匹配,则第一列将为 NULL。