基本 DDL 和 DML 命令:创建、选择、更新、删除

通过这份关于 DDL 和 DML 命令的实用指南,掌握基本的 MySQL 数据库操作。学习如何使用 `CREATE TABLE` 定义表结构,以及如何使用 `INSERT`、`SELECT`、`UPDATE` 和 `DELETE` 来操作数据。本文提供了清晰的语法、真实世界的示例和有效管理 MySQL 数据的关键技巧。

40 浏览量

核心 DDL 和 DML 命令:创建、选择、更新、删除

处理数据库,特别是像 MySQL 这样的关系型数据库,其核心在于定义数据的结构,然后与这些数据进行交互。这个过程通常分为 SQL 命令的两大主要类别:数据定义语言 (DDL) 和数据操纵语言 (DML)。DDL 命令用于定义和管理数据库对象,例如表,而 DML 命令用于插入、检索、修改和删除表中的记录。

本指南将引导您了解最基本的 MySQL DDL 和 DML 命令:使用 CREATE TABLE 来定义数据结构,以及使用 INSERTSELECTUPDATEDELETE 来操纵数据本身。掌握这些命令是任何希望有效管理和利用 MySQL 数据库的人迈出的关键一步。

数据定义语言 (DDL):创建表

DDL 命令关注数据库对象的模式和结构。用于数据存储的最基本的 DDL 命令是 CREATE TABLE,它允许您定义数据的蓝图。

CREATE TABLE 语法

创建表的 মোহন本语法涉及指定表名,然后定义其列,包括数据类型和任何约束条件。

CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    column3 datatype constraints,
    ...
);
  • table_name:您想为表指定的名称。它在数据库中应该是唯一的。
  • column_name:表中每个单独字段的名称。
  • datatype:指定列将容纳的数据类型(例如,INT 表示整数,VARCHAR(255) 表示可变长度字符串,DATE 表示日期,DECIMAL(10, 2) 表示精确的小数)。
  • constraints:应用于列以确保数据完整性的规则。常见约束包括:
    • NOT NULL:确保列不能包含 NULL 值。
    • UNIQUE:确保列中的所有值都是唯一的。
    • PRIMARY KEYNOT NULLUNIQUE 的组合。每张表应有一个主键来唯一标识每一行。
    • FOREIGN KEY:将一个表中的列链接到另一个表的主键,以强制执行引用完整性。
    • DEFAULT value:如果在插入期间未指定值,则为列设置一个默认值。

CREATE TABLE 示例

让我们创建一个简单的 products 表来存储库存中物品的信息:

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL UNIQUE,
    category VARCHAR(50),
    price DECIMAL(10, 2) NOT NULL,
    stock_quantity INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

在这个例子中:
* product_id 是一个自动递增的整数,用作主键。
* product_name 是一个必需且必须唯一的字符串。
* price 是一个必需的小数值。
* 如果未指定 stock_quantity,则默认为 0。
* created_at 记录行创建时的时间戳。

数据操纵语言 (DML):处理数据

DML 命令用于管理数据库表中的记录(行)。它们是日常数据库操作中最常用的命令。

INSERT 命令:添加新数据

INSERT 命令用于向表中添加新的数据行。

INSERT 语法

使用 INSERT 有几种方法:

  1. 为所有列指定值:
    sql INSERT INTO table_name VALUES (value1, value2, value3, ...);
    值的顺序必须与表中定义的列的顺序匹配。

  2. 为特定列指定值:
    sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
    这通常更受青睐,因为它更具可读性,并且在表结构发生变化时更不容易出错。

INSERT 示例

使用我们的 products 表:

-- 插入所有列的值(假设 product_id 自动递增)
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES ('Laptop Pro', 'Electronics', 1200.50, 50);

-- 插入特定列的值
INSERT INTO products (product_name, price)
VALUES ('Mechanical Keyboard', 75.99);

-- 一次插入多行
INSERT INTO products (product_name, category, price, stock_quantity)
VALUES 
('Ergonomic Mouse', 'Electronics', 25.00, 120),
('Desk Lamp', 'Home Goods', 45.00, 75);

SELECT 命令:检索数据

SELECT 命令是数据检索的基石。它允许您根据各种条件查询数据库并获取特定数据。

SELECT 语法
SELECT column1, column2, ...
FROM table_name
WHERE condition
ORDER BY column_name [ASC|DESC]
LIMIT number;
  • column1, column2, ...:您想要检索的列。使用 * 选择所有列。
  • FROM table_name:您正在查询的表。
  • WHERE condition:(可选)根据指定的条件过滤行。条件可以涉及比较运算符(=, !=, >, <, >=, <=)、逻辑运算符(AND, OR, NOT)和模式匹配(LIKE)。
  • ORDER BY column_name [ASC|DESC]:(可选)按一个或多个列对结果集进行排序。ASC 表示升序(默认),DESC 表示降序。
  • LIMIT number:(可选)限制返回的行数。
SELECT 示例
-- 选择所有产品的的所有列
SELECT *
FROM products;

-- 只选择产品的名称和价格
SELECT product_name, price
FROM products;

-- 选择 'Electronics' 类别的产品
SELECT *
FROM products
WHERE category = 'Electronics';

-- 选择价格大于 100 的产品,按价格降序排序
SELECT product_name, price
FROM products
WHERE price > 100
ORDER BY price DESC;

-- 选择最昂贵的 5 个产品
SELECT product_name, price
FROM products
ORDER BY price DESC
LIMIT 5;

-- 选择名称以 'L' 开头的的产品
SELECT *
FROM products
WHERE product_name LIKE 'L%';

UPDATE 命令:修改现有数据

UPDATE 命令允许您更改表中的现有记录。

UPDATE 语法
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • table_name:包含要更新记录的表。
  • SET column1 = value1, ...:指定要更新哪些列及其新值。
  • WHERE condition至关重要! 此子句决定将更新哪些行。如果省略,表中的所有行都将被更新。
UPDATE 示例
-- 将 'Laptop Pro' 的价格增加 50
UPDATE products
SET price = price + 50.00
WHERE product_name = 'Laptop Pro';

-- 更新 'Mechanical Keyboard' 的类别和库存量
UPDATE products
SET category = 'Accessories', stock_quantity = 100
WHERE product_name = 'Mechanical Keyboard';

-- **警告**:这将把所有产品的价格更新为 10.00
-- UPDATE products
-- SET price = 10.00;

提示: 在更新时始终使用 WHERE 子句,以确保您只修改目标记录。先使用 SELECT 语句测试您的 WHERE 子句,以验证它是否针对正确的行。

DELETE 命令:删除数据

DELETE 命令用于从表中删除行。

DELETE 语法
DELETE FROM table_name
WHERE condition;
  • table_name:要从中删除行的表。
  • WHERE condition至关重要! 此子句指定要删除哪些行。如果省略,表中的所有行都将被删除。
DELETE 示例
-- 删除名称为 'Desk Lamp' 的产品
DELETE FROM products
WHERE product_name = 'Desk Lamp';

-- 删除所有缺货的产品(stock_quantity 为 0)
DELETE FROM products
WHERE stock_quantity = 0;

-- **警告**:这将删除 'products' 表中的所有记录!
-- DELETE FROM products;

警告:UPDATE 类似,在 DELETE 语句中省略 WHERE 子句是一项破坏性操作,它将删除表中的所有数据。请务必极其小心地使用。

总结

理解并有效地使用 DDL 和 DML 命令是数据库管理的基础。CREATE TABLE 允许您定义数据的结构,而 INSERTSELECTUPDATEDELETE 则赋予您填充、查询、修改和管理这些数据的能力。

通过练习带有清晰 WHERE 子句的这些命令(特别是对于 UPDATEDELETE),您可以为使用 MySQL 数据库打下坚实的基础,并确保数据的完整性和准确性。在执行潜在的破坏性操作之前,请务必记住备份数据。