引言
在数据库管理中,主键是一个至关重要的概念。它就像现实生活中的身份证号码,能够唯一标识数据库表中的每一行记录。正确使用主键可以提高数据的完整性和查询效率。本文将通过实际的 SQL 代码示例,从建表到查询,详细阐述主键的作用和使用方法。
一、建表时定义主键
1.1 创建用户信息表
CREATE TABLE user_info (
id INT AUTO_INCREMENT PRIMARY KEY, -- 主键,自增整数
username VARCHAR(50) NOT NULL, -- 用户名,字符串,非空
age TINYINT, -- 年龄,小整数
email VARCHAR(100) UNIQUE, -- 邮箱,字符串,唯一值
create_time DATETIME DEFAULT NOW() -- 创建时间,默认当前时间
);
在这个 user_info 表中,id 列被定义为主键,并且使用了 AUTO_INCREMENT 属性,这意味着每次插入新记录时,id 会自动递增。主键的作用是确保每一行记录都有一个唯一的标识符,方便后续的数据操作。
不过,这里有一个小插曲,我们进行了一些实验,使用了 use sys; 和 use cainiaojioacheng; 语句,之后将这个表删除了,DROP TABLE user_info;。
1.2 建立业务相关表
1.2.1 客户表
CREATE TABLE customers(
customer_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
在 customers 表中,customer_id 作为主键,它能唯一区分不同的客户。同时,email 列使用了 UNIQUE 约束,确保每个客户的邮箱地址是唯一的。
1.2.2 产品表
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10, 2) NOT NULL
);
products 表中,product_id 是主键,用于唯一标识每个产品。
1.2.3 订单表
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
orders 表的主键是 order_id,同时通过 FOREIGN KEY 约束建立了与 customers 表的关联,customer_id 引用了 customers 表中的 customer_id,这体现了主键在关联表中的重要作用,确保数据的一致性和关联性。
1.2.4 订单详情表
CREATE TABLE order_details (
order_detail_id INT AUTO_INCREMENT PRIMARY KEY,
order_id INT,
product_id INT,
quantity INT NOT NULL,
FOREIGN KEY (order_id) REFERENCES orders(order_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
order_details 表的主键是 order_detail_id,并且通过外键分别关联了 orders 表和 products 表,这样可以清晰地记录每个订单包含的产品信息。
二、向表中插入数据
2.1 插入客户数据
INSERT INTO customers (first_name, last_name, email)
VALUES
('Alice', 'Johnson', 'alice.johnson@example.com'),
('Bob', 'Williams', 'bob.williams@example.com'),
('Charlie', 'Brown', 'charlie.brown@example.com');
通过 INSERT INTO 语句向 customers 表中插入了三条客户记录,由于 customer_id 是自增主键,数据库会自动为每条记录分配一个唯一的 customer_id。
2.2 插入产品数据
INSERT INTO products (product_name, price)
VALUES
('Smartphone', 499.99),
('Laptop', 999.99),
('Headphones', 79.99),
('Tablet', 299.99);
同样地,向 products 表中插入了四条产品记录,product_id 会自动递增。
2.3 插入订单数据
-- 客户 Alice(customer_id = 1)下了两个订单
INSERT INTO orders (customer_id)
VALUES
(1),
(1);
-- 客户 Bob(customer_id = 2)下了一个订单
INSERT INTO orders (customer_id)
VALUES
(2);
这里为不同客户插入了订单记录,order_id 会自动生成唯一值。
2.4 插入订单详情数据
-- 客户 Alice 的第一个订单(order_id = 1)包含一部智能手机和一副耳机
INSERT INTO order_details (order_id, product_id, quantity)
VALUES
(1, 1, 1),
(1, 3, 1);
-- 客户 Alice 的第二个订单(order_id = 2)包含一台笔记本电脑
INSERT INTO order_details (order_id, product_id, quantity)
VALUES
(2, 2, 1);
-- 客户 Bob 的订单(order_id = 3)包含一台平板电脑
INSERT INTO order_details (order_id, product_id, quantity)
VALUES
(3, 4, 1);
向 order_details 表中插入了订单详情记录,通过关联 order_id 和 product_id,可以清晰地了解每个订单包含的产品信息。
三、查询数据并体验主键的作用
3.1 查询所有表的数据
-- 查询客户表数据
SELECT * FROM customers;
-- 查询产品表数据
SELECT * FROM products;
-- 查询订单表数据
SELECT * FROM orders;
-- 查询订单详情表数据
SELECT * FROM order_details;
通过这些查询语句,可以查看各个表中的所有记录,直观地看到主键在标识记录方面的作用。
3.2 通过主键精准查询客户信息
-- 插入更多客户记录
INSERT INTO customers(first_name,last_name,email) VALUES ('John','Doe','John.doe@example.com');
INSERT INTO customers (first_name,last_name,email) VALUES ('Jane','Smith','Jane.smith@example.com');
INSERT INTO customers (first_name, last_name, email) VALUES ('gangzi','yaling','gangzi@qq.com');
INSERT INTO customers(first_name, last_name, email) VALUES ('何亚玲','赵志刚','3108258523@qq.com');
-- 查询客户信息,通过主键可以精准找到一个客户
SELECT * FROM customers WHERE customer_id = 1;
这里先插入了更多的客户记录,然后通过 WHERE 子句结合主键 customer_id 进行查询,可以精准地找到指定的客户记录,这充分体现了主键在查询中的重要性。
四、总结
主键在数据库中扮演着不可或缺的角色。在建表时,合理定义主键可以确保数据的完整性和唯一性;在插入数据时,主键能够自动分配唯一标识,简化数据操作;在查询数据时,通过主键可以快速、精准地定位到所需的记录。通过本文的示例,相信你对主键的作用和使用方法有了更深入的理解,在实际的数据库开发中,要充分利用主键的特性,提高数据库的性能和数据管理的效率。
希望这篇文章能帮助你更好地理解 MySQL 中的主键,如果你在实践过程中有任何问题,欢迎在评论区留言讨论。