MySQL教程:数据表连接与查询深度解析

0 下载量 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语句。