Maria DB数据库基础知识
Maria DB连接
与MariaDB建立连接的一种方法是在命令提示符下使用mysql二进制文件。
Maria DB命令行登录数据库服务:
mysql -u root -p -- 换行输入密码
上面给出的代码连接到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>
通过 exitquit从Maria DB断开连接
MariaDB - DML
在MariaDB中创建或删除数据库需要通常仅授予root用户或admin的特权。
create database
[root@host]# mysqladmin -u root -p create PRODUCTS
Enter password:******
drop database
[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
请注意,已删除的数据库是不可恢复的,因此在执行此操作时要格外小心。
select database
连接到MariaDB后,必须选择要使用的数据库,因为可能存在许多数据库。
命令提示符
在命令提示符下选择数据库时,只需利用SQL命令“ use”
[root@host]# mysql -u root -p
Enter password:******
mysql> use PRODUCTS;
Database changed
mysql> SELECT database();
+-------------------------+
| Database |
+-------------------------+
| PRODUCTS |
+-------------------------+
选择数据库后,所有后续命令将在所选数据库上运行。
注意-所有名称(例如数据库,表,字段)均区分大小写。确保命令符合适当的情况。
Data Types
良好的字段定义对于优化数据库至关重要。理想的方法要求您专门使用所需类型和大小的字段。例如,如果您仅使用一个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(also INTEGER)
- 此数据类型表示正常大小的整数。标记为unsigned时,范围为0到4294967295。signed 后(默认设置),范围为-2147483648至2147483647。当列设置为ZEROFILL(unsigned 状态)时,其所有值都以0开头,以将M位数字放置在INT值中。
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 to -1.175494351E-38
- 1.175494351E-38 to 3.402823466E+38
DOUBLE
- (也是REAL和DOUBLE PRECISION)-此数据类型表示值为0或在以下范围内的常规大小的浮点数
- -1.7976931348623157E+308 to -2.2250738585072014E-308
- 2.2250738585072014E-308 to 1.7976931348623157E+308
BIT
- 此数据类型表示位字段,其中M指定每个值的位数。省略M时,默认值为1。可以将位值与“ b’[value]”一起应用,其中value表示以0s和1s为单位的位值。Zero-填充会自动从左侧开始进行完整长度;例如,“ 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支持的字符串类型值如下所示:
String literals
- 此数据类型表示用引号引起来的字符序列。
CHAR
- 此数据类型表示包含指定长度的空格的右填充固定长度字符串。 M表示字符的列长度,范围为0到255,其默认值为1。
VARCHAR
- 此数据类型表示一个可变长度的字符串,M范围(最大列长度)为0到65535。
BINARY
- 此数据类型表示二进制字节字符串,其中M为列长度(以字节为单位)。
VARBINARY
- 此数据类型表示可变长度的二进制字节串,其中M为列长。
TINYBLOB
- 此数据类型表示一个blob列,最大长度为255(28-1)字节。在存储中,每一个都使用一个一字节长的前缀来指示值中的字节数。
BLOB
- 此数据类型表示一个Blob列,最大长度为65,535(216-1)字节。在存储中,每一个都使用两字节长的前缀来指示值中的字节数量。
MEDIUMBLOB
- 此数据类型表示一个Blob列,最大长度为16,777,215(224-1)字节。在存储中,每一个都使用一个三字节长的前缀来指示值中的字节数量。
LONGBLOB
- 此数据类型表示一个Blob列,最大长度为4,294,967,295(2^32-1)个字节。在存储中,每一个都使用一个四字节长的前缀来指示值中的字节数量。
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值在内部显示为整数值。
Create Tables
在本章中,我们将学习如何创建表。创建表之前,请先确定其名称,字段名称和字段定义。 以下是表创建的一般语法:
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”作为字段属性,以避免由null值引起的错误。属性“ AUTO_INCREMENT”指示MariaDB将下一个可用值添加到ID字段。关键字“主键”将一列定义为主键(Primary key)。用逗号分隔的多列可以定义一个主键。
命令提示符
利用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 |
+------------------------+
确保所有命令均以分号终止。
Drop Tables
在本章中,我们将学习删除表。 表删除非常容易,但是请记住所有删除的表都是无法恢复的。表删除的一般语法如下
DROP TABLE table_name ;
The Command Prompt
在命令提示符处,只需使用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
Insert Query
将数据插入表中需要INSERT命令。该命令的常规语法为INSERT,后跟表名,字段和值。
INSERT INTO tablename (field,field2,...) VALUES (value, value2,...);
该语句要求对字符串值使用单引号或双引号。该语句的其他选项包括“ INSERT ... SET”语句,“ INSERT ... SELECT”语句以及其他几个选项。
注–语句中出现的VALUES()函数仅适用于INSERT语句,如果在其他地方使用,则返回NULL。
The Command Prompt
在提示符下,有很多方法可以执行选择操作。标准声明如下-
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';
Select Query
SELECT语句检索选定的行。它们可以包括UNION statements, an ordering clause, a LIMIT clause, a WHERE clause, a GROUP BY...HAVING clause, and subqueries.
常规语法
SELECT field, field2,... FROM table_name, table_name2,... WHERE...
SELECT语句提供多个选项来指定使用的表-
- database_name.table_name
- table_name.column_name
- database_name.table_name.column_name
所有选择语句必须包含一个或多个select expressions。选择表达式包含以下选项之一-
- 列名。
- 使用运算符和函数的表达式。
- 指定“ table_name。*”以选择给定表中的所有列。
- 字符“ *”可从FROM子句中指定的所有表中选择所有列。
The Command Prompt
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 |
+-------------+---------------+
Where Clause
WHERE子句过滤各种语句,例如SELECT,UPDATE,DELETE和INSERT。他们提出了用于指定行动的标准。它们通常出现在语句中的表名之后,并且其条件如下。WHERE子句的功能本质上类似于if语句。
[COMMAND] field,field2,... FROM table_name,table_name2,... WHERE [CONDITION]
请注意WHERE子句的以下clause
- 它是可选的。
- 它允许指定任何条件。
- 它允许使用AND或OR运算符指定多个条件。
- 区分大小写仅适用于使用LIKE比较的语句。
WHERE子句允许使用以下运算符
Operator |
---|
= != |
> < |
>= <= |
The Command Prompt
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');
Update Query
UPDATE命令通过更改值来修改现有字段。它使用SET子句指定要修改的列,并指定分配的新值。这些值可以是表达式,也可以是字段的默认值。设置默认值需要使用DEFAULT关键字。该命令还可以使用WHERE子句指定更新条件和/或ORDER BY子句以特定顺序更新。
UPDATE table_name SET field=new_value, field2=new_value2,...
[WHERE ...]
The Command Prompt
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 |
+-------------+---------------------+----------------------+
Delete Query
DELETE命令从指定的表中删除表行,并返回删除的数量。访问使用ROW_COUNT()函数删除的数量。WHERE子句指定行,如果没有该行,则将删除所有行。LIMIT子句控制删除的行数。
在多行的DELETE语句中,它仅删除满足条件的那些行;以及LIMIT和WHERE子句是不允许的。DELETE语句允许从不同数据库中的表中删除行,但不允许从表中删除然后在子查询中从同一表中进行选择。
DELETE FROM table_name [WHERE …]
The Command Prompt
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'
Like Clause
当操作使用完全匹配时,WHERE子句提供了一种检索数据的方法。在需要具有共同特征的多个结果的情况下,LIKE子句可容纳广泛的模式匹配。
LIKE子句测试模式匹配,返回true或false。用于比较的模式接受以下通配符:“%”,它匹配字符数(0或更多);和“ _”,它匹配单个字符。“ _”通配符仅匹配其集合中的字符,这意味着在使用另一集合时它将忽略拉丁字符。默认情况下,匹配项不区分大小写,因此需要其他设置以区分大小写。
NOT LIKE子句允许测试相反的条件,就像not运算符一样。
如果语句表达式或模式的计算结果为NULL,则结果为NULL。
SELECT field, field2,... FROM table_name, table_name2,...
WHERE field LIKE condition
The Command Prompt
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 |
+-------------+----------------+----------------------+
Order By Clause
ORDER BY子句对语句的结果进行排序。
它指定操作数据的顺序,并包括按升序(ASC)或降序(DESC)排序的选项。默认order 将升序。
ORDER BY子句出现在各种各样的语句中,例如DELETE和UPDATE。它们始终出现在语句的末尾,而不是出现在子查询中或在set函数之前,因为它们对最终的结果表起作用。您也不能使用整数来标识列。
SELECT field, field2,... [or column] FROM table_name, table_name2,...
ORDER BY field, field2,... ASC[or DESC]
The Command Prompt
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 |
+-------------+----------------+----------------------+
Join
从单个表中检索还是从多个源中检索多个值。大多数现实世界中的数据操作要复杂得多,需要聚合,比较和从多个表中检索。
JOIN允许将两个或多个表合并为一个对象。它们通过SELECT,UPDATE和DELETE语句使用。
SELECT column
FROM table_name1
INNER JOIN table_name2
ON table_name1.column = table_name2.column;
请注意,JOINS的旧语法使用隐式联接,并且没有关键字。可以使用WHERE子句来实现联接,但是关键字对于可读性,维护和最佳实践最有效。
联接以多种形式出现,例如左联接,右联接或内部联接。各种联接类型基于共享值或特征提供不同类型的聚合。
The Command Prompt
root@host# mysql -u root -p password;
Enter password:*******
mysql> use PRODUCTS;
Database changed
mysql> SELECT products.ID_number, products.Nomenclature, inventory.inventory_ct
FROM products
INNER JOIN inventory
ON products.ID_numbeer = inventory.ID_number;
+-------------+----------------+-----------------+
| ID_number | Nomenclature | Inventory Count |
+-------------+----------------+-----------------+
| 12345 | Orbitron 4000 | 150 |
+-------------+----------------+-----------------+
| 12346 | Orbitron 3000 | 200 |
+-------------+----------------+-----------------+
| 12347 | Orbitron 1000 | 0 |
+-------------+----------------+-----------------+
Null Values
使用NULL值时,请记住它们是未知值。它们不是空字符串或零,它们是有效值。在创建表时,列规范允许将其设置为接受空值或拒绝它们。只需利用NULL或NOT NULL子句。在缺少诸如ID号之类的记录信息的情况下,这种方法很有用。
在明确分配之前,用户定义的变量的值为NULL。存储的常规参数和局部变量允许将值设置为NULL。当局部变量没有默认值时,其值为NULL。
NULL不区分大小写,并具有以下别名:
- UNKNOWN(布尔值)
- \N
空运算符
标准比较运算符不能与NULL配合使用(例如=,>,> =,<=,<或!=),因为所有具有NULL值的比较都返回NULL,而不是true或false。与NULL或可能包含NULL的比较必须使用“ <=>”(NULL-SAFE)运算符。
其他可用的运算符是:
- IS NULL-测试是否为NULL值。
- IS NOT NULL-确认不存在NULL值。
- ISNULL-在发现NULL值时返回值1,在不存在时返回值0。
- COALESCE-返回列表的第一个非NULL值,或者在不存在列表的情况下返回NULL值。
排序NULL值
在排序操作中,NULL值具有最低值,因此DESC顺序将在底部产生NULL值。MariaDB允许为NULL值设置更高的值。
有两种方法可以做到这一点:
SELECT column1 FROM product_tbl ORDER BY ISNULL(column1), column1;
另一种方式:
SELECT column1 FROM product_tbl ORDER BY IF(column1 IS NULL, 0, 1), column1 DESC;
NULL Functions
当任何参数为NULL时,函数通常输出NULL。但是,有些功能专门用于管理NULL值。
- IFNULL()-如果第一个表达式不为NULL,则将其返回。当其计算结果为NULL时,它将返回第二个表达式。
- NULLIF()-比较的表达式相等时返回NULL,否则返回第一个表达式。
SUM和AVG等功能会忽略NULL值。
Inserting NULL Values
在声明为NOT NULL的列中插入NULL值时,会发生错误。在默认SQL模式下,NOT NULL列将根据数据类型插入默认值。
当字段是TIMESTAMP,AUTO_INCREMENT或 virtual column 时,MariaDB将以不同方式管理NULL值。在AUTO_INCREMENT列中插入会导致序列中的下一个数字插入其位置。在TIMESTAMP字段中,MariaDB会分配当前时间戳。在虚拟列(本教程后面讨论的主题)中,分配了默认值。
UNIQUE索引可以包含许多NULL值,但是主键不能为NULL。
NULL值和Alter命令
当您使用ALTER命令修改列时,在没有NULL规范的情况下,MariaDB自动分配值。
Regular Expression(正则表达式)
除了LIKE子句中可用的模式匹配之外,MariaDB还通过REGEXP运算符提供了基于正则表达式的匹配。运算符基于给定的模式对字符串表达式执行模式匹配。
MariaDB 10.0.5引入了PCRE正则表达式,这极大地增加了与递归模式,超前断言等区域匹配的范围。
查看下面给出的标准REGEXP运算符语法的使用:
SELECT column FROM table_name WHERE column REGEXP '[PATTERN]';
REGEXP返回1表示模式匹配,否则返回0。
相反的选项以NOT REGEXP的形式存在。MariaDB还提供了REGEXP和NOT REGEXP,RLIKE和NOT RLIKE的同义词,这些同义词是出于兼容性原因而创建的。
比较的模式可以是文字字符串或其他内容,例如表列。在字符串中,它使用C转义语法,因此请将所有“ \”字符加倍。REGEXP也不区分大小写,二进制字符串除外。
下表列出了可以使用的可能模式:
Sr.No | Pattern & Description |
---|---|
1 | ^ 它匹配字符串的开头。 |
2 | $ 它匹配字符串的结尾。 |
3 | . 它匹配一个字符。 |
4 | [...] 它与方括号中的任何字符匹配 |
5 | [^...] 它与括号中未列出的任何字符匹配。 |
6 | p1|p2|p3 它匹配其中任何一个模式 |
7 | * 它匹配0个或多个前一元素的实例。 |
8 | + 它与前一个元素的1个或多个实例匹配。 |
9 | {n} 它匹配前一个元素的n个实例。 |
10 | {m,n} 它匹配前一个元素的m到n个实例。 |
查看下面给出的模式匹配示例:
以“ pr”开头的产品
SELECT name FROM product_tbl WHERE name REGEXP '^pr';
以“ na”结尾的产品-
SELECT name FROM product_tbl WHERE name REGEXP 'na$';
以元音开头的产品-
SELECT name FROM product_tbl WHERE name REGEXP '^[aeiou]';
Transactions
事务是顺序的组操作。它们作为一个单元运行,直到组中的所有操作成功执行后才终止。中的单个故障会导致整个事务失败,并使其对数据库没有影响。
事务符合ACID(原子性(Atomicity),一致性(Consistency),隔离性(Isolation)和持久性(Durability))
- Atomicity - 原子性-通过中止失败并回滚更改来确保所有操作成功。
- Consistency - 一致性-确保数据库在成功的事务中应用更改。
- Isolation - 隔离-启用独立的事务操作。
- Durability - 持久性-确保在系统发生故障时成功事务的持久性。
事务语句的开头是START TRANSACTION语句,然后是COMMIT和ROLLBACK语句
- START TRANSACTION 开始事务
- COMMIT保存对数据的更改。
- ROLLBACK结束事务,销毁所有更改。
成功完成事务后,COMMIT会采取行动。失败时,ROLLBACK起作用。
注–某些语句导致隐式提交,并且在事务中使用时也会引起错误。此类语句的示例包括但不限于CREATE,ALTER和DROP。
MariaDB事务还包括SAVEPOINT和LOCK TABLES之类的选项。SAVEPOINT设置一个还原点以与ROLLBACK一起使用。LOCK TABLES允许在会话期间控制对表的访问,以防止在某些时间段内进行修改。
AUTOCOMMIT变量提供对事务的控制。设置为1会强制将所有操作视为成功事务,设置为0会导致更改的持久性仅发生在显式COMMIT语句上。
Structure of a Transaction(事务结构)
事务处理语句的一般结构以START TRANSACTION开始。下一步是插入一个或多个命令/操作,插入检查错误的语句,插入ROLLBACK语句以管理发现的任何错误,最后插入COMMIT语句以将更改应用于成功的操作。
示例:
START TRANSACTION;
SELECT name FROM products WHERE manufacturer = 'XYZ Corp';
UPDATE spring_products SET item = name;
COMMIT;
Alter Command
ALTER命令提供了一种更改现有表结构的方法,这意味着进行修改,例如删除或添加列,修改索引,更改数据类型或更改名称。当元数据锁定处于活动状态时,ALTER还等待应用更改。
使用ALTER修改列
与DROP配对的ALTER会删除现有的列。但是,如果该列是唯一剩余的列,它将失败。
mysql> ALTER TABLE products_tbl DROP version_num;
使用ALTER ... ADD语句添加列
mysql> ALTER TABLE products_tbl ADD discontinued CHAR(1);
使用关键字FIRST和AFTER指定列的位置
ALTER TABLE products_tbl ADD discontinued CHAR(1) FIRST;
ALTER TABLE products_tbl ADD discontinued CHAR(1) AFTER quantity;
注意,FIRST和AFTER关键字仅适用于ALTER ... ADD语句。
此外,您必须先删除一个表,然后再添加它以重新定位它。
通过使用ALTER语句中的MODIFY或CHANGE子句来更改列定义或名称。这些子句具有相似的效果,但使用的语法实质上不同。
CHANGE示例:
mysql> ALTER TABLE products_tbl CHANGE discontinued status CHAR(4);
在使用CHANGE的语句中,指定原始列,然后指定将替换它的新列。查看下面的MODIFY示例
mysql> ALTER TABLE products_tbl MODIFY discontinued CHAR(4);
ALTER命令还允许更改默认值。回顾一个例子-
mysql> ALTER TABLE products_tbl ALTER discontinued SET DEFAULT N;
您还可以通过将其与DROP子句配对使用它来删除默认约束-
mysql> ALTER TABLE products_tbl ALTER discontinued DROP DEFAULT;
使用ALTER修改表
使用TYPE子句更改表类型-
mysql> ALTER TABLE products_tbl TYPE = INNODB;
使用RENAME关键字重命名表
mysql> ALTER TABLE products_tbl RENAME TO products2016_tbl;
Indexes & Statistics Tables
索引是用于加速记录检索的工具。索引为索引列中的每个值生成一个条目。
索引有四种类型:
- Primary - 主记录(一个记录代表所有记录)
- Unique - 唯一(一个记录代表多个记录)
- Plain
- Full-Text - 全文(允许在文本搜索中使用许多选项)
在此用法中,术语“key”和“index”相同。
索引与一个或多个列关联,并支持快速搜索和有效的记录组织。创建索引时,请考虑查询中经常使用的列。然后在它们上创建一个或多个索引。另外,视图索引本质上是主键表。
尽管索引加快了搜索或SELECT语句的速度,但由于对表和索引都执行了操作,因此它们进行了插入和更新操作。
创建一个索引
您可以通过CREATE TABLE ... INDEX语句或CREATE INDEX语句创建索引。支持可读性,维护和最佳实践的最佳选择是CREATE INDEX。
Index示例:
CREATE [UNIQUE or FULLTEXT or...] INDEX index_name ON table_name column;
查看其用法示例
CREATE UNIQUE INDEX top_sellers ON products_tbl product;
删除索引
您可以使用DROP INDEX或ALTER TABLE ... DROP删除索引。支持可读性,维护和最佳实践的最佳选择是DROP INDEX。
Drop Index的一般语法:
DROP INDEX index_name ON table_name;
查看其用法示例:
DROP INDEX top_sellers ON product_tbl;
重命名索引
使用ALTER TABLE语句重命名索引。查看下面给出的一般语法
ALTER TABLE table_name DROP INDEX index_name, ADD INDEX new_index_name;
查看其用法示例
ALTER TABLE products_tbl DROP INDEX top_sellers, ADD INDEX top_2016sellers;
管理索引
您将需要检查和跟踪所有索引。使用SHOW INDEX列出与给定表关联的所有现有索引。您可以使用“ \ G”之类的选项设置显示内容的格式,该选项指定垂直格式。
查看以下示例
mysql > SHOW INDEX FROM products_tbl\G
Table Statistics(表统计)
鉴于可以更快地访问记录和提供的统计信息,因此大量使用索引来优化查询。但是,许多用户发现索引维护很麻烦。MariaDB 10.0提供了独立于存储引擎的统计信息表,该表可以计算每个存储引擎中每个表的数据统计信息,甚至可以计算未索引列的统计信息。
Temporary(临时) Tables
由于速度快或可丢弃的数据,某些操作可以从临时表中受益。无论您是通过命令提示符,PHP脚本还是通过客户端程序使用临时表,临时表的生命都将在会话终止时结束。它也不会以典型的方式出现在系统中。SHOW TABLES命令将不会显示包含临时表的列表。
创建一个临时表
CREATE TABLE语句中的TEMPORARY关键字产生一个临时表。
mysql>CREATE TEMPORARY TABLE order (
item_name VARCHAR(50) NOT NULL
, price DECIMAL(7,2) NOT NULL DEFAULT 0.00
, quantity INT UNSIGNED NOT NULL DEFAULT 0
);
在创建临时表时,您可以使用LIKE子句克隆现有表(即所有常规特性)。由于使用TEMPORARY关键字,用于生成临时表的CREATE TABLE语句不会提交事务。
尽管临时表与非临时表分开,并在会话结束时删除,但它们可能存在某些冲突
- 它们有时与过期会话中的幻影临时表冲突。
- 它们有时与非临时表的影子名称冲突。
注–临时表可以与现有非临时表具有相同的名称,因为MariaDB会将其视为差异引用。
管理
MariaDB需要向用户授予创建临时表的特权。利用GRANT语句将此特权授予非管理员用户。
GRANT CREATE TEMPORARY TABLES ON orders TO 'machine122'@'localhost';
删除临时表
尽管临时表实际上是在会话结束时删除的,但是您可以选择删除它们。删除临时表需要使用TEMPORARY关键字,最佳实践建议在任何非临时表之前删除临时表。
mysql> DROP TABLE order;
Table Cloning(表克隆)
在某些情况下,需要生成现有表的精确副本。CREATE ... SELECT语句无法产生此输出,因为它忽略了索引和默认值之类的东西。
复制表的过程如下:
- 利用SHOW CREATE TABLE生成一个CREATE TABLE语句,该语句详细说明了源表的整个结构。
- 编辑该语句以为表重新命名,然后执行它。
- 如果还需要复制表数据,请使用INSERT INTO ... SELECT语句。
mysql> INSERT INTO inventory_copy_tbl (
product_id,product_name,product_manufacturer,ship_date)
SELECT product_id,product_name,product_manufacturer,ship_date,
FROM inventory_tbl;
创建重复项的另一种方法使用CREATE TABLE AS语句。该语句复制所有列,列定义,并用源表的数据填充副本。
查看下面给出的语法
CREATE TABLE clone_tbl AS
SELECT columns
FROM original_tbl
WHERE conditions];
在下面查看其用法示例-
CREATE TABLE products_copy_tbl AS
SELECT *
FROM products_tbl;
Sequences
在10.0.3版中,MariaDB引入了一种称为sequence的存储引擎。它的临时生成用于操作的整数序列,然后终止。该序列包含降序或升序的正整数,并使用起始值,终止值和增量值。
由于其虚拟(不写入磁盘)性质,它不允许在多个查询中使用,只能在其原始查询中使用。但是,可以通过ALTER命令将序列表转换为标准表。如果删除转换表,则序列表仍然存在。序列也不能产生负数或以最大值/最小值旋转。
安装序列(Sequence )引擎
使用序列需要安装序列引擎,MariaDB将其作为插件而不是二进制文件分发。使用以下命令安装它-
INSTALL SONAME "ha_sequence";
安装后,验证它-
SHOW ENGINES\G
请记住,在引擎安装之后,您不能使用使用序列语法的名称创建标准表,但是可以使用序列语法的名称创建临时表。
创建序列
序列创建有两种方法-
- 创建一个表并使用AUTO_INCREMENT属性将一列定义为自动增量。
- 使用现有数据库并使用序列SELECT查询生成序列。该查询使用seq_ [FROM] to [TO]或seq_ [FROM] to [TO] _step_STEP语法。
最佳做法更喜欢使用第二种方法。查看下面给出的序列创建示例-
SELECT * FROM seq_77_to_99;
序列有很多用途-
- 在列中找到缺失值,以防止操作中的相关问题
SELECT myseq.seq FROM seq_22_to_28 myseq LEFT JOIN table1 t ON myseq.seq
= x.y WHERE x.y IS NULL;
- 构造值的组合-
SELECT x1.seq, x2.seq FROM seq_5_to_9 x1 JOIN seq_5_to_9 x2 ORDER BY 5, 6;
查找数字的倍数-
SELECT seq FROM seq_3_to_100_step_4;
构造一个日期序列,以用于预订系统之类的应用程序。
构造一个时间序列。
Managing Duplicates
如先前课程中所述,MariaDB在某些情况下允许重复的记录和表。由于不同的数据或对象类型,或由于操作对象的唯一寿命或存储,这些重复项中的某些实际上并非重复项。这些重复项通常也不会造成任何问题。
在某些情况下,重复确实会造成问题,并且它们经常是由于隐式操作或MariaDB命令的宽大策略而出现的。有多种方法可以控制此问题,查找重复项,删除重复项并防止重复项创建。
策略与工具
有四种管理重复项的关键方法:
- 用JOIN为它们钓鱼,并用一个临时表删除它们。
- 使用INSERT ... ON DUPLICATE KEY UPDATE在发现重复项时进行更新。
- 使用DISTINCT修剪SELECT语句的结果并删除重复项。
- 使用INSERT IGNORE停止插入重复项。
对临时表使用联接
只需像内部联接一样执行半联接,然后删除在临时表中发现的重复项。
使用INSERT
当INSERT ... ON DUPLICATE KEY UPDATE发现重复的唯一键或主键时,它将执行更新。在发现多个唯一keys时,它仅更新第一个。因此,不要在具有多个唯一索引的表上使用它。
查看以下示例,该示例揭示了在包含索引值的表插入到填充字段中后会发生什么情况
INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
注:如果找不到键,则执行INSERT ... ON DUPLICATE KEY UPDATE语句的方式与普通的插入语句相同。
使用DISTINCT
DISTINCT子句从结果中删除重复项。 DISTINCT子句的一般语法如下
SELECT DISTINCT fields
FROM table
[WHERE conditions];
注意:带有DISTINCT子句的语句的结果
- 使用一个表达式时,它将为其返回唯一值。
- 使用多个表达式时,它返回唯一的组合。
- 它不会忽略NULL值。因此,结果还包含NULL作为唯一值。
使用DISTINCT子句为单个表达式查看以下语句
SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';
使用多个表达式查看以下示例-
SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30
使用INSERT IGNORE
INSERT IGNORE语句指示MariaDB在发现重复记录时取消插入。查看下面给出的用法示例-
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
另外,请注意重复项背后的逻辑。一些表根据该表数据的性质要求重复。适应您管理重复记录的策略中的需求。
SQL注入保护(SQL Injection Protection)
接受用户输入的简单行为为漏洞利用打开了大门。问题主要来自于数据的逻辑管理,但是幸运的是,避免这些主要缺陷相当容易。
SQL注入的机会通常发生在用户输入诸如名称之类的数据并且代码逻辑无法分析此输入的情况下。相反,该代码允许攻击者插入MariaDB语句,该语句将在数据库上运行。
在进行任何处理之前,请始终考虑用户输入的,可疑的并且需要进行严格验证的数据。通过模式匹配执行此验证。例如,如果预期的输入是用户名,则将输入的字符限制为字母数字字符和下划线,并限制为一定长度。
同样,在创建输入约束时利用REGEXP运算符和LIKE子句。
考虑所有类型的必要的显式输入控制,例如:
- 控制使用的转义字符。
- 控制用于输入的特定适当数据类型。将输入限制为必要的数据类型和大小。
- 控制输入数据的语法。不允许超出所需模式的任何内容。
- 控制允许的条款。黑名单SQL关键字。
您可能不知道注入攻击的危险,或者认为它们无足轻重,但它们是安全性关注的首要问题。此外,请考虑这两个条目的作用:
1=1
-or-
*
允许其中任何一个与正确的命令一起输入的代码可能会导致显示数据库中的所有用户数据或删除数据库中的所有数据,并且两种注入都不是特别聪明。在某些情况下,攻击者甚至没有花时间检查漏洞。他们只需简单的输入即可进行盲目攻击。
另外,请考虑由任何与MariaDB配对的编程/脚本语言提供的模式匹配和正则表达式工具,它们可以提供更多的控制,有时还提供更好的控制。
Backup Methods
数据是业务和运营的基础,并且存在各种可能的威胁(例如,攻击者,系统故障,不良升级和维护错误),因此备份仍然至关重要。这些备份采用多种形式,并且存在许多用于在这些过程中使用更广泛的选项集来创建备份的选项。要记住的重要事项是数据库类型,关键信息和所涉及的结构。此信息确定您的最佳选择。
OPTIONS
备份的主要选项包括逻辑备份和物理备份。逻辑备份包含用于还原数据的SQL语句。物理备份包含数据副本。
- Logical(逻辑) backups -- 与物理备份相比,逻辑备份提供了灵活性,可以在配置不同的另一台计算机上还原数据,而物理备份通常仅限于同一计算机和数据库类型。逻辑备份发生在数据库和表级别,而物理备份发生在目录和文件级别。
- Physical backups -- 物理备份的大小比逻辑备份小,并且执行和还原所需的时间也更少。物理备份还包括日志和配置文件,但逻辑备份不包括。
备份工具
用于MariaDB备份的主要工具是mysqldump。它提供了逻辑备份和灵活性。对于小型数据库,它也是一个极好的选择。Mysqldump将数据转储为SQL,CSV,XML和许多其他格式。未经明确指示,其输出不会保留存储过程,视图和事件。
mysqldump备份有三个选项:
- Raw data - 通过--tab选项将表转储为原始数据文件,该选项还指定文件的目标位置
$ mysqldump -u root -p --no-create-info \
--tab=/tmp PRODUCTS products_tbl
- Data/Definitions export - 此选项允许将一个或多个表导出到文件,并支持备份主机上的所有现有数据库。检查将内容或定义导出到文件的示例
$ mysqldump -u root -p PRODUCTS products_tbl > export_file.txt
- Transfer - 您还可以将数据库和表输出到另一台主机
$ mysqldump -u root -p database_name \
| mysql -h other-host.com database_name
使用SELECT ... INTO OUTFILE语句
导出数据的另一种方法是使用SELECT ... INTO OUTFILE语句。这个简单的选项将表输出到一个简单的格式化文本文件中-
mysql> SELECT * FROM products_tbl
-> INTO OUTFILE '/tmp/products.txt';
它的属性允许将文件格式化为您的首选规范。
请注意此声明的以下品质:
- 文件名必须指定所需的输出位置。
- 您需要MariaDB文件特权才能执行该语句。
- 输出文件名必须唯一。
- 您需要主机上的登录凭据。
- 在UNIX环境中,输出文件是world可读的文件,但是其服务器所有权会影响您删除文件的能力。.确保您具有特权。
在备份中使用CONNECT
CONNECT处理程序允许导出数据。事实证明,这主要在SELECT ... INTO OUTFILE操作不支持文件格式的情况下有用。
查看以下示例:
create table products
engine = CONNECT table_type = XML file_name = 'products.htm' header = yes
option_list = 'name = TABLE,coltype = HTML,attribute = border = 1;cellpadding = 5'
select plugin_name handler, plugin_version version, plugin_author
author, plugin_description description, plugin_maturity maturity
from information_schema.plugins where plugin_type = 'STORAGE ENGINE';
其他工具
备份的其他选项如下:
- XtraBackup - 此选项以XtraDB / InnoDB数据库为目标,并与任何存储引擎一起使用。从Percona的官方网站了解有关此工具的更多信息。
- Snapshots - 一些文件系统允许快照。该过程包括使用读取锁刷新表,安装快照,解锁表,复制快照,然后卸载快照。
- LVM - 这种流行的方法采用Perl脚本。它在每个表上获得读锁定,并将缓存刷新到磁盘。然后获取快照并解锁表。
- TokuBackup - Percona提供的此解决方案提供了热备份,同时考虑了InnoDB备份选项的问题和限制。当应用程序继续操作它们时,它会生成文件的事务性声音副本。有关更多信息,请访问Percona网站。
INNODB注意事项
InnoDB使用缓冲池来提高性能。在备份中,配置InnoDB以避免将整个表复制到缓冲池中,因为逻辑备份通常执行全表扫描。
备份加载方式
在本章中,我们将学习各种备份加载方法。从备份还原数据库是一个简单的过程,有时甚至是一个非常长的过程。
加载数据有三个选项:LOAD DATA语句,mysqlimport和简单的mysqldump restore。
使用LOAD DATA
LOAD DATA语句用作批量加载器。查看加载文本文件的用法示例:
mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl;
请注意LOAD DATA语句的以下品质:
- 使用LOCAL关键字可防止MariaDB对主机执行深度搜索,并使用非常特定的路径。
- 该语句采用的格式由换行符(换行符)终止的行和制表符分隔的数据值组成。
- 使用FIELDS子句明确指定一行中字段的格式。使用LINES子句指定行尾。查看下面的示例。
mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl
FIELDS TERMINATED BY '|'
LINES TERMINATED BY '\n';
- 该语句假定数据文件中的列使用表的相同顺序。如果您需要设置其他顺序,则可以按以下方式加载文件:
mysql> LOAD DATA LOCAL INFILE 'products_copy.txt' INTO TABLE empty_tbl (c, b, a);
使用MYSQLIMPORT
mysqlimport工具充当LOAD DATA包装器,允许从命令行进行相同的操作。 加载数据如下-
$ mysqlimport -u root -p --local database_name source_file.txt
指定格式如下-
$ mysqlimport -u root -p --local --fields-terminated-by="|" \
--lines-terminated-by="\n" database_name source_file.txt
使用--columns选项指定列顺序-
$ mysqlimport -u root -p --local --columns=c,b,a \
database_name source_file.txt
使用MYSQLDUMP
使用mysqldump恢复需要以下简单语句将转储文件加载回host :
shell> mysql database_name < source_file.sql
特殊字符和行号
在LOAD DATA语句中,引号和特殊字符可能无法正确解释。该语句采用未加引号的值,并将反斜杠视为转义字符。使用FIELDS子句指定格式。用“ ENCLOSED BY”指向引号,这会导致引号从数据值中剥离。通过“ ESCAPED BY”更改转义符。
Useful Functions(有用的功能)
本章包含最常用功能的列表,并提供定义,说明和示例。
MariaDB聚合函数
下面是最常用的聚合函数
Sr.No | Name & Description |
---|---|
1 | COUNT它计算记录数。Example − SELECT COUNT(*) FROM customer_table; |
2 | MIN它显示了一组记录的最小值。Example − SELECT organization, MIN(account) FROM contracts GROUP BY organization; |
3 | MAX它显示了一组记录的最大值。Example − SELECT organization, MAX(account_size) FROM contracts GROUP BY organization; |
4 | AVG它计算一组记录的平均值。Example − SELECT AVG(account_size) FROM contracts; |
5 | SUM它计算一组记录的总和。Example − SELECT SUM(account_size) FROM contracts; |
MariaDB Age 计算
TIMESTAMPDIFF函数提供了一种计算 Age 的方法-
SELECT CURDATE() AS today;
SELECT ID, DOB, TIMESTAMPDIFF(YEAR,DOB,'2015-07-01') AS age FROM officer_info;
MariaDB字符串串联(Concatenation)
串联操作后,CONCAT函数将返回结果字符串。您可以使用一个或多个参数。查看下面给出的语法
SELECT CONCAT(item, item,...);
查看以下示例-
SELECT CONCAT('Ram', 'bu', 'tan');
Output:Rambutan
MariaDB Date/Time Functions
下面给出的是重要的日期函数-
Sr.No | Name & Description |
---|---|
1 | CURDATE()它以yyyy-mm-dd或yyyymmdd格式返回日期。Example − SELECT CURDATE(); |
2 | DATE()它以多种格式返回日期。Example −CREATE TABLE product_release_tbl (x DATE); |
3 | CURTIME()它以HH:MM:SS或HHMMSS.uuuuuu格式返回时间。Example − SELECT CURTIME(); |
4 | DATE_SUB()它从指定日期开始增加或减少几天。Example − SELECT DATE_SUB('2016-02-08', INTERVAL 60 DAY); |
5 | DATEDIFF()它确定两个日期之间的日期。Example − SELECT DATEDIFF('2016-01-01 23:59:59','2016-01-03'); |
6 | DATE ADD()它在日期和时间之间增加或减去任何时间单位。Example − SELECT DATE_ADD('2016-01-04 23:59:59', INTERVAL 22 SECOND); |
7 | EXTRACT()它从日期中提取一个单位。Example − SELECT EXTRACT(YEAR FROM '2016-01-08'); |
8 | NOW()它以yyyy-mm-dd hh:mm:ss或yyyymmddhhmmss.uuuuuu格式返回当前日期和时间。Example − SELECT NOW(); |
9 | DATE FORMAT()它根据指定的格式字符串格式化日期。Example − SELECT DATE_FORMAT('2016-01-09 20:20:00', '%W %M %Y'); |
以下是一些重要的时间函数-
Sr.No | Name & Description |
---|---|
1 | HOUR()它返回时间的小时数或经过的小时数。Example − SELECT HOUR('19:17:09'); |
2 | LOCALTIME()它的功能与NOW()完全相同。 |
3 | MICROSECOND()它返回时间的微秒。Example − SELECT MICROSECOND('16:30:00.543876'); |
4 | MINUTE()它返回时间的分钟数。Example − SELECT MINUTE('2016-05-22 17:22:01'); |
5 | SECOND()它返回日期的秒数。Example − SELECT SECOND('2016-03-12 16:30:04.000001'); |
6 | TIME_FORMAT()它根据指定的格式字符串格式化时间。Example − SELECT TIME_FORMAT('22:02:20', '%H %k %h %I %l'); |
7 | TIMESTAMP()它以yyyy-mm-dd hh:mm:dd格式为活动提供时间戳。Example − CREATE TABLE orders_ (ID INT, tmst TIMESTAMP); |
MariaDB数值函数
下面给出的是MariaDB中的一些重要数值函数-
Sr.No | Name & Description |
---|---|
1 | TRUNCATE()它将截断后的数字返回到小数位指定。Example − SELECT TRUNCATE(101.222, 1); |
2 | COS()它返回x弧度的余弦值。Example − SELECT COS(PI()); |
3 | CEILING()它返回不小于x的最小整数。Example − SELECT CEILING(2.11); |
4 | DEGREES()它将弧度转换为度。Example − SELECT DEGREES(PI()); |
5 | DIV()它执行整数除法。Example − SELECT 100 DIV 4; |
6 | EXP()它使e返回x的幂。Example − SELECT EXP(2); |
7 | FLOOR()它返回不大于x的最大整数。Example − SELECT FLOOR(2.01); |
8 | LN()它返回x的自然对数。Example − SELECT LN(3); |
9 | LOG()它将自然对数或对数返回给定的底数。Example − SELECT LOG(3); |
10 | SQRT()它返回平方根。Example − SELECT SQRT(16); |
MariaDB字符串函数
重要的字符串函数在下面给出-
Sr.No | Name & Description |
---|---|
1 | INSTR()它返回子字符串的第一个实例的位置。Example − SELECT INSTR('rambutan', 'tan'); |
2 | RIGHT()它返回最右边的字符串字符。Example − SELECT RIGHT('rambutan', 3); |
3 | LENGTH()它返回字符串的字节长度。Example − SELECT LENGTH('rambutan'); |
4 | LOCATE()它返回子字符串的第一个实例的位置。Example − SELECT LOCATE('tan', 'rambutan'); |
5 | INSERT()它返回一个已修改的字符串,该字符串在特定位置具有指定的子字符串。Example − SELECT INSERT('ramputan', 4, 1, 'b'); |
6 | LEFT()它返回最左边的字符。Example − SELECT LEFT('rambutan', 3); |
7 | UPPER()它将字符更改为大写。Example − SELECT UPPER(lastname); |
8 | LOWER()它将字符更改为小写。Example − SELECT LOWER(lastname); |
9 | STRCMP()它比较字符串并在它们相等时返回0。Example − SELECT STRCMP('egg', 'cheese'); |
10 | REPLACE()替换字符后返回字符串。Example − SELECT REPLACE('sully', 'l', 'n'); |
11 | REVERSE()它反转字符串中的字符。Example − SELECT REVERSE('racecar'); |
12 | REPEAT()它返回一个字符串,重复给定字符x次。Example − SELECT REPEAT('ha ', 10); |
13 | SUBSTRING()它从字符串中返回一个子字符串,从位置x开始。Example − SELECT SUBSTRING('rambutan',3); |
14 | TRIM()它从字符串中删除尾随/前导字符。Example − SELECT TRIM(LEADING '' FROM 'rambutan'); |
Maria DB数据库基础知识的更多相关文章
- 阿里面试官必问的12个MySQL数据库基础知识,哪些你还不知道?
数据库基础知识 1.为什么要使用数据库 (1)数据保存在内存 优点: 存取速度快 缺点: 数据不能永久保存 (2)数据保存在文件 优点: 数据永久保存 缺点: 1)速度比内存操作慢,频繁的IO操作. ...
- SQL数据库基础知识-巩固篇<一>
SQL数据库基础知识-巩固篇<一>... =============== 首先展示两款我个人很喜欢的数据库-专用于平时个人SQL技术的练习<特点:体积小,好安装和好卸载,功能完全够用 ...
- MySQL数据库基础知识及优化
MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...
- 数据库基础知识详解三:MVCC、范式以及表连接方式
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 8.MVCC 多版本并发控制(Multi-Versi ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- MySQL数据库基础知识复习
现在是2020年寒假,这也是新年写的第一篇博客,用了十几天的时间自学了数据库基础部分,想总结一下得失同时并通过写博客来复习前面学的知识点. 个人: 1.本来是计划一周学完基础部分的178p但没能完成这 ...
- 数据库基础知识详解四:存储过程、视图、游标、SQL语句优化以及索引
写在文章前:本系列文章用于博主自己归纳复习一些基础知识,同时也分享给可能需要的人,因为水平有限,肯定存在诸多不足以及技术性错误,请大佬们及时指正. 11.存储过程 存储过程是事先经过编译并存储在数 ...
- [mysql]数据库基础知识
数据库管理系统DBMS 软件 bin config db (保存数据) 写程序: 数据库在本地 找到目录 添加数据 数据库在远程 socket连接上远程机器 socket发送命令 需要做的事情 程序 ...
- Oracle数据库基础知识1
DDL语句 1.表的创建 CREATE TABLE table_name(); 例如: CREATE TABLE USER_E( id NUMBER (5), name VARCHAR(20), ge ...
随机推荐
- WPF中ComboBox控件的SelectedItem和SelectedValue的MVVM绑定
问题描述:左侧是一个ListView控件,用于显示User类的Name属性,右侧显示其SelectedItem的其他属性,包括Age, Address,和Category.其中Category用Com ...
- yalmip安装
1,将yalmip解压,在matlab中添加路径. 2,yalmiptest测试是否安装成功.
- k8s-静态PV和动态PV
1.pv 简单介绍 PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理 PV分为静态和动态,动态能够自动创建PV • PersistentVolumeCl ...
- docker入门-Dockerfile入门
1.dockerfile 构建基础命令 2. 构建镜像命令 Usage: docker image build [OPTIONS] PATH | URL | -Options:-t, --tag li ...
- C# Event (1) —— 我想搞个事件
本文地址:https://www.cnblogs.com/oberon-zjt0806/p/15975299.html 本文最初来自于博客园 本文遵循CC BY-NC-SA 4.0协议,转载请注明出处 ...
- Spring Cloud Alibaba 2021.0.1.0 发布:版本号再也不迷糊了
大家好,DD又来了! 3月9日,Spring官方博客发文:Spring Cloud Alibaba 2021.0.1.0发布了. 前段时间DD还在微信群里看到小伙伴吐槽Spring Cloud Ali ...
- 服务端&客户端注册进Eureka
目录 服务端(接口提供方) 创建项目 导入Eureka客户端POM 启动类添加注解 配置YML 暴漏接口 启动服务 集群 配置成功后页面如下 客户端(接口调用方) 修改Yml文件 配置类 启动类添加注 ...
- 二级py--day1
1.py基础篇 解释:因为在python语言中存在一个不确定尾数问题. 因为浮点数是以二进制形式储存在计算机内部的,受限于宽度,二进制数并不完全等于其浮点数本身,只能说接近.所以0.1+0.2==0. ...
- 30道关于linux的基础命令小题,先练练手
1.修改主机名为yuanlai0224命令是: 2.切换⽬录到/yuchao01/data/,再创建脚本/my_website/scripts/start.sh. 绝对路径.相对路径两种写法 3.查看 ...
- 手写 Vue2 系列 之 编译器
前言 接下来就要正式进入手写 Vue2 系列了.这里不会从零开始,会基于 lyn-vue 直接进行升级,所以如果你没有阅读过 手写 Vue 系列 之 Vue1.x,请先从这篇文章开始,按照顺序进行学习 ...