- MariaDB 教程
- MariaDB - 主页
- MariaDB - 简介
- MariaDB - 安装
- MariaDB - 管理
- MariaDB - PHP 语法
- MariaDB - 连接
- MariaDB - 创建数据库
- MariaDB - 删除数据库
- MariaDB - 选择数据库
- MariaDB - 数据类型
- MariaDB - 创建表
- MariaDB - 删除表
- MariaDB - 插入查询
- MariaDB - 选择查询
- MariaDB -Where 子句
- MariaDB - 更新查询
- MariaDB - 删除查询
- MariaDB - Like 子句
- MariaDB - 按子句排序
- MariaDB - 加入
- MariaDB - 空值
- MariaDB - 正则表达式
- MariaDB - 交易
- MariaDB - 更改命令
- 索引和统计表
- MariaDB - 临时表
- MariaDB - 表克隆
- MariaDB - 序列
- MariaDB - 管理重复项
- MariaDB - SQL 注入保护
- MariaDB - 备份方法
- MariaDB - 备份加载方法
- MariaDB - 有用的功能
- MariaDB 有用资源
- MariaDB - 快速指南
- MariaDB - 有用的资源
- MariaDB - 讨论
MariaDB - 快速指南
MariaDB - 简介
数据库应用程序与主应用程序分开存在并存储数据集合。每个数据库都使用一个或多个 API 来创建、访问、管理、搜索和复制其包含的数据。
数据库还使用非关系数据源,例如对象或文件。然而,事实证明,数据库是大型数据集的最佳选择,因为大型数据集会因其他数据源的检索和写入速度缓慢而受到影响。
关系数据库管理系统(RDBMS)将数据存储在各种表中。这些表之间的关系是使用主键和外键建立的。
RDBMS 提供以下功能 -
它们使您能够实现具有表、列和索引的数据源。
它们确保多个表的行之间的引用的完整性。
它们会自动更新索引。
它们解释 SQL 查询和操作,以操纵或从表中获取数据。
关系型数据库管理系统术语
在开始讨论 MariaDB 之前,让我们回顾一下与数据库相关的一些术语。
数据库- 数据库是由保存相关数据的表组成的数据源。
表- 表,意思是电子表格,是包含数据的矩阵。
列- 列,意思是数据元素,是保存一种类型数据的结构;例如,发货日期。
Row - 行是对相关数据进行分组的结构;例如,客户的数据。它也称为元组、条目或记录。
冗余- 该术语是指存储数据两次以加速系统。
主键- 这是指唯一的识别值。该值不能在表中出现两次,并且只有一行与其关联。
外键- 外键充当两个表之间的链接。
复合键- 复合键或复合键是引用多个列的键。它指的是由于一个列缺乏独特的品质而导致多个列。
索引- 索引实际上与书籍的索引相同。
引用完整性- 该术语是指确保所有外键值都指向现有行。
MariaDB数据库
MariaDB 是 MySQL 的原始开发人员创建的一个流行的 MySQL 分支。它源于对 MySQL 被 Oracle 收购的担忧。它为小型数据处理任务和企业需求提供支持。它的目标是成为 MySQL 的直接替代品,只需要简单地卸载 MySQL 并安装 MariaDB。MariaDB 提供与 MySQL 相同的功能,甚至更多。
MariaDB 的主要特点
MariaDB 的重要特征是 -
所有 MariaDB 都遵循 GPL、LGPL 或 BSD。
MariaDB 包含多种存储引擎可供选择,其中包括高性能存储引擎,用于与其他 RDBMS 数据源配合使用。
MariaDB 使用标准且流行的查询语言。
MariaDB 可在多种操作系统上运行并支持多种编程语言。
MariaDB 提供对 PHP(最流行的 Web 开发语言之一)的支持。
MariaDB 提供 Galera 集群技术。
MariaDB 还提供了许多 MySQL 中不可用的操作和命令,并消除/替换了对性能产生负面影响的功能。
入门
在开始本教程之前,请确保您具有 PHP 和 HTML 的一些基本知识,特别是我们的 PHP 和 HTML 教程中讨论的材料。
本指南重点介绍在 PHP 环境中使用 MariaDB,因此我们的示例对于 PHP 开发人员来说最有用。
如果您不熟悉或需要复习,我们强烈建议您复习我们的 PHP 教程。
MariaDB - 安装
MariaDB 的所有下载都位于MariaDB 基金会官方网站的下载部分。单击所需版本的链接,将显示多个操作系统、体系结构和安装文件类型的下载列表。
在 LINUX/UNIX 上安装
如果您对 Linux/Unix 系统有深入的了解,只需下载源代码即可构建您的安装。我们推荐的安装方式是使用分发包。MariaDB 为以下 Linux/Unix 发行版提供软件包 -
- 红帽/CentOS/Fedora
- Debian/Ubuntu
以下发行版在其存储库中包含 MariaDB 包 -
- 开放SUSE
- 架构Linux
- 马吉亚
- 薄荷
- 斯莱克软件
按照以下步骤在 Ubuntu 环境中安装 -
步骤 1 - 以 root 用户身份登录。
步骤 2 - 导航到包含 MariaDB 包的目录。
步骤 3 - 使用以下代码导入 GnuPG 签名密钥 -
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
步骤4 - 将MariaDB 添加到sources.list文件中。打开文件,并添加以下代码 -
sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/5.5/ubuntuprecise main'
步骤 5 - 使用以下命令刷新系统 -
sudo apt-get update
步骤 6 - 使用以下命令安装 MariaDB -
sudo apt-get install mariadb-server
在 Windows 上安装
找到并下载自动安装文件 (MSI) 后,只需双击该文件即可开始安装。安装向导将引导您完成安装的每个步骤和任何必要的设置。
通过从命令提示符启动安装来测试安装。导航到安装位置(通常在目录中),然后在提示符下键入以下内容 -
mysqld.exe --console
如果安装成功,您将看到与启动相关的消息。如果没有出现,则您可能存在权限问题。确保您的用户帐户可以访问该应用程序。图形客户端可用于 Windows 环境中的 MariaDB 管理。如果您发现命令行不舒服或麻烦,请务必尝试一下。
测试安装
执行一些简单的任务来确认 MariaDB 的功能和安装。
使用管理实用程序获取服务器状态
使用 mysqladmin 二进制文件查看服务器版本。
[root@host]# mysqladmin --version
它应该显示版本、发行版、操作系统和体系结构。如果您没有看到该类型的输出,请检查您的安装是否存在问题。
使用客户端执行简单命令
打开 MariaDB 的命令提示符。这应该将您连接到 MariaDB 并允许执行命令。输入一个简单的命令如下 -
mysql> SHOW DATABASES;
安装后
成功安装MariaDB后,设置root密码。全新安装的密码为空。输入以下内容设置新密码 -
mysqladmin -u root password "[enter your password here]";
输入以下内容以使用您的新凭据连接到服务器 -
mysql -u root -p Enter password:*******
在 Windows 上升级
如果您的Windows系统上已经安装了MySQL,并且想要升级到MariaDB;不要卸载 MySQL 并安装 MariaDB。这将导致与现有数据库发生冲突。您必须安装 MariaDB,然后使用 Windows 安装文件中的升级向导。
MySQL my.cnf 文件的选项应该适用于 MariaDB。然而,MariaDB 有很多特性是 MySQL 所没有的。
考虑 my.cnf 文件中的以下冲突 -
MariaDB 默认使用 Aria 存储引擎来存储临时文件。如果您有很多临时文件,并且不使用 MyISAM 表,请修改键缓冲区大小。
如果您的应用程序频繁连接/断开连接,请更改线程缓存大小。
如果使用超过 100 个连接,请使用线程池。
兼容性
MySQL 和 MariaDB 本质上是相同的。然而,存在足够多的差异,会在升级中产生问题。在MariaDB 知识库中查看更多这些关键差异。
MariaDB - 管理
在尝试运行 MariaDB 之前,首先确定其当前状态,正在运行还是关闭。有三种启动和停止 MariaDB 的选项 -
- 运行 mysqld(MariaDB 二进制文件)。
- 运行 mysqld_safe 启动脚本。
- 运行 mysql.server 启动脚本。
如果您将 MariaDB 安装在非标准位置,则可能需要编辑脚本文件中的位置信息。只需在脚本中添加“stop”参数即可停止 MariaDB。
如果您想在 Linux 下自动启动它,请将启动脚本添加到您的init系统中。每个发行版都有不同的过程。请参阅您的系统文档。
创建用户帐户
使用以下代码创建一个新的用户帐户 -
CREATE USER 'newusername'@'localhost' IDENTIFIED BY 'userpassword';
此代码向用户表添加一行,但没有权限。您还可以选择使用密码的哈希值。使用以下代码授予用户权限 -
GRANT SELECT, INSERT, UPDATE, DELETE ON database1 TO 'newusername'@'localhost';
其他权限包括 MariaDB 中几乎所有可能的命令或操作。创建用户后,执行“FLUSH PRIVILEGES”命令以刷新授权表。这允许使用用户帐户。
配置文件
在 Unix/Linux 上构建后,配置文件“/etc/mysql/my.cnf”应编辑为如下所示 -
# Example mysql config file. # You can copy this to one of: # /etc/my.cnf to set global options, # /mysql-data-dir/my.cnf to get server specific options or # ~/my.cnf for user specific options. # # One can use all long options that the program supports. # Run the program with --help to get a list of available options # This will be passed to all mysql clients [client] #password = my_password #port = 3306 #socket = /tmp/mysql.sock # Here is entries for some specific programs # The following values assume you have at least 32M ram # The MySQL server [mysqld] #port = 3306 #socket = /tmp/mysql.sock temp-pool # The following three entries caused mysqld 10.0.1-MariaDB (and possibly other versions) to abort... # skip-locking # set-variable = key_buffer = 16M # set-variable = thread_cache = 4 loose-innodb_data_file_path = ibdata1:1000M loose-mutex-deadlock-detector gdb ######### Fix the two following paths # Where you want to have your database data = /path/to/data/dir # Where you have your mysql/MariaDB source + sql/share/english language = /path/to/src/dir/sql/share/english [mysqldump] quick MariaDB 8 set-variable = max_allowed_packet=16M [mysql] no-auto-rehash [myisamchk] set-variable = key_buffer = 128M
编辑“data=”和“language=”行以匹配您的环境。
文件修改后,导航到源目录并执行以下命令 -
./scripts/mysql_install_db --srcdir = $PWD --datadir = /path/to/data/dir -- user = $LOGNAME
如果您将 datadir 添加到配置文件,请省略“$PWD”变量。确保运行 MariaDB 版本 10.0.1 时使用“$LOGNAME”。
管理命令
查看以下在使用 MariaDB 时经常使用的重要命令列表 -
USE [数据库名称] - 设置当前默认数据库。
SHOW DATABASES - 列出当前服务器上的数据库。
SHOW TABLES - 列出所有非临时表。
SHOW COLUMNS FROM [table name] - 提供与指定表相关的列信息。
SHOW INDEX FROM TABLENAME [表名] - 提供与指定表相关的表索引信息。
SHOW TABLE STATUS LIKE [表名]\G – − 为表提供有关非临时表的信息,LIKE 子句后出现的模式用于获取表名。
MariaDB - PHP 语法
MariaDB 与多种编程语言和框架都能很好地合作,例如 PHP、C#、JavaScript、Ruby on Rails、Django 等。由于其简单性和历史足迹,PHP 仍然是所有可用语言中最受欢迎的。本指南将重点介绍与 MariaDB 合作的 PHP。
PHP 提供了一系列用于处理 MySQL 数据库的函数。这些函数执行访问或执行操作等任务,并且它们与 MariaDB 完全兼容。只需像调用任何其他 PHP 函数一样调用这些函数即可。
您将用于 MariaDB 的 PHP 函数符合以下格式 -
mysql_function(value,value,...);
函数的第二部分指定其操作。本指南中使用的两个函数如下 -
mysqli_connect($connect); mysqli_query($connect,"SQL statement");
以下示例演示了 PHP 调用 MariaDB 函数的一般语法 -
<html> <head> <title>PHP and MariaDB</title> </head> <body> <?php $retval = mysql_function(value, [value,...]); if( !$retval ) { die ( "Error: Error message here" ); } // MariaDB or PHP Statements ?> </body> </html>
在下一节中,我们将使用 PHP 函数检查基本的 MariaDB 任务。
MariaDB - 连接
与 MariaDB 建立连接的一种方法是在命令提示符下使用 mysql 二进制文件。
MYSQL 二进制
查看下面给出的示例。
[root@host]# mysql -u root -p Enter password:******
上面给出的代码连接到 MariaDB 并提供用于执行 SQL 命令的命令提示符。输入代码后,应出现一条欢迎消息,指示连接成功,并显示版本号。
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 122323232 Server version: 5.5.40-MariaDB-log Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
该示例使用 root 访问权限,但任何具有权限的用户当然都可以访问 MariaDB 提示符并执行操作。
通过exit命令断开与 MariaDB 的连接,如下所示 -
mysql> exit
PHP 连接脚本
连接和断开 MariaDB 的另一种方法是使用 PHP 脚本。PHP 提供了mysql_connect()函数来打开数据库连接。它使用五个可选参数,并在连接成功后返回 MariaDB 链接标识符,在连接失败时返回 false。它还提供了用于关闭数据库连接的mysql_close()函数,该函数使用单个参数。
句法
查看以下 PHP 连接脚本语法 -
connection mysql_connect(server,user,passwd,new_link,client_flag);
参数的描述如下 -
先生编号 | 参数及说明 |
---|---|
1 |
服务器 该可选参数指定运行数据库服务器的主机名。它的默认值为“localhost:.3036”。 |
2 |
用户 该可选参数指定访问数据库的用户名。它的默认值是服务器的所有者。 |
3 |
密码 该可选参数指定用户的密码。其默认值为空。 |
4 |
新链接 此可选参数指定在使用相同参数第二次调用mysql_connect()时,而不是新连接时,将返回当前连接的标识符。 |
5 |
客户标志 此可选参数使用以下常量值的组合 -
|
查看下面给出的 PHP 断开连接脚本语法 -
bool mysql_close ( resource $link_identifier );
如果省略该资源,最近打开的资源将关闭。成功关闭时返回 true 值,否则返回 false 值。
尝试以下示例代码来连接 MariaDB 服务器 -
<html> <head> <title>Connect to MariaDB Server</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'guest1'; $dbpass = 'guest1a'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($conn); ?> </body> </html>
连接成功后,您将看到以下输出 -
mysql> Connected successfully
MariaDB - 创建数据库
在 MariaDB 中创建或删除数据库需要通常仅授予 root 用户或管理员的权限。在这些帐户下,您有两个选项用于创建数据库 - mysqladmin 二进制文件和 PHP 脚本。
mysqladmin 二进制文件
以下示例演示了如何使用 mysqladmin 二进制文件创建名为Products 的数据库-
[root@host]# mysqladmin -u root -p create PRODUCTS Enter password:******
PHP 创建数据库脚本
PHP 使用mysql_query函数创建 MariaDB 数据库。该函数使用两个参数,其中一个参数是可选的,成功时返回“true”值,失败时返回“false”值。
句法
查看以下创建数据库脚本语法 -
bool mysql_query( sql, connection );
参数的描述如下 -
序列号 | 参数及说明 |
---|---|
1 |
sql 此必需参数由执行操作所需的 SQL 查询组成。 |
2 |
联系 如果未指定,此可选参数将使用最近使用的连接。 |
尝试以下示例代码来创建数据库 -
<html> <head> <title>Create a MariaDB Database</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'CREATE DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not create database: ' . mysql_error()); } echo "Database PRODUCTS created successfully\n"; mysql_close($conn); ?> </body> </html>
成功删除后,您将看到以下输出 -
mysql> Database PRODUCTS created successfully mysql> SHOW DATABASES; +-----------------------+ | Database | +-----------------------+ | PRODUCTS | +-----------------------+
MariaDB - 删除数据库
在 MariaDB 中创建或删除数据库需要权限,通常仅授予 root 用户或管理员。在这些帐户下,您有两个删除数据库的选项:mysqladmin 二进制文件和 PHP 脚本。
请注意,删除的数据库是不可恢复的,因此执行此操作时请务必小心。此外,用于删除的 PHP 脚本不会在删除前提示您进行确认。
mysqladmin 二进制文件
以下示例演示了如何使用 mysqladmin 二进制文件删除现有数据库 -
[root@host]# mysqladmin -u root -p drop PRODUCTS Enter password:****** mysql> DROP PRODUCTS ERROR 1008 (HY000): Can't drop database 'PRODUCTS'; database doesn't exist
PHP 删除数据库脚本
PHP 使用mysql_query函数删除 MariaDB 数据库。该函数使用两个参数,其中一个参数是可选的,成功时返回“true”值,失败时返回“false”值。
句法
查看以下删除数据库脚本语法 -
bool mysql_query( sql, connection );
参数的描述如下 -
先生编号 | 参数及说明 |
---|---|
1 |
sql 此必需参数由执行操作所需的 SQL 查询组成。 |
2 |
联系 如果未指定,此可选参数将使用最近使用的连接。 |
尝试以下示例代码来删除数据库 -
<html> <head> <title>Delete a MariaDB Database</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'DROP DATABASE PRODUCTS'; $retval = mysql_query( $sql, $conn ); if(! $retval ){ die('Could not delete database: ' . mysql_error()); } echo "Database PRODUCTS deleted successfully\n"; mysql_close($conn); ?> </body> </html>
成功删除后,您将看到以下输出 -
mysql> Database PRODUCTS deleted successfully
MariaDB - 选择数据库
连接到 MariaDB 后,您必须选择要使用的数据库,因为可能存在许多数据库。有两种方法可以执行此任务:从命令提示符或通过 PHP 脚本。
命令提示符
在命令提示符下选择数据库时,只需使用 SQL 命令“use”即可-
[root@host]# mysql -u root -p Enter password:****** mysql> use PRODUCTS; Database changed mysql> SELECT database(); +-------------------------+ | Database | +-------------------------+ | PRODUCTS | +-------------------------+
选择数据库后,所有后续命令都将在所选数据库上运行。
注意- 所有名称(例如数据库、表、字段)均区分大小写。确保命令符合正确的大小写。
PHP 选择数据库脚本
PHP提供了mysql_select_db函数用于数据库选择。该函数使用两个参数,其中一个参数是可选的,并在成功选择时返回“true”值,在失败时返回 false 值。
句法
查看以下选择数据库脚本语法。
bool mysql_select_db( db_name, connection );
参数的描述如下 -
序列号 | 参数及说明 |
---|---|
1 |
数据库名称 此必需参数指定要使用的数据库的名称。 |
2 |
联系 如果未指定,此可选参数将使用最近使用的连接。 |
尝试以下示例代码来选择数据库 -
<html> <head> <title>Select a MariaDB Database</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'guest1'; $dbpass = 'guest1a'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_select_db( 'PRODUCTS' ); mysql_close($conn); ?> </body> </html>
成功选择后,您将看到以下输出 -
mysql> Connected successfully
MariaDB - 数据类型
良好的字段定义对于优化数据库至关重要。理想的方法要求您专门使用所需类型和大小的字段。例如,如果您仅使用 5 个字符宽的字段,则不要定义 20 个字符宽的字段。给定字段中存储的数据类型,字段(或列)类型也称为数据类型。
MariaDB 数据类型可分为数字、日期和时间以及字符串值。
数字数据类型
MariaDB 支持的数字数据类型如下:
TINYINT - 此数据类型表示有符号范围 -128 到 127 和无符号范围 0 到 255 之间的小整数。
BOOLEAN - 此数据类型将值 0 与“false”关联,将值 1 与“true”关联。
SMALLINT - 此数据类型表示有符号范围 -32768 到 32768 内的整数,以及无符号范围 0 到 65535 内的整数。
MEDIUMINT - 此数据类型表示有符号范围为 -8388608 到 8388607 的整数,以及无符号范围为 0 到 16777215 的整数。
INT(也称为 INTEGER) - 此数据类型表示正常大小的整数。当标记为无符号时,范围为 0 到 4294967295。当有符号(默认设置)时,范围为 -2147483648 到 2147483647。当列设置为 ZEROFILL(无符号状态)时,其所有值都会在前面添加零以放置INT 值中的 M 位。
BIGINT - 此数据类型表示有符号范围 9223372036854775808 到 9223372036854775807 内的整数,无符号范围 0 到 18446744073709551615。
DECIMAL(也称为 DEC、NUMERIC、FIXED)- 此数据类型表示精确的定点数,其中 M 指定其数字,D 指定小数点后的数字。M值不加“-”或小数点。如果 D 设置为 0,则不会出现小数或小数部分,并且该值将在 INSERT 时四舍五入到最接近的 DECIMAL。允许的最大位数为 65,小数点的最大值为 30。省略时 M 的默认值为 10,省略时 D 的默认值为 0。
FLOAT - 此数据类型表示值 0 的小浮点数或以下范围内的数字 -
-3.402823466E+38 至 -1.175494351E-38
1.175494351E-38 至 3.402823466E+38
DOUBLE(也为REAL和DOUBLE PRECISION) - 此数据类型表示值 0 或以下范围内的正常大小的浮点数 -
-1.7976931348623157E+308 至 -2.2250738585072014E-308
2.2250738585072014E-308 至 1.7976931348623157E+308
BIT - 此数据类型表示位字段,其中 M 指定每个值的位数。省略M时,默认为1。位值可以用“b'[value]'”应用,其中value代表0和1中的位值。对于全长,从左侧自动进行零填充;例如,“10”变为“0010”。
日期和时间数据类型
MariaDB 支持的日期和时间数据类型如下:
DATE - 此数据类型表示“1000-01-01”到“9999-12-31”的日期范围,并使用“YYYY-MM-DD”日期格式。
TIME - 此数据类型表示“-838:59:59.999999”到“838:59:59.999999”的时间范围。
DATETIME - 此数据类型表示范围“1000-01-01 00:00:00.000000”到“9999-12-31 23:59:59.999999”。它使用“YYYY-MM-DD HH:MM:SS”格式。
TIMESTAMP - 此数据类型表示“YYYY-MM-DD HH:MM:DD”格式的时间戳。它主要用于详细说明数据库修改的时间,例如插入或更新。
YEAR - 此数据类型表示 4 位数格式的年份。四位数字格式允许的值范围为 1901 到 2155 和 0000。
字符串数据类型
MariaDB 支持的字符串类型值如下 -
字符串文字- 此数据类型表示用引号括起来的字符序列。
CHAR - 此数据类型表示包含指定长度空格的右填充固定长度字符串。M 表示字符的列长度,范围为 0 到 255,默认值为 1。
VARCHAR - 此数据类型表示可变长度字符串,M 范围(最大列长度)为 0 到 65535。
BINARY - 此数据类型表示二进制字节字符串,其中 M 为以字节为单位的列长度。
VARBINARY - 此数据类型表示可变长度的二进制字节字符串,其中 M 为列长度。
TINYBLOB - 此数据类型表示最大长度为 255 (28 - 1) 字节的 blob 列。在存储中,每个都使用一字节长度前缀来指示值中的字节数量。
BLOB - 此数据类型表示最大长度为 65,535 (216 - 1) 字节的 blob 列。在存储中,每个都使用两个字节的长度前缀来指示值中的字节数量。
MEDIUMBLOB - 此数据类型表示最大长度为 16,777,215 (2 24 - 1) 字节的 blob 列。在存储中,每个都使用三字节长度前缀来指示值中的字节数量。
LONGBLOB - 此数据类型表示最大长度为 4,294,967,295(2 32 - 1) 字节的 blob 列。在存储中,每个都使用四字节长度前缀来指示值中的字节数量。
TINYTEXT - 此数据类型表示最大长度为 255 (2 8 - 1) 个字符的文本列。在存储中,每个都使用一字节长度前缀来指示值中的字节数量。
TEXT - 此数据类型表示最大长度为 65,535 (2 16 - 1) 个字符的文本列。在存储中,每个都使用两个字节的长度前缀来指示值中的字节数量。
MEDIUMTEXT - 此数据类型表示最大长度为 16,777,215 (2 24 - 1) 个字符的文本列。在存储中,每个都使用三字节长度前缀来指示值中的字节数量。
LONGTEXT - 此数据类型表示最大长度为 4,294,967,295 或 4GB (2 32 - 1) 个字符的文本列。在存储中,每个都使用四字节长度前缀来指示值中的字节数量。
ENUM - 此数据类型表示仅具有列表中的单个值的字符串对象。
SET - 此数据类型表示具有列表中零个或多个值的字符串对象,最多有 64 个成员。SET 值在内部呈现为整数值。
MariaDB - 创建表
在本章中,我们将学习如何创建表。在创建表之前,首先确定表的名称、字段名称和字段定义。
以下是创建表的一般语法 -
CREATE TABLE table_name (column_name column_type);
查看应用于在 PRODUCTS 数据库中创建表的命令 -
databaseproducts_ tbl( product_id INT NOT NULL AUTO_INCREMENT, product_name VARCHAR(100) NOT NULL, product_manufacturer VARCHAR(40) NOT NULL, submission_date DATE, PRIMARY KEY ( product_id ) );
上面的例子使用“NOT NULL”作为字段属性,以避免空值引起的错误。属性“AUTO_INCRMENT”指示 MariaDB 将下一个可用值添加到 ID 字段。关键字primary key 将列定义为主键。用逗号分隔的多个列可以定义主键。
创建表的两种主要方法是使用命令提示符和 PHP 脚本。
命令提示符
利用 CREATE TABLE 命令执行任务,如下所示 -
root@host# mysql -u root -p Enter password:******* mysql> use PRODUCTS; Database changed mysql> CREATE TABLE products_tbl( -> product_id INT NOT NULL AUTO_INCREMENT, -> product_name VARCHAR(100) NOT NULL, -> product_manufacturer VARCHAR(40) NOT NULL, -> submission_date DATE, -> PRIMARY KEY ( product_id ) -> ); mysql> SHOW TABLES; +------------------------+ | PRODUCTS | +------------------------+ | products_tbl | +------------------------+
确保所有命令均以分号终止。
PHP 创建表脚本
PHP 提供了mysql_query()用于创建表。它的第二个参数包含必要的 SQL 命令 -
<html> <head> <title>Create a MariaDB Table</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ){ die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "CREATE TABLE products_tbl( ". "product_id INT NOT NULL AUTO_INCREMENT, ". "product_name VARCHAR(100) NOT NULL, ". "product_manufacturer VARCHAR(40) NOT NULL, ". "submission_date DATE, ". "PRIMARY KEY ( product_id )); "; mysql_select_db( 'PRODUCTS' ); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not create table: ' . mysql_error()); } echo "Table created successfully\n"; mysql_close($conn); ?> </body> </html>
成功创建表后,您将看到以下输出 -
mysql> Table created successfully
MariaDB - 删除表
在本章中,我们将学习删除表。
表删除非常容易,但请记住所有删除的表都是不可恢复的。表删除的一般语法如下 -
DROP TABLE table_name ;
执行表删除有两个选项:使用命令提示符或 PHP 脚本。
命令提示符
在命令提示符下,只需使用DROP TABLE SQL 命令 -
root@host# mysql -u root -p Enter password:******* mysql> use PRODUCTS; Database changed mysql> DROP TABLE products_tbl mysql> SELECT * from products_tbl ERROR 1146 (42S02): Table 'products_tbl' doesn't exist
PHP 删除表脚本
PHP 提供了mysql_query()来删除表。只需将其第二个参数传递给适当的 SQL 命令 -
<html> <head> <title>Create a MariaDB Table</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = "DROP TABLE products_tbl"; mysql_select_db( 'PRODUCTS' ); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not delete table: ' . mysql_error()); } echo "Table deleted successfully\n"; mysql_close($conn); ?> </body> </html>
成功删除表后,您将看到以下输出 -
mysql> Table deleted successfully
MariaDB - 插入查询
在本章中,我们将学习如何向表中插入数据。
向表中插入数据需要使用 INSERT 命令。该命令的一般语法是 INSERT,后跟表名、字段和值。
查看下面给出的一般语法 -
INSERT INTO tablename (field,field2,...) VALUES (value, value2,...);
该语句要求对字符串值使用单引号或双引号。该语句的其他选项包括“INSERT...SET”语句、“INSERT...SELECT”语句和几个其他选项。
注意- 语句中出现的 VALUES() 函数仅适用于 INSERT 语句,如果在其他地方使用则返回 NULL。
执行该操作有两个选项:使用命令行或使用 PHP 脚本。
命令提示符
在提示符下,有多种方法可以执行选择操作。标准声明如下 -
belowmysql> INSERT INTO products_tbl (ID_number, Nomenclature) VALUES (12345,“Orbitron 4000”); mysql> SHOW COLUMNS FROM products_tbl; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | ID_number | int(5) | | | | | | Nomenclature| char(13) | | | | | +-------------+-------------+------+-----+---------+-------+
您可以插入多行 -
INSERT INTO products VALUES (1, “first row”), (2, “second row”);
您还可以使用 SET 子句 -
INSERT INTO products SELECT * FROM inventory WHERE status = 'available';
PHP 插入脚本
在 PHP 函数中使用相同的“INSERT INTO...”语句来执行该操作。您将再次使用mysql_query()函数。
查看下面给出的示例 -
<?php if(isset($_POST['add'])) { $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } if(! get_magic_quotes_gpc() ) { $product_name = addslashes ($_POST['product_name']); $product_manufacturer = addslashes ($_POST['product_name']); } else { $product_name = $_POST['product_name']; $product_manufacturer = $_POST['product_manufacturer']; } $ship_date = $_POST['ship_date']; $sql = "INSERT INTO products_tbl ". "(product_name,product_manufacturer, ship_date) ". "VALUES"."('$product_name','$product_manufacturer','$ship_date')"; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not enter data: ' . mysql_error()); } echo "Entered data successfully\n"; mysql_close($conn); } ?>
成功插入数据后,您将看到以下输出 -
mysql> Entered data successfully
您还将验证语句与插入语句协作,例如检查以确保数据输入正确。MariaDB 为此提供了许多选项,其中一些是自动的。
MariaDB - 选择查询
在本章中,我们将学习如何从表中选择数据。
SELECT 语句检索选定的行。它们可以包括 UNION 语句、排序子句、LIMIT 子句、WHERE 子句、GROUP BY...HAVING 子句和子查询。
查看以下一般语法 -
SELECT field, field2,... FROM table_name, table_name2,... WHERE...
SELECT 语句提供了多个选项来指定所使用的表 -
数据库名.表名
表名.列名
数据库名.表名.列名
所有 select 语句必须包含一个或多个select 表达式。选择表达式由以下选项之一组成 -
列名。
使用运算符和函数的表达式。
规范“table_name.*”选择给定表中的所有列。
字符“*”从 FROM 子句中指定的所有表中选择所有列。
可以使用命令提示符或PHP脚本来执行select语句。
命令提示符
在命令提示符下,执行语句如下 -
root@host# mysql -u root -p password; Enter password:******* mysql> use PRODUCTS; Database changed mysql> SELECT * from products_tbl +-------------+---------------+ | ID_number | Nomenclature | +-------------+---------------+ | 12345 | Orbitron 4000 | +-------------+---------------+
PHP 选择脚本
在 PHP 函数中使用相同的 SELECT 语句来执行操作。您将再次使用mysql_query()函数。查看下面给出的示例 -
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name,product_manufacturer, ship_date FROM products_tbl'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date : {$row['ship_date']} <br>". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
成功检索数据后,您将看到以下输出 -
Product ID: 12345 Nomenclature: Orbitron 4000 Manufacturer: XYZ Corp Ship Date: 01/01/17 ---------------------------------------------- Product ID: 12346 Nomenclature: Orbitron 3000 Manufacturer: XYZ Corp Ship Date: 01/02/17 ---------------------------------------------- mysql> Fetched data successfully
最佳实践建议在每个 SELECT 语句后释放游标内存。PHP为此提供了mysql_free_result()函数。回顾其用途,如下所示 -
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_NUM)) { echo "Product ID :{$row[0]} <br> ". "Name: {$row[1]} <br> ". "Manufacturer: {$row[2]} <br> ". "Ship Date : {$row[3]} <br> ". "--------------------------------<br>"; } mysql_free_result($retval); echo "Fetched data successfully\n"; mysql_close($conn); ?>
MariaDB -Where 子句
WHERE子句过滤各种语句,例如 SELECT、UPDATE、DELETE 和 INSERT。他们提出了用于指定行动的标准。它们通常出现在语句中的表名之后,其条件如下。WHERE 子句的功能本质上类似于 if 语句。
查看下面给出的 WHERE 子句的一般语法 -
[COMMAND] field,field2,... FROM table_name,table_name2,... WHERE [CONDITION]
请注意 WHERE 子句的以下特点 -
它是可选的。
它允许指定任何条件。
它允许通过使用 AND 或 OR 运算符来指定多个条件。
区分大小写仅适用于使用 LIKE 比较的语句。
WHERE 子句允许使用以下运算符 -
操作员 |
---|
=!= |
> < |
>= <= |
WHERE 子句可以在命令提示符处或 PHP 脚本中使用。
命令提示符
在命令提示符下,只需使用标准命令 -
root@host# mysql -u root -p password; Enter password:******* mysql> use PRODUCTS; Database changed mysql> SELECT * from products_tbl WHERE product_manufacturer = 'XYZ Corp'; +-------------+----------------+----------------------+ | ID_number | Nomenclature | product_manufacturer | +-------------+----------------+----------------------+ | 12345 | Orbitron 4000 | XYZ Corp | +-------------+----------------+----------------------+ | 12346 | Orbitron 3000 | XYZ Corp | +-------------+----------------+----------------------+ | 12347 | Orbitron 1000 | XYZ Corp | +-------------+----------------+----------------------+
查看使用AND条件的示例-
SELECT * FROM products_tbl WHERE product_name = 'Bun Janshu 3000'; AND product_id <= 344;
此示例结合了 AND 和 OR 条件
SELECT * FROM products_tbl WHERE (product_name = 'Bun Janshu 3000' AND product_id < 344) OR (product_name = 'Bun Janshu 3000');
使用Where子句的PHP脚本
在使用 WHERE 子句的操作中使用mysql_query()函数 -
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer = "XYZ Corp"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
成功检索数据后,您将看到以下输出 -
Product ID: 12345 Nomenclature: Orbitron 4000 Manufacturer: XYZ Corp Ship Date: 01/01/17 ---------------------------------------------- Product ID: 12346 Nomenclature: Orbitron 3000 Manufacturer: XYZ Corp Ship Date: 01/02/17 ---------------------------------------------- Product ID: 12347 Nomenclature: Orbitron 1000 Manufacturer: XYZ Corp Ship Date: 01/02/17 ---------------------------------------------- mysql> Fetched data successfully
MariaDB - 更新查询
UPDATE命令通过更改值来修改现有字段。它使用 SET 子句指定要修改的列,并指定分配的新值。这些值可以是表达式,也可以是字段的默认值。设置默认值需要使用 DEFAULT 关键字。该命令还可以使用 WHERE 子句来指定更新条件和/或 ORDER BY 子句以按特定顺序进行更新。
查看以下一般语法 -
UPDATE table_name SET field=new_value, field2=new_value2,... [WHERE ...]
从命令提示符或使用 PHP 脚本执行 UPDATE 命令。
命令提示符
在命令提示符处,只需使用标准命令根 -
root@host# mysql -u root -p password; Enter password:******* mysql> use PRODUCTS; Database changed mysql> UPDATE products_tbl SET nomenclature = 'Fiber Blaster 300Z' WHERE ID_number = 112; mysql> SELECT * from products_tbl WHERE ID_number='112'; +-------------+---------------------+----------------------+ | ID_number | Nomenclature | product_manufacturer | +-------------+---------------------+----------------------+ | 112 | Fiber Blaster 300Z | XYZ Corp | +-------------+---------------------+----------------------+
PHP 更新查询脚本
在 UPDATE 命令语句中使用mysql_query()函数 -
<?php $dbhost = ‘localhost:3036’; $dbuser = ‘root’; $dbpass = ‘rootpassword’; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die(‘Could not connect: ‘ . mysql_error()); } $sql = ‘UPDATE products_tbl SET product_name = ”Fiber Blaster 300z” WHERE product_id = 112’; mysql_select_db(‘PRODUCTS’); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die(‘Could not update data: ‘ . mysql_error()); } echo “Updated data successfully\n”; mysql_close($conn); ?>
成功更新数据后,您将看到以下输出 -
mysql> Updated data successfully
MariaDB - 删除查询
DELETE 命令从指定表中删除表行,并返回删除的数量。使用 ROW_COUNT() 函数访问删除的数量。WHERE 子句指定行,如果没有该子句,则所有行都将被删除。LIMIT 子句控制删除的行数。
在多行的 DELETE 语句中,它仅删除那些满足条件的行;不允许使用 LIMIT 和 WHERE 子句。DELETE 语句允许从不同数据库的表中删除行,但不允许从表中删除然后在子查询中从同一个表中进行选择。
查看以下 DELETE 语法 -
DELETE FROM table_name [WHERE …]
从命令提示符或使用 PHP 脚本执行 DELETE 命令。
命令提示符
在命令提示符下,只需使用标准命令 -
root@host# mysql –u root –p password; Enter password:******* mysql> use PRODUCTS; Database changed mysql> DELETE FROM products_tbl WHERE product_id=133; mysql> SELECT * from products_tbl WHERE ID_number='133'; ERROR 1032 (HY000): Can't find record in 'products_tbl'
PHP删除查询脚本
在 DELETE 命令语句中使用mysql_query()函数 -
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'DELETE FROM products_tbl WHERE product_id = 261'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not delete data: ' . mysql_error()); } echo "Deleted data successfully\n"; mysql_close($conn); ?>
成功删除数据后,您将看到以下输出 -
mysql> Deleted data successfully mysql> SELECT * from products_tbl WHERE ID_number='261'; ERROR 1032 (HY000): Can't find record in 'products_tbl'
MariaDB - Like 子句
WHERE 子句提供了一种在操作使用精确匹配时检索数据的方法。在需要具有共享特征的多个结果的情况下,LIKE子句可适应广泛的模式匹配。
LIKE 子句测试模式匹配,返回 true 或 false。用于比较的模式接受以下通配符:“%”,匹配字符数(0 个或更多);和“_”,匹配单个字符。“_”通配符仅匹配其集合中的字符,这意味着在使用另一个集合时它将忽略拉丁字符。默认情况下,匹配不区分大小写,需要额外设置区分大小写。
NOT LIKE 子句允许测试相反的条件,就像not运算符一样。
如果语句表达式或模式的计算结果为 NULL,则结果为 NULL。
查看下面给出的一般 LIKE 子句语法 -
SELECT field, field2,... FROM table_name, table_name2,... WHERE field LIKE condition
在命令提示符处或 PHP 脚本中使用 LIKE 子句。
命令提示符
在命令提示符下,只需使用标准命令 -
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * from products_tbl WHERE product_manufacturer LIKE 'XYZ%'; +-------------+----------------+----------------------+ | ID_number | Nomenclature | product_manufacturer | +-------------+----------------+----------------------+ | 12345 | Orbitron 4000 | XYZ Corp | +-------------+----------------+----------------------+ | 12346 | Orbitron 3000 | XYZ Corp | +-------------+----------------+----------------------+ | 12347 | Orbitron 1000 | XYZ Corp | +-------------+----------------+----------------------+
PHP 脚本使用 Like 子句
在使用 LIKE 子句的语句中使用mysql_query()函数
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl WHERE product_manufacturer LIKE "xyz%"'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID:{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date: {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
成功检索数据后,您将看到以下输出 -
Product ID: 12345 Nomenclature: Orbitron 4000 Manufacturer: XYZ Corp Ship Date: 01/01/17 ---------------------------------------------- Product ID: 12346 Nomenclature: Orbitron 3000 Manufacturer: XYZ Corp Ship Date: 01/02/17 ---------------------------------------------- Product ID: 12347 Nomenclature: Orbitron 1000 Manufacturer: XYZ Corp Ship Date: 01/02/17 ---------------------------------------------- mysql> Fetched data successfully
MariaDB - 按子句排序
正如前面讨论中提到的, ORDER BY子句对语句的结果进行排序。它指定所操作数据的顺序,并包括按升序 (ASC) 或降序 (DESC) 排序的选项。如果省略顺序规范,则默认顺序为升序。
ORDER BY 子句出现在多种语句中,例如 DELETE 和 UPDATE。它们总是出现在语句的末尾,而不是在子查询中或集合函数之前,因为它们对最终结果表进行操作。您也不能使用整数来标识列。
查看下面给出的 ORDER BY 子句的一般语法 -
SELECT field, field2,... [or column] FROM table_name, table_name2,... ORDER BY field, field2,... ASC[or DESC]
在命令提示符处或 PHP 脚本中使用 ORDER BY 子句。
命令提示符
在命令提示符下,只需使用标准命令 -
root@ host# mysql -u root -p password; Enter password:******* mysql> use PRODUCTS; Database changed mysql> SELECT * from products_tbl ORDER BY product_manufacturer ASC +-------------+----------------+----------------------+ | ID_number | Nomenclature | product_manufacturer | +-------------+----------------+----------------------+ | 56789 | SuperBlast 400 | LMN Corp | +-------------+----------------+----------------------+ | 67891 | Zoomzoom 5000 | QFT Corp | +-------------+----------------+----------------------+ | 12347 | Orbitron 1000 | XYZ Corp | +-------------+----------------+----------------------+
使用 Order By 子句的 PHP 脚本
在使用 ORDER BY 子句的语句中再次使用mysql_query()函数 -
<?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT product_id, product_name, product_manufacturer, ship_date FROM products_tbl ORDER BY product_manufacturer DESC'; mysql_select_db('PRODUCTS'); $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { echo "Product ID :{$row['product_id']} <br> ". "Name: {$row['product_name']} <br> ". "Manufacturer: {$row['product_manufacturer']} <br> ". "Ship Date : {$row['ship_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?>
成功检索数据后,您将看到以下输出 -
Product ID: 12347 Nomenclature: Orbitron 1000 Manufacturer: XYZ Corp Ship Date: 01/01/17 ---------------------------------------------- Product ID: 67891 Nomenclature: Zoomzoom 5000 Manufacturer: QFT Corp Ship Date: 01/01/17 ---------------------------------------------- Product ID: 56789 Nomenclature: SuperBlast 400 Manufacturer: LMN Corp Ship Date: 01/04/17 ---------------------------------------------- mysql> Fetched data successfully
MariaDB - 加入
在之前的讨论和示例中,我们研究了从单个