云网牛站
所在位置:首页 > Linux云数据库 > 将MySQL与基本SQL命令配合使用

将MySQL与基本SQL命令配合使用

2019-05-03 11:47:40作者:梁叹稿源:云网牛站

学习在开源数据库管理系统MySQL中使用基本SQL命令,MySQL查询(命令)不区分大小写,但是,通常的做法是将ALL CAPS用于实际的命令关键字,将小写用于其余的。

 

连接到MySQL服务器和从MySQL服务器断开连接

安装数据库请参考在Ubuntu 18.04/16.04命令行上安装MySQL 8.0.11的全过程

为了能够输入查询,您首先必须使用MySQL连接到服务器并使用MySQL提示符,执行此操作的命令是:

mysql -h host_name -u user -p

-h用于指定主机名(如果服务器位于另一台机器上,如果不是,则只省略它),-u提及用户,-p指定要输入密码。

虽然不推荐(出于安全原因),但您可以直接在命令中输入密码,方法是在-p之后输入密码。例如,如果test_user的密码是1234,并且您尝试在正在使用的计算机上进行连接,则可以使用:

mysql -u test_user -p1234

如果您成功输入了所需的参数,那么您将受到MySQL shell提示符(mysql>)的欢迎:

将MySQL与基本SQL命令配合使用

要断开与服务器的连接并离开mysql提示符,请输入:

QUIT

输入quit(MySQL不区分大小写)或\q也可以,按Enter退出。

您还可以使用简单的命令输出有关版本的信息:

sudo mysqladmin -u root version -p

注意:在输入我要覆盖的任何查询之前,请确保已连接到服务器。

如果要查看选项列表,请使用:

mysql --help

 

在MySQL中使用查询

MySQL将数据存储在表中并使用称为查询的命令(SQL=结构化查询语言),在深入研究存储,访问和修改数据之前,我将介绍基本查询,以便您掌握它。

由于MySQL使用表,查询的输出也将显示在表中。所有SQL语句都应该跟一个分号(;),尽管有例外(最值得注意的是:QUIT),您可以使用逗号(,)分隔列,以下是一些基本示例:

mysql> SELECT VERSION();

mysql> SELECT CURRENT_DATE;

mysql> SELECT VERSION(), CURRENT_DATE;

例如,第三个查询将打印出与此类似的内容:

将MySQL与基本SQL命令配合使用

由于分号(;)标记语句的结尾,因此您还可以在一行上编写多个语句。

例如,而不是:

mysql> SELECT VERSION();

mysql> SELECT CURRENT_DATE;

你也可以这样写:

mysql> SELECT VERSION(); SELECT CURRENT_DATE;

您还可以输入多行查询(如果在按Enter键之前未在行尾包含分号),在这种情况下,MySQL将只是输入一个不同的提示,让你继续你的命令,例如:

mysql> SELECT

-> VERSION()

-> ,

-> CURRENT_DATE;

如果你没有在一行(一个被'或'包围的单词)上结束字符串,也会出现多行查询。

如果要取消查询,请键入\c并按Enter键。

有提示具有不同的含义:

mysql> =准备好进行新查询。

-> =等待多行查询的下一行。

'> =等待下一行,等待以单引号(')开头的字符串的完成。

“> =等待下一行,等待以双引号(”)开头的字符串的完成。

`> =等待下一行,等待以反引号(`)开头的标识符的完成。

/*> =等待下一行,等待以/*开头的评论完成。

您还可以使用NOW()以及使用USER()连接的用户打印当前时间(hh:mm:ss)和当前日期:

mysql> SELECT NOW();

mysql> SELECT USER();

这将输出类似于此的内容:

将MySQL与基本SQL命令配合使用

MySQL还允许您计算数学计算:

mysql> SELECT COS(PI()/3), (10-2+4)/3;

输出:

将MySQL与基本SQL命令配合使用

 

在MySQL中使用数据库

1.获取有关数据库的信息

首先,您可以列出可用的数据库:

mysql> SHOW DATABASES;

您还可以使用以下命令查看所选数据库:

mysql> SELECT DATABASE();

如果没有选择数据库,这将输出NULL,以下是两个提到的语句的示例输出:

将MySQL与基本SQL命令配合使用

2.创建数据库

只需输入命令即可完成此操作:

mysql> CREATE DATABASE example_db;

注意:在Ubuntu 18.04(或任何其他基于Unix的系统)中,数据库和表名称区分大小写。

3.选择数据库

要选择数据库,您必须提到要使用它:

mysql> USE example_db;

如果成功,您将收到消息:

Database changed

如果不成功,您将收到一条错误消息,告诉您MySQL无法找到指定的数据库。

您还可以通过在connect命令末尾提及现有数据库的名称来连接到服务器时选择数据库:

mysql -h host_name -u user_name -p example_table

例如:

mysql -u root -p example_table

 

在SQL中使用表

1.获取有关表的信息

要列出当前数据库中的表,请使用:

mysql> SHOW TABLES;

注意:确保选择了数据库。

如果数据库为空(例如,新创建的),则输出将为:

Empty set (0,00 sec)

创建表后,输出将沿着以下行:

将MySQL与基本SQL命令配合使用

2.创建表格

要创建表,您必须指定布局 - 列和应存储的数据类型。

在我的例子中,我将存储有关一群人的信息:姓名,出生日期,性别,国家。这是我如何创建该表:

mysql> CREATE TABLE table_1 (name VARCHAR(30), birth_date DATE, sex CHAR(1), country VARCHAR(40));

注意:您也可以在多行上编写命令。

您可以看到我提到了表名(table_1)和列名(name,birth_date,sex,country),在列名之后,我指定了它们存储的数据类型,VARCHAR(n)是长度最多为n个字符的字符串,DATE是不言自明的(CCYY-MM-DD格式),CHAR(1)表示单个字符(具体来说,我打算使用'm'和'f '对于男性和女性),其他常见类型包括INT(整数),BOOL(布尔值),TIME(hh:mm:ss),MySQL中有许多可用的数据类型(数字,字符串,日期和时间),您还可以使用更复杂的数据类型,例如AUTO_INCREMENT。

如果您显示表格,现在将显示该表格。

如果您愿意,可以使用ALTER TABLE修改表的布局:

mysql> ALTER TABLE table_1 ADD email VARCHAR(50);

mysql> ALTER TABLE table_1 DROP birth_date;

这些示例添加了一列(第一个示例)并删除了一列(第二个示例),您可以在此处查看有关ALTER TABLE的更多信息,因为它还具有更高级的用途。

3.描述表格

您可以随时查看表格的结构:

mysql> DESCRIBLE table_name;

例如:

mysql> DESCRIBE table_1;

将要输出:

将MySQL与基本SQL命令配合使用

4.删除表格

删除表的声明是:

DROP TABLE table_name;

5.将数据插入表中

要插入数据,您必须指定要在每列中引入的值(与表定义中的顺序相同),对于空值或未知值,您应该使用NULL,确保带引号(')或双引号(“)的非数字值,值应以逗号(,)分隔,

以下是例子:

mysql> INSERT INTO table_1 VALUES ('Smith', '1980-04-24', 'm', 'Argentina');

mysql> INSERT INTO table_1 VALUES ('Emily', '1994-07-19', 'f', NULL);

6.清空表格

如果要清空表(删除所有条目),请使用:

DELETE FROM table_name;

使用WHERE,您可以删除特定的行:

DELETE FROM table_name WHERE col_name = value

我将在以下部分进行更深入的介绍。

7.更新表条目

更新条目的语法是:

UPDATE table_name SET col = 'value' WHERE conditions

例如:

UPDATE table_1 SET country = 'France' WHERE name = 'Emily'

如果未指定条件,则将更改所有条目。

8.从表中检索数据

用于从表中提取数据的MySQL命令是SELECT,这种陈述的结构是:

SELECT what

FROM where

WHERE conditions;

我将介绍一些常见的应用程序,以便您了解如何从数据库中精确提取所需内容。

a.选择所有数据

首先,最简单的用法是显示表中的所有数据,例如:

mysql> SELECT * FROM table_1;

通配符(*)代表一切,table_1是我正在提取的表,你可以看到我省略了WHERE部分,为所选数据提供条件是可选的。

b.选择特定数据

首先,我将继续选择行。

要选择特定行,您必须指定缩小数据范围的条件:

mysql> SELECT * FROM table_1 WHERE name = 'Smith';

mysql> SELECT * FROM table_1 WHERE sex = 'm';

mysql> SELECT * FROM table_1 WHERE birth_date < '1990-1-1';

mysql> SELECT * FROM table_1 WHERE sex = 'f' AND birth_date > '1991-1-1';

mysql> SELECT * FROM table_1 WHERE sex = 'm' OR country = 'France';

mysql> SELECT * FROM table_1 WHERE country IS NOT NULL;

在前两个示例中,我只是比较字符串(不区分大小写),您还可以将日期和整数等值与比较运算符(>,<,> =,<=,=)进行比较,<>用于表示'不相等',您可以使用逻辑运算符(AND,OR)指定多个条件,AND的优先级高于OR,在具有更复杂的条件时最好使用括号。

IS NOT NULL是一种仅显示没有指定列值的行的方法,您不能将算术比较运算符与NULL一起使用,因为它表示缺少值(结果也只是NULL),您应该使用IS NULL和IS NOT NULL。

NULL和被视为FALSE,其余为TRUE。

现在我将介绍显示特定列。

为此,您必须指定要显示的列,以逗号分隔,例如:

mysql> SELECT name, birth_date FROM table_1;

您还可以摆脱重复数据,例如,如果我想获得所有出生日期(如果多个人在该日出生,则多次获得相同的值),我将使用:

mysql> SELECT DISTINCT birth_date FROM table_1;

这只会显示DISTINCT结果。

为了更具体,您可以将特定列与条件(WHERE)结合使用:

mysql> SELECT name, sex FROM table_1 WHERE country = 'France' AND birth_date < '1991-1-1';

C.排序数据

要对数据进行排序,请使用ORDER_BY:

mysql> SELECT name FROM table_1 ORDER BY birth_date;

您可以看到我将其与选择特定数据相结合,上面的命令将显示所有条目的名称,按出生日期的升序排序。

您也可以按降序排序:

mysql> SELECT name FROM table_1 ORDER BY birth_date DESC;

排序可以应用于多个列,例如,要按出生日期降序排序,并按名称按升序排序同一天出生的人,我会使用:

mysql> SELECT name FROM table_1 ORDER BY birth_date DESC, name;

d.操纵日期

您可以使用CURDATE()获取当前日期,使用这个和另一年,您可以使用TIMESTAMPDIFF()计算差异(例如,获得一个人的年龄):

mysql> SELECT name, birth_date, CURDATE(),

-> TIMESTAMPDIFF(YEAR, birth_date, CURDATE()) AS age

-> FROM table_1 ORDER BY age;

以下是exampletable_1的输出:

将MySQL与基本SQL命令配合使用

TIMESTAMPDIFF()将用于结果(YEAR)的单位和用于计算差异的两个日期(birth_date,CURDATE())作为参数,AS(别名)关键字命名结果列并使其易于使用(在此示例中:按年龄排序)。

要引用日期的特定部分,可以使用日期作为参数来使用YEAR(),MONTH()和DAYOFMONTH(),例如:

mysql> SELECT name, birth_date, MONTH(birth_date) FROM table_1;

您可以像普通数字一样比较结果(月,年,日),但是,要将这些内容与下个月的内容进行比较,您不能简单地添加到CURDATE(),因为这可能会导致您检查第13个月或其他此类无意义,解决方法是INTERVAL和DATE_ADD():

mysql> SELECT name, birth_date

FROM table_1

WHERE MONTH(birth_date) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));

您还可以使用模运算符(MOD):

mysql> SELECT name, birth_date

FROM pet

WHERE MONTH(birth_date) = MOD(MONTH(CURDATE()), 12) + 1;

使用无效日期将返回NULL并生成警告,如下所示:

mysql> SHOW WARNINGS;

e.使用模式匹配

在MySQL中,_代表任何单个字符,%代表0+字符和模式(默认情况下)不区分大小写,使用模式而不是=和<>,你应该使用LIKE和NOT LIKE:

mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%a%';

mysql> SELECT birth_date FROM table_1 WHERE name LIKE '%b';

mysql> SELECT birth_date FROM table_1 WHERE name LIKE 'c%';

mysql> SELECT * FROM table_1 WHERE name LIKE '___';

这些示例选择名称包含“a”(第一个示例)的条目的出生日期,以“b”结尾(第二个示例)或以“c”开头(第三个示例),最后一个示例选择名称恰好包含三个字符的行(三个“_”实例)。

您还可以使用扩展正则表达式,REGEXP_LIKE()(还有REGEXP和RLIKE运算符),不过正则表达式超出了本文的范围。

F.计算结果

计数数据很重要,在现实世界中有很多用途,MySQL使用COUNT()执行此类任务,最简单的例子是计算表的条目:

mysql> SELECT COUNT(*) FROM table_1;

您还可以在组之间拆分计数,例如,我可以GROUP BY国家/地区并显示每个国家/地区的条目数:

mysql> SELECT country, COUNT(*) FROM table_1 GROUP BY country;

您可以通过输入更多列来分组来提及更具体的组,例如:

mysql> SELECT country, sex, COUNT(*) FROM table_1 GROUP BY country, sex;

这些结果也可以与WHERE一起使用以缩小输出。

计数时要小心,如果除了COUNT()之外还指定了要打印的其他内容,并且在GROUP BY之后没有提及这些列,则可能会出现错误或意外结果(请参阅ONLY_FULL_GROUP_BY)。

G.使用多个表

这是您可能希望在稍微复杂的上下文中执行的操作。

例如,假设给某人参加会议。

您可以显示这些表中的人员在参加会议时的年龄:

mysql> SELECT table_1.name,

TIMESTAMPDIFF(YEAR, birth_date, date) AS age,

meeting

FROM table_1 INNER JOIN table_2

ON table_1.name = table_2.name;

这将输出如下内容:

将MySQL与基本SQL命令配合使用

我会尝试解释语法,对于name,我们不得不提到table_1.name和table_2.name,因为该列存在于两个表中(对于birth_date,date和meeting,我们不需要指定表,因为它们对于其中一个是唯一的),这使用了我已经涵盖的语句。

有趣的是这个:

FROM table_1 INNER JOIN table_2

ON table_1.name = table_2.name;

INNER JOIN将表放在一起并获取具有共同点的行,由关键字ON指定的条件,在这种情况下,名称匹配。

注意:您也可以将自己的表放在一起,也许比较两个SELECT结果。

 

在MySQL中使用批处理模式

另一个简洁的功能是批处理模式,您可以将语句放在文件中并执行它们,而不是交互式shell:

mysql -h host_name -u user_name -p < batch_file

然后,系统将提示您输入密码(如果用户需要),如果要继续运行而不是停止错误,请使用-force。

您甚至可以将输出重定向到另一个程序或文件:

mysql -h host_name -u user_name -p < batch_file | less

mysql -h host_name -u user_name -p < batch_file > output_file

您还可以使用带-v参数的-t或echo输出获得交互式输出。

如果您在交互式MySQL shell中并且想要运行脚本,请使用以下两种方法之一:

mysql> source batch_file;

mysql> \. batch_file;

 

结语

在本文中,我介绍了将MySQL与基本SQL命令配合使用、使用MySQL处理表格数据库的不同方法,甚至可以深入研究更高级的功能。

 

相关主题

安装SQLPad:用于MySQL/PostgreSQL/SQL Server的基于Web的SQL编辑器

精选文章
热门文章