MySQL教程:数据表连接与查询深度解析
11 浏览量
更新于2024-08-29
收藏 105KB PDF 举报
"MySQL学习资料,涉及数据表的主键、数据类型、域完整性和表间连接等内容。"
在MySQL数据库中,主键是用于唯一标识表中每条记录的关键字段,具有不可为NULL且必须唯一的特性。主键分为两种类型:逻辑主键和业务主键。逻辑主键通常是人为生成的ID,如`ID`,它不携带实际业务含义,仅用于标识记录;而业务主键如`username`,直接与实际业务逻辑相关。
创建表时,可以声明一个字段为主键,例如:
```sql
CREATE TABLE t1 (
Id INT PRIMARY KEY,
Name VARCHAR(100)
);
```
然后,可以向表中插入数据:
```sql
INSERT INTO t1 VALUES (1, 'zs');
INSERT INTO t1 VALUES (2, 'ls');
```
对于主键自动增长,可以使用`auto_increment`关键字,这样每次插入新记录时,该字段会自动递增:
```sql
CREATE TABLE t4 (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100)
);
```
这样,即使在插入时不指定`id`的值,系统也会自动生成:
```sql
INSERT INTO t4 (name) VALUES ('zs');
INSERT INTO t4 VALUES (NULL, 'ls');
```
域完整性是指表中的字段需要遵循特定的数据类型或约束。例如,我们可以设置非空约束`NOT NULL`、唯一约束`UNIQUE`:
```sql
CREATE TABLE t5 (
username VARCHAR(100) NOT NULL UNIQUE,
gender VARCHAR(100) NOT NULL,
phone_num VARCHAR(100) UNIQUE
);
```
在数据表之间的连接方面,主要有以下几种关系:
1. 一对一:两个表中的每一条记录都只有一个匹配的记录,但这在描述中未提及,通常用于扩展表结构。
2. 一对多(1:N):例如,客户和订单的关系。一个客户可以有多个订单,但每个订单只能关联一个客户。这可以通过在子表(订单表)中添加父表(客户表)的主键作为外键来实现:
```sql
CREATE TABLE customers (
id INT,
name VARCHAR(100),
address VARCHAR(255),
PRIMARY KEY (id)
);
CREATE TABLE orders (
order_num INT PRIMARY KEY,
price FLOAT(8, 2),
status INT,
customer_id INT,
CONSTRAINT customer_id_fk FOREIGN KEY (customer_id) REFERENCES customers(id)
);
```
3. 多对多:例如,老师和学生的关系。一个老师可以教多个学生,一个学生也可以被多个老师教。这种情况通常需要一个关联表(如`teacher_students`),包含来自老师表和学生表的外键:
```sql
CREATE TABLE teachers (
id INT,
name VARCHAR(100)
);
CREATE TABLE students (
id INT,
name VARCHAR(100)
);
CREATE TABLE teacher_students (
teacher_id INT,
student_id INT,
PRIMARY KEY (teacher_id, student_id),
FOREIGN KEY (teacher_id) REFERENCES teachers(id),
FOREIGN KEY (student_id) REFERENCES students(id)
);
```
这样的设计允许灵活地表示两个表之间的复杂关系。理解并熟练运用这些概念是进行高效数据库设计和查询的基础。在实际应用中,还需要考虑性能优化,如选择合适的数据类型、建立索引以及编写高效的SQL语句。
131 浏览量
2018-05-09 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情