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) |
最大size 为255 个字符。 |
size 是要存储的字符数。可变长度的字符串。 |
tinytext(size) |
最大size 为255 个字符。 |
size 是要存储的字符数。 |
text(size) |
最大size 为65535 个字符。 |
size 是要存储的字符数。 |
mediumtext(size) |
最大size 为16777215 个字符。 |
size 是要存储的字符数。 |
longtext(size) |
最大尺寸4GB 或4,294,967,295 个字符。 |
size 是要存储的字符数。 |
binary(size) |
最大size 为255 个字符。 |
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) 。有符号值范围从-128 到127 ,无符号值范围从0 到255 。 |
tinyint(m) |
非常小的整数值。有符号值范围从-128 到127 。无符号值范围从0 到255 。 |
smallint(m) |
小型整数值。有符号值范围从-32768 到32767 。无符号值范围从0 到65535 。 |
mediumint(m) |
中等大小的整数值。有符号值范围从-8388608 到8388607 。无符号值范围从0 到16777215 。 |
int(m) |
标准整数值。有符号值范围从-2147483648 到2147483647 。无符号值范围从0 到4294967295 。 |
integer(m) |
标准整数值。有符号值范围从-2147483648 到2147483647 。无符号值范围从0 到4294967295 。 |
bigint(m) |
大整数值。有符号的值范围从-9223372036854775808 到9223372036854775807 。无符号值范围从0 到18446744073709551615 。 |
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 |
最大尺寸4GB 或4,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 SCHEMA
是DROP 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 KEY
和ADD 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;