MySQL五种约束类型(普通 /自增主键,外键等) + 进阶查询(聚合查询,内 /外连接查询,自连接查询,子查询,合并查询)
发布人:shili8
发布时间:2025-02-08 07:53
阅读次数:0
**MySQL五种约束类型**
在数据库设计中,约束是用来限制表结构或数据的规则。MySQL支持五种约束类型:普通主键、自增主键、外键、唯一约束和检查约束。
###1. 普通主键普通主键是一种唯一标识每个记录的值。它通常用于作为表的主要索引。
sqlCREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255) );
在上面的例子中,`id`列被定义为主键,这意味着它将是唯一标识每个记录的值。
###2. 自增主键自增主键是一种特殊类型的主键,它会自动增加一个数字,每当新记录被插入到表中时。
sqlCREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), email VARCHAR(255) );
在上面的例子中,`id`列被定义为自增主键,这意味着每当新记录被插入到表中时,它的值将自动增加。
###3. 外键外键是一种引用了另一个表中的数据的列。它用于维护数据库之间的关系。
sqlCREATE TABLE orders ( id INT PRIMARY KEY, user_id INT, FOREIGN KEY (user_id) REFERENCES users(id) );
在上面的例子中,`orders`表中的 `user_id` 列被定义为外键,它引用了 `users` 表中的 `id` 列。
###4. 唯一约束唯一约束是一种保证每个值都是唯一的规则。它可以应用于任何列。
sqlCREATE TABLE users ( id INT PRIMARY KEY, email VARCHAR(255) UNIQUE);
在上面的例子中,`email` 列被定义为唯一约束,这意味着每个电子邮件地址必须是唯一的。
###5. 检查约束检查约束是一种保证某些条件成立的规则。它可以应用于任何列。
sqlCREATE TABLE users ( id INT PRIMARY KEY, age INT CHECK (age >18) );
在上面的例子中,`age` 列被定义为检查约束,这意味着每个用户的年龄必须大于18 岁。
**进阶查询**
###1. 聚合函数聚合函数是用来处理多条记录的函数。它们可以用于计算总和、平均值、最大值等。
sqlSELECT SUM(salary) FROM employees;
在上面的例子中,`SUM()` 函数被用于计算所有员工的工资总和。
###2. 内连接内连接是用来连接两个表的方法。它会返回两张表中都有的记录。
sqlSELECT * FROM ordersINNER JOIN customers ON orders.customer_id = customers.id;
在上面的例子中,`INNER JOIN` 关键字被用于连接 `orders` 表和 `customers` 表。
###3. 外连接外连接是用来连接两个表的方法。它会返回两张表中都有的记录,以及其中一张表中没有匹配记录的记录。
sqlSELECT * FROM ordersLEFT JOIN customers ON orders.customer_id = customers.id;
在上面的例子中,`LEFT JOIN` 关键字被用于连接 `orders` 表和 `customers` 表。
###4. 自连接自连接是用来连接一个表的方法。它会返回该表中所有记录。
sqlSELECT * FROM employees AS e1INNER JOIN employees AS e2 ON e1.id = e2.manager_id;
在上面的例子中,`employees` 表被连接到自己身上,以便可以访问每个员工的经理信息。
###5. 子查询子查询是用来在一个查询中嵌入另一个查询的方法。它会返回子查询中的结果。
sqlSELECT * FROM ordersWHERE order_id IN ( SELECT id FROM customers WHERE country = 'USA' );
在上面的例子中,子查询被用于筛选出来自美国的客户订单。
###6. 合并查询合并查询是用来连接两个表的方法。它会返回两张表中都有的记录,以及其中一张表中没有匹配记录的记录。
sqlSELECT * FROM ordersUNION ALL SELECT * FROM customers;
在上面的例子中,`UNION ALL` 关键字被用于合并 `orders` 表和 `customers` 表。