• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

数据库SQL入门阅读

当今大多数现代 Web 应用程序都与数据库交互,通常使用一种称为 sql 的语言。幸运的是,这种语言很容易学习。在本文中,我们将从一些基本的 SQL 查询开始,并使用它们与 mysql 数据库进行交互。

SQL是什么?

SQL(结构化查询语言)是一种设计用于与关系数据库管理系统(RDBMS)交互的语言,如 MySQL、Oracle、sqlite 等。要执行本文中的 SQL 查询,我建议您安装 MySQL。我还推荐 phpMyAdmin 作为 MySQL 的可视化界面。

以下应用程序使在本地计算机上安装 MySQL 和 phpMyAdmin 变得非常容易:

  • 适用于 Windows 的WAMP

  • 适用于 mac 的MAMP

我们将使用命令行进行查询。WAMP 已经带有一个 MySQL 控制台。对于 MAMP,您可能想阅读这篇文章。

创建数据库:创建数据库

这是我们的第一个查询。我们将创建一个可以使用的数据库。

首先,打开您的 MySQL 控制台并登录。对于 WAMP,默认密码为空。对于 MAMP,默认情况下密码应为“root”。

登录后,输入此查询并回车:

CREATE dataBASE my_first_db;

数据库SQL入门阅读  第1张

请注意,分号 (;) 被添加到查询的末尾,就像在代码行的末尾一样。

此外,特殊词“CREATE DATABASE”以及 SQL 中的所有特殊词都不区分大小写。但为了可读性,我们将它们写成大写。

可选:字符集和排序规则

如果你想设置默认字符集和排序规则,你可以像这样编写相同的查询:

CREATE DATABASE my_first_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

这是 MySQL 中支持的字符集和排序规则的列表。

显示数据库:列出所有数据库

此查询用于获取您拥有的所有数据库的列表。

数据库SQL入门阅读  第2张

DROP DATABASE:删除数据库

您可以使用此查询删除现有数据库。

数据库SQL入门阅读  第3张

小心这个查询,因为它不会给你任何警告。如果您在数据库下有表和数据,它们将立即被删除。

用途:选择数据库

这在技术上不是一个查询。这是一个“声明”,结尾不需要分号。

数据库SQL入门阅读  第4张

它告诉 MySQL 为当前会话选择一个要使用的默认数据库。现在我们准备在这个数据库下创建表和做其他事情。

什么是数据库表?

您可以将数据库表想象成包含结构化数据的电子表格csv 文件。

数据库SQL入门阅读  第5张

就像在此示例中一样,表具有列名和数据行。使用 SQL 查询,我们可以创建这些表。我们还可以添加、读取、更新和删除数据。

创建表:创建表

通过这个查询,我们可以在数据库中创建表。不幸的是,MySQL 文档对新学习者不是很友好。这种查询的结构可能会变得非常复杂,但我们将从一个简单的开始。

以下查询将创建一个包含 2 列的表。

CREATE TABLE users (
    username VARCHAR(20),
    create_date DATE
);

请注意,我们可以在多行中编写查询,甚至可以使用制表符进行缩进。

第一行很简单。我们只是创建一个名为“用户”的表。之后,在括号中,我们有一个用逗号分隔的列表列。在每个列名之后,我们都有一个数据类型,例如 VARCHAR 或 DATE。

VARCHAR(20) 表示该列是字符串类型,最长可以为20 个字符。DATE 也是一种专门用于存储日期的数据类型,格式如下:'YYYY-MM-DD'。

首要的关键

在我们运行该查询之前,我们还应该包含一个“user_id”列,这将是一个主键。无需过多了解细节,您可以将 PRIMARY KEY 视为一种标识表中每一行数据的方法。

现在查询变为:

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20),
    create_date DATE
);

INT 使其成为 32 位整数类型(即数字)。每次我们添加新的数据行时,AUTO_INCREMENT 都会自动生成一个新的 id 号。它不是必需的,但使它更方便。

此列不必是整数,但它是最常用的类型。拥有 PRIMARY KEY 列也不是必需的,但强烈建议使用良好的数据库设计和性能。

让我们运行查询:

数据库SQL入门阅读  第6张

显示表:列出所有表

此查询允许您获取当前在数据库中的表的列表。

数据库SQL入门阅读  第7张

解释:显示表结构

要查看现有表的结构,可以使用此查询。

数据库SQL入门阅读  第8张

结果中列出了字段(又名列)及其属性。

DROP TABLE:删除表

就像 DROP DATABASES 一样,此查询会删除一个表及其内容,而不会发出警告。

数据库SQL入门阅读  第9张

ALTER TABLE:修改表

此查询也可以具有相当复杂的结构,因为它可以对表执行大量更改。让我们看一些简单的例子。

(确保重新创建我们刚刚删除的表,否则以下查询显然不起作用。)

添加一列

ALTER TABLE users
    ADD email VARCHAR(100)
    AFTER username;

由于 SQL 的可读性,我认为该查询甚至不需要解释。

数据库SQL入门阅读  第10张

删除列

数据库SQL入门阅读  第11张

那也很简单。但请谨慎使用,因为它会在没有警告的情况下永久删除数据。

重新添加电子邮件列,因为我们稍后将使用它:

ALTER TABLE users
    ADD email VARCHAR(100)
    AFTER username;

修改列

有时您可能想要更改列的属性,因此您不必删除并重新创建它。

数据库SQL入门阅读  第12张

这将用户名列重命名为“user_name”,并将类型从 VARCHAR(20) 更改为 VARCHAR(30)。像这样的更改不应干扰表中的任何现有数据。

插入:将数据添加到表中

让我们使用这个查询将一些数据添加到表中。

数据库SQL入门阅读  第13张

如您所见,VALUES() 包含字段值列表,以逗号分隔。字符串值用单引号括起来。并且这些值需要按照我们创建表时定义的列的顺序排列。

请注意,我们称为“user_id”的 PRIMARY KEY 字段的第一个值为 NULL。我们这样做是为了自动生成一个 id,因为该列设置为 AUTO_INCREMENT。第一次输入一行数据时,id为1,下一个插入的行为2,以此类推...

替代语法

这是插入行的另一种语法。

数据库SQL入门阅读  第14张

这次我们使用关键字 SET 而不是 VALUES,并且后面没有括号。这里有几点需要注意:

  • 可以省略一列。例如,我们没有为 user_id 分配值,这将默认为 AUTO_INCREMENT 功能。如果省略 VARCHAR 列,它将默认为空字符串(除非在创建表期间指定了不同的默认值)。

  • 每列都必须通过其名称来引用。因此,与之前的语法不同,它们可以按任何顺序排列。

替代语法 2

这是另一种语法。

数据库SQL入门阅读  第15张

同样,由于每列都按名称引用,因此它们可以按任何顺序排列。

LAST_INSERT_ID()

您可以使用此查询来获取当前会话中最后插入的行的 AUTO_INCREMENT id。

数据库SQL入门阅读  第16张

NOW()

我认为现在是演示如何在查询中使用 MySQL 函数的好时机。

NOW() 函数返回当前日期。因此,您可以使用它在插入新行时自动将 DATE 列设置为当天。

数据库SQL入门阅读  第17张

请注意,我们收到了来自 MySQL 的警告,但这不是什么大问题。原因是 NOW() 实际上也返回时间信息。

数据库SQL入门阅读  第18张

但是我们创建的 create_date 列只包含日期,而不是时间,因此返回的数据被截断。我们可以改用 CURDATE() 函数,它只返回日期,但最后存储的数据将是相同的。

SELECT:从表中读取数据

显然,我们添加的数据将毫无用处,除非我们能够读取它。这就是 SELECT 查询的用武之地。

这是从表中读取的最简单的 SELECT 查询:

数据库SQL入门阅读  第19张

在这种情况下,星号 (*) 表示我们要求从表中获取所有列。如果您只需要特定的列,查询将如下所示:

数据库SQL入门阅读  第20张

WHERE Clause

通常,我们只对某些行感兴趣,而不是全部。例如,假设我们想要用户“nettuts”的电子邮件地址

数据库SQL入门阅读  第21张

把它想象成一个 IF 语句。WHERE 允许您在查询中为您要查找的结果添加条件。

请注意,对于相等条件,仅使用单个等号 (=),而不是您可能在编程中习惯的双 (==)。

您也可以使用其他比较条件:

数据库SQL入门阅读  第22张

AND 和 OR 可用于组合条件:

数据库SQL入门阅读  第23张

请注意,数值不必包含在引号内。

IN()

这对于匹配多个值很有用。

数据库SQL入门阅读  第24张

LIKE

这允许您进行通配符搜索。

数据库SQL入门阅读  第25张

百分号 (%) 用作通配符。

ORDER BY Clause

如果您希望按特定顺序返回结果,请使用以下子句:

数据库SQL入门阅读  第26张

默认顺序是 ASC(即升序)。您可以添加 DESC 以反转它的顺序。

LIMIT ... OFFSET ...

您可以限制返回结果的数量。

数据库SQL入门阅读  第27张

LIMIT 2 只获得前 2 个结果。LIMIT 1 OFFSET 2 在前 2 个结果之后得到 1 个结果。LIMIT 2, 1 表示同样的意思,但注意第一个数字是偏移量,第二个数字是限制。

UPDATE:更新表中的数据

此查询用于更新表中的数据。

数据库SQL入门阅读  第28张

大多数时候,它与 WHERE 子句一起使用,因为您只希望更新特定的行。如果未提供 WHERE 子句,则所有行都将使用相同的更改进行更新。

您还可以使用 LIMIT 子句来限制要更新的行数。

数据库SQL入门阅读  第29张

DELETE:从表中删除数据

就像 UPDATE 一样,此查询通常也与 WHERE 子句一起使用。

数据库SQL入门阅读  第30张

截断表

要删除表的全部内容,您可以这样做:

DELETE FROM users;

但通常使用 TRUNCATE 会更高效。

数据库SQL入门阅读  第31张

TRUNCATE 还重置 AUTO_INCREMENT 数字,因此新行将再次具有 id 1。但这不会发生在 DELETE 查询中,并且计数器会继续上升。

转义字符串值和特殊词

字符串值

某些字符需要转义,否则可能会出现问题。

数据库SQL入门阅读  第32张

反斜杠 (\) 用于转义。

出于安全原因,这也非常重要。任何进入数据库的用户输入都需要正确转义。在 PHP 中,您使用mysql_real_escape_string()函数或使用准备好的语句,因为它们会自动转义。

特殊词

由于 MySQL 有许多特殊的词,如 SELECT 或 UPDATE,您可以通过在表名和列名周围加上引号来防止冲突。但这些不是常规报价;您需要使用反引号 (`) 字符。

假设您出于某种原因要添加一个名为“删除”的列:

数据库SQL入门阅读  第33张

结论

感谢您阅读这篇文章。希望我能够向您展示 SQL 具有简单的学习曲线,但它非常强大。


文章目录
  • SQL是什么?
  • 创建数据库:创建数据库
    • 可选:字符集和排序规则
  • 显示数据库:列出所有数据库
  • DROP DATABASE:删除数据库
  • 用途:选择数据库
  • 什么是数据库表?
  • 创建表:创建表
    • 首要的关键
  • 显示表:列出所有表
  • 解释:显示表结构
  • DROP TABLE:删除表
  • ALTER TABLE:修改表
    • 添加一列
    • 删除列
    • 修改列
  • 插入:将数据添加到表中
    • 替代语法
    • 替代语法 2
    • LAST_INSERT_ID()
    • NOW()
  • SELECT:从表中读取数据
    • WHERE Clause
    • IN()
    • LIKE
    • ORDER BY Clause
    • LIMIT ... OFFSET ...
    • UPDATE:更新表中的数据
  • DELETE:从表中删除数据
    • 截断表
  • 转义字符串值和特殊词
    • 字符串值
    • 特殊词
  • 结论
  • 发表评论