Mariadb操作命令指南

MariaDB简介

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

数据库应用程序与主应用程序分开存在,并存储数据集合。 每个数据库都使用一个或多个API来创建,访问,管理,搜索和复制它所包含的数据。

数据库也使用非关系数据源,如对象或文件。 然而,数据库证明了大数据集的最佳选择,这些数据集将受到缓慢的检索和其他数据源的写入的影响。

关系数据库管理系统(RDBMS)将数据存储在各种表中。这些表之间的关系是使用主键和外键建立的。

RDBMS提供以下功能 -

  • 它们使您能够使用表,列和索引来实现数据源。
  • 它们确保跨多行表的引用的完整性。
  • 它们自动更新索引。
  • 它们解释SQL查询和操作来处理或从表中获取数据。

RDBMS术语

在开始讨论MariaDB之前,让我们回顾一下与数据库相关的一些术语。

  • 数据库 - 数据库是由包含相关数据的表组成的数据源。
  • - 表示电子表格,是包含行列数据的矩阵。
  • - 表示数据元素的列是保存一种类型的数据的结构; 例如,发货日期。
  • - 行是结构分组的相关数据; 例如,客户的数据。 它也被称为元组,记录或记录。
  • 冗余 - 这个术语是指两次存储数据以加速系统数据的访问。
  • 主键 - 这是指唯一的识别值。 该值不能在表中出现两次,并且只有一行与其关联。
  • 外键 - 外键用作两个表之间的连接。
  • 复合键 - 复合键或复合键是引用多个列的键。由于列缺乏唯一的数量,它指的是多列。
  • 索引 - 索引实际上与书籍的索引目录类似相同,用于加快查找数据。
  • 引用完整性 - 此术语是指确保所有外键值指向现有行。

MariaDB数据库

MariaDB是MySQL原始开发人员创建的一个MySQL的流行分支。它源于与MySQL被Oracle收购有关的担忧。它支持小数据处理任务和企业需求。 它的目标是成为MySQL的替代品,只需要简单地卸载MySQL并安装MariaDB。MariaDB提供了与MySQL相同的功能。

MariaDB的主要特点

MariaDB的重要功能是 -

  • 所有MariaDB都在GPL,LGPL或BSD使用协议之下发布。
  • MariaDB包含多种存储引擎,包括高性能存储引擎,用于与其他RDBMS数据源一起工作。
  • MariaDB使用标准和流行的查询语言。
  • MariaDB在许多操作系统上运行,并支持各种编程语言。
  • MariaDB提供对PHP的支持,PHP是最流行的Web开发语言之一。
  • MariaDB提供Galera群集技术。
  • MariaDB还提供许多在MySQL中不可用的操作和命令,并消除/取代影响性能的消极因素。
MariaDB入门

在开始本教程之前,请确保您对PHP和SQL的一些基本知识。

本指南着重介绍如何在Windows 10环境中使用MariaDB,因此我们的示例对于MariaDB/PHP开发人员非常有用。

如果您不熟悉或需要查看PHP,强烈建议您阅读学习我们的PHP教程

MariaDB数据类型

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

以下是MariaDB中的数据类型列表:

  • 字符串数据类型
  • 数字数据类型
  • 日期/时间数据类型
  • 大对象数据类型

下面我们来一个一个地汇总列出。

字符串数据类型

数据类型语法 最大长度 描述
char(size) 最大长度为255个字符。 size是要存储的字符数。固定长度的字符串。使用空格填充右边与size大小相等的字符。
varchar(size) 最大size255个字符。 size是要存储的字符数。可变长度的字符串。
tinytext(size) 最大size255个字符。 size是要存储的字符数。
text(size) 最大size65535个字符。 size是要存储的字符数。
mediumtext(size) 最大size16777215个字符。 size是要存储的字符数。
longtext(size) 最大尺寸4GB4,294,967,295个字符。 size是要存储的字符数。
binary(size) 最大size255个字符。 size是要存储的二进制字符的数量。 固定长度的字符串。 空格填充右边与size相等的字符数。

日期时间数据类型

数据类型语法 最大长度 描述
date 取值范围从"1000-01-01""9999-12-31" 显示格式为:'yyyy-mm-dd'
datetime 取值范围从"1000-01-01 00:00:00""9999-12-31 23:59:59" 显示格式为:'yyyy-mm-dd hh:mm:ss'
timestamp(m) 值范围从'1970-01-01 00:00:01' utc到'2038-01-19 03:14:07' utc。 显示格式为:'yyyy-mm-dd hh:mm:ss'
time 值范围从'-838:59:59''838:59:59' 显示格式为:'hh:mm:ss'
year[(2/4)] 年份数值为2位或4位数。 默认是4位数字值。

数字数据类型

数据类型语法 最大长度
bit 非常小的整数值,相当于tinyint(1)。有符号值范围从-128127,无符号值范围从0255
tinyint(m) 非常小的整数值。有符号值范围从-128127。无符号值范围从0255
smallint(m) 小型整数值。有符号值范围从-3276832767。无符号值范围从065535
mediumint(m) 中等大小的整数值。有符号值范围从-83886088388607。无符号值范围从016777215
int(m) 标准整数值。有符号值范围从-21474836482147483647。无符号值范围从04294967295
integer(m) 标准整数值。有符号值范围从-21474836482147483647。无符号值范围从04294967295
bigint(m) 大整数值。有符号的值范围从-92233720368547758089223372036854775807。无符号值范围从018446744073709551615
decimal(m,d) 解压后的定点数字值。如果没有指定,m默认为10,如果d没有指定,默认为0
dec(m,d) 解压后的定点数值。如果未指定,则m默认为10。如果没有指定,d默认为0
numeric(m,d) 解压后的定点数值。如果没有指定,m默认为10,如果没有指定,d默认为0
fixed(m,d) 解压后的定点数值。如果未指定,则m默认为10。如果没有指定,d默认为0
float(m,d) 单精度浮点数。
double(m,d) 双精度浮点数。
double precision(m,d) 双精度浮点数。
real(m,d) 双精度浮点数。
float(p) 浮点数。
bool tinyint(1)的同义词
boolean tinyint(1)的同义词

大对象(LOB)数据类型

数据类型语法 最大长度
tinyblob 最大为255个字节。
blob(size) 最大为65535字节。
mediumblob 最大为16777215字节。
longtext 最大尺寸4GB4,294,967,295个字符。

MariaDB创建数据库

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

在这节中,我们来学习如何在MariaDB中创建一个数据库。

创建一个名称为"products"的数据库。

语法:

sql 复制代码
CREATE DATABASE Database_name;
SQL

示例

sql 复制代码
CREATE DATABASE products;
SQL

或者指定使用默认的字符集来创建数据库:

sql 复制代码
CREATE DATABASE testdb
  CHARACTER SET = 'utf8'
  COLLATE = 'utf8_general_ci';
SQL

注意,数据库名称不区分大小写。因此:Products,products以及PRODUCTS均表示同一个数据库。

显示数据库

SHOW DATABASES命令用于查看创建的数据库。

语法:

sql 复制代码
SHOW DATABASES;
SQL

使用MariaDB客户端,执行上面查询语句,得到以下结果 -

MariaDB选择数据库

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

USE database命令用于选择数据库,如果想在一个数据库上工作,比如:创建表,查询表,更新,创建存储过程等等,那么首先需要选择一个目标数据库。

sql 复制代码
USE database_name;
SQL

示例

假设在MariaDB数据库服务器中,存在有多个数据库,我们必须选择一个特定的数据库。

例如,在下图中显示了多个数据库:

shell 复制代码
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| products           |
| test               |
| testdb             |
+--------------------+
6 rows in set (0.00 sec)
Shell

这里我们将使用"testdb"数据库来创建表等。所以需要使用以下USE命令。

sql 复制代码
USE testdb;
SQL

在执行上面查询语句后,就已经选择"testdb"数据库。之后就可以在里面创建表等数据对象了。执行上面查询语句效果如下 -

shell 复制代码
MariaDB [(none)]> USE testdb;
Database changed
MariaDB [testdb]>

MariaDB删除数据库

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

DROP DATABASE命令用于删除创建过(已存在)的数据库。DROP DATABASE删除数据库中的所有表并删除数据库。使用这个语句时要非常小心! 要使用DROP DATABASE,您需要数据库的DROP权限。 DROP SCHEMADROP DATABASE的同义词。

重要提示:删除数据库时,数据库的用户权限不会自动删除。

语法

sql 复制代码
DROP DATABASE Database_name;
SQL
示例

在前面的例子中,我们创建了一个数据库名称为Product。使用以下语句,删除这个数据库。

sql 复制代码
DROP DATABASE products;
SQL

在执行上面语句后,数据库"products"现在被删除。可以使用SHOW DATABASES命令来验证它。

可以看到"products"数据库在数据库列表中不再有显示。

MariaDB创建表

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

在MariaDB中,CREATE TABLE语句用于在选定的数据库中创建表。使用CREATE TABLE语句创建一个具有给定名称(tbl_name)的表。 必须具有表或数据库的CREATE权限才能创建表。

语法如下 -

sql 复制代码
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...) [table_options    ]... [partition_options]
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)] [table_options   ]... [partition_options]
    select_statement
CREATE [OR REPLACE] [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   { LIKE old_table_name | (LIKE old_table_name) }

select_statement:
    [IGNORE | REPLACE] [AS] SELECT ...   (Some legal select statement)
SQL

在最基本的形式中,CREATE TABLE语句提供了一个表名称,后跟一列,索引和约束。 默认情况下,该表是在默认数据库中创建的。 用db_name.tbl_name指定一个数据库。 如果引用表名称,则必须分别将数据库名称和表名引用为db_name.tbl_name。 这对于CREATE TABLE ... SELECT是特别有用的,因为它允许在包含来自其他数据库的数据的数据库中创建表。

最基本的语法如下 -

sql 复制代码
CREATE TABLE table_name (column_name column_type);
SQL

也可以指定一个column_name作为主键 - primary_key,它必须是一个NOT NULL值。

示例

"testdb"数据库中创建一个"students"表。参考以下创建语句 -

sql 复制代码
USE testdb;
CREATE TABLE students(  
    student_id INT NOT NULL AUTO_INCREMENT,  
    student_name VARCHAR(100) NOT NULL,  
    student_address VARCHAR(40) NOT NULL,  
    admission_date DATE,  
    PRIMARY KEY ( student_id )
);
SQL

执行上面查询语句,结果如下 -

查询数据库中的表

您可以使用SHOW TABLES命令验证是否创建表成功了。

sql 复制代码
MariaDB [testdb]> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| students         |
+------------------+
1 row in set (0.00 sec)

MariaDB [testdb]>
SQL

在上面结果中,可以看到有创建了"students"表。查看"students"表的结构:

sql 复制代码
SHOW CREATE TABLE `testdb`.`students`;
SQL

执行上面查询语句,输出结果如下 -

sql 复制代码
CREATE TABLE `students` (
    `student_id` INT(11) NOT NULL AUTO_INCREMENT,
    `student_name` VARCHAR(100) NOT NULL,
    `student_address` VARCHAR(40) NOT NULL,
    `admission_date` DATE NULL DEFAULT NULL,
    PRIMARY KEY (`student_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;

MariaDB删除表

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

在MariaDB中,DROP TABLE语句用于从数据库中删除表。它将会永久删除表,不能恢复表结构和数据。

语法:

sql 复制代码
DROP TABLE table_name ;
SQL

示例:

删除"testdb"数据库中的students表。参考以下语句 -

sql 复制代码
DROP TABLE students;
SQL

在执行删除语句后,可以验证表是否被删除成功。参考以下查询表的语句 -

sql 复制代码
SHOW TABLES;
SQL

完整的过程,如下所示 -

MariaDB修改表

​ 以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!

ALTER TABLE命令是用于更改现有表的结构。 例如,可以添加或删除列,创建或销毁索引,更改现有列的类型或重命名列或表本身。也可以更改表的注释和表的存储引擎。

如果另一个连接正在使用该表,则元数据锁将处于活动状态,并且此语句将等待,直到释放该锁。对于非事务性表也是如此。

在具有重复值的列(或一组列)上添加一个UNIQUE索引时,将会产生一个错误,并且该语句将被停止。要抑制错误并强制创建UNIQUE索引,丢弃重复项,可以指定IGNORE选项。 如果一列(或一组列)应该是唯一的,但是它包含重复的值,这有时可能是有用的; 然而,这种技术不能控制哪些行被保存,哪些被删除。

1. 添加一列

要在原有的表上添加一列,可参考以下语法 -

sql 复制代码
ALTER TABLE xxxx ADD COLUMN [IF NOT EXISTS]  (col_name column_definition,...)
SQL

示例

sql 复制代码
CREATE TABLE t(id INT PRIMARY KEY, u INT UNSIGNED NOT NULL UNIQUE)
ENGINE=InnoDB;

INSERT INTO t(id,u) VALUES(1,1),(2,2),(3,3);

ALTER TABLE t ADD COLUMN
(d DATETIME DEFAULT current_timestamp(),
 p POINT NOT NULL DEFAULT ST_GeomFromText('POINT(0 0)'),
 t TEXT CHARSET utf8 DEFAULT 'The quick brown fox jumps over the lazy dog');

UPDATE t SET t=NULL WHERE id=3;

SELECT id,u,d,ST_AsText(p),t FROM t;

SELECT variable_value FROM information_schema.global_status
WHERE variable_name = 'innodb_instant_alter_column';
SQL
2. 删除一列

语法

sql 复制代码
ALTER TABLE xxxx DROP COLUMN [IF EXISTS] col_name [CASCADE|RESTRICT]
SQL

删除属于多列UNIQUE约束的列是不允许的。例如:

sql 复制代码
CREATE TABLE a (
  a int,
  b int,
  primary key (a,b)
);

ALTER TABLE x DROP COLUMN a;
[42000][1072] Key column 'A' doesn't exist in table
SQL

原因是,删除列a将导致新的约束,即列b中的所有值都是唯一的。 为了删除该列,将需要明确的DROP PRIMARY KEYADD PRIMARY KEY。从MariaDB 10.2.7版本起,该列被删除,并应用了额外的约束,导致以下结构:

sql 复制代码
ALTER TABLE x DROP COLUMN a;
Query OK, 0 rows affected (0.46 sec)

DESC x;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| b     | int(11) | NO   | PRI | NULL    |       |
+-------+---------+------+-----+---------+-------+
SQL
3. MODIFY COLUMN修改列

允许修改列的类型。该列与原始列位于同一位置,列中的所有索引都将保留。 请注意,修改列时,应指定新列的所有属性。

sql 复制代码
CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY((a));
ALTER TABLE t1 MODIFY a BIGINT UNSIGNED AUTO_INCREMENT;
SQL

除了改变列的名字。该列与原始列位于同一位置,列中的所有索引都将保留。

sql 复制代码
CREATE TABLE t1 (a INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(a));
ALTER TABLE t1 CHANGE a b BIGINT UNSIGNED AUTO_INCREMENT;
SQL
4. 添加约束 - ADD CONSTRAINT

修改在表的特定列或列上添加约束。

语法

sql 复制代码
ALTER TABLE table_name 
ADD CONSTRAINT [constraint_name] CHECK(expression);
SQL

在插入或更新行之前,所有约束都将按照它们定义的顺序进行评估。如果任何约束失败,那么该行将不会被更新。

示例

sql 复制代码
CREATE TABLE account_ledger (
    id INT PRIMARY KEY AUTO_INCREMENT,
    transaction_name VARCHAR(100),
    credit_account VARCHAR(100),
    credit_amount INT,
    debit_account VARCHAR(100),
    debit_amount INT);

ALTER TABLE account_ledger 
ADD CONSTRAINT is_balanced 
    CHECK((debit_amount + credit_amount) = 0);
SQL

删除DROP CONSTRAINT

修改表结构,删除给定的约束。

sql 复制代码
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
SQL

向表中添加约束时,无论是通过CREATE TABLE还是ALTER TABLE ... ADD CONSTRAINT语句,都可以自己设置constraint_name,或者允许MariaDB自动为您生成一个约束。例如,

sql 复制代码
CREATE TABLE t (
   a INT,
   b INT,
   c INT,
   CONSTRAINT CHECK(a > b),
   CONSTRAINT check_equals CHECK(a = c)); 

SELECT CONSTRAINT_NAME, TABLE_NAME, CONSTRAINT_TYPE 
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_NAME = 't';

+-----------------+----------------+-----------------+
| CONSTRAINT_NAME | TABLE_NAME     | CONSTRAINT_TYPE |
+-----------------+----------------+-----------------+
| check_equals    | t              | CHECK           |
| CONSTRAINT_1    | t              | CHECK           |
+-----------------+----------------+-----------------+
SQL

要从表中删除约束,请使用ALTER TABLE ... DROP CONSTRAINT语句。 例如,

sql 复制代码
ALTER TABLE t DROP CONSTRAINT is_unique;
SQL
4. 常用语句

添加一个新的列:

sql 复制代码
ALTER TABLE t1 ADD x INT;
SQL

删除一个列:

sql 复制代码
ALTER TABLE t1 DROP x;
SQL

修改列的类型:

sql 复制代码
ALTER TABLE t1 MODIFY x bigint unsigned;
SQL

更改列的名称和类型:

sql 复制代码
ALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;
SQL

更改列的名称和类型:

sql 复制代码
ALTER TABLE t1 CHANGE a b bigint unsigned auto_increment;
SQL

在单个ALTER TABLE语句中组合多个子句,用逗号分隔:

sql 复制代码
ALTER TABLE t1 DROP x, ADD x2 INT,  CHANGE y y2 INT;
SQL

更改存储引擎:

sql 复制代码
ALTER TABLE t1 ENGINE = InnoDB;
SQL

重建表(前面的例子也将重建表,如果它已经是InnoDB):

sql 复制代码
ALTER TABLE t1 FORCE;
相关推荐
NiNg_1_2347 分钟前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
众拾达人12 分钟前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
Azoner22 分钟前
postgresql安装部署(linux)
数据库·postgresql
PyAIGCMaster1 小时前
文本模式下成功。ubuntu P104成功。
服务器·数据库·ubuntu
吃着火锅x唱着歌1 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
drebander1 小时前
MySQL 查询优化案例分享
数据库·mysql
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱581361 小时前
InnoDB 的页分裂和页合并
数据库·后端
_Shirley2 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
YashanDB3 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库