PRIMARY KEY: 主键,唯一标识一行记录,不能为空(NULL)。一张表通常有一个主键(如 ID INT PRIMARY KEY)。
AUTO_INCREMENT: 自动递增,常用于主键(如 ID INT PRIMARY KEY AUTO_INCREMENT)。
NOT NULL: 该列的值不能为空。
UNIQUE: 该列的值在表中必须唯一(如邮箱)。
DEFAULT 默认值: 设置列的默认值(如 注册日期 DATE DEFAULT CURRENT_DATE)。
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL UNIQUE, password VARCHAR(255) NOT NULL, -- 实际存储应为加密后的哈希值 created_at DATETIME DEFAULT CURRENT_TIMESTAMP );
CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, price DECIMAL(10, 2) NOT NULL, description TEXT, stock INT NOT NULL DEFAULT 0 );
SHOW TABLES;: 查看当前数据库中所有的表。
DESCRIBE 表名; 或 DESC 表名;: 查看表的结构(有哪些列,数据类型,约束等)。
DROP TABLE 表名;: 删除一张表及其所有数据。
ALTER TABLE 表名 ...: 修改现有表结构(如添加列、修改列类型、删除列、添加约束等)。初学者先了解,熟练基础 CRUD 后再深入。
示例: ALTER TABLE users ADD COLUMN age INT; (给 users 表添加一个 age 列)
HAVING: 对 GROUP BY 分组后的结果进行过滤(类似于 WHERE,但作用于分组后的结果)。
-- 统计每个产品类别的平均价格 (假设有个 category_id 列) SELECT category_id, AVG(price) AS avg_price FROM products GROUP BY category_id HAVING avg_price > 100; -- 只显示平均价格大于100的类别
-- 统计用户总数 SELECT COUNT(*) AS total_users FROM users;
表连接
关系型数据库的核心!用于从多个相关联的表中组合数据。
内连接 (INNER JOIN 或 JOIN): 返回两个表中匹配的行。最常用。
SELECT orders.order_id, customers.customer_name, orders.order_date FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id; -- 获取订单ID、客户名称和订单日期(只显示有匹配客户的订单)
SELECT customers.customer_name, orders.order_id FROM customers LEFT JOIN orders ON customers.customer_id = orders.customer_id; -- 获取所有客户及其订单ID(即使该客户没有订单)
右外连接 (RIGHT JOIN): 与左连接相反(较少使用,通常可用左连接重写)。
理解连接条件 (ON):ON 子句指定如何连接两个表(通常是主键 = 外键)。
基础函数
字符串函数:
CONCAT(str1, str2, ...): 连接字符串 (SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;)