如何在mysql 中建立有关联关系的表

本文介绍了MySQL中外键约束的实现方法,强调了使用INNODB存储引擎的重要性,并解释了如何手动创建索引以支持外键关系。同时,文中提到了一些常见的错误,例如使用保留字作为表名。

      昨天在自己做的一个系统中使用mysql,折腾了半天始终无法建立外键,通过查找文档最终将问题解决,原来mysql中默认建立的表所使用的存储引擎为MyISAM类型,在这种类型的table中建立的外键只起到一个注释,提示的作用,对外键约束并无实际作用。要建立真正有意义的外键约束,需要建立类型存储引擎为INNODB类型的表。

如:

create table parent(id int(3),

                                   name varchar(10)

)type=innodb;

create table children( id int(3) ,

                                   name varchar(10) ,

                                   parent_id int(3),

                                    primary key(id),

                                   index(parent_id),   //为外键手工建立索引

                                  foreign key(parent_id) references parent(id) on delete cascade

                                  )type=innodb;

mysql中建立关联关系与oracle有所不同,在oracle中只要为字段建立外键即会自动为该字段建立索引,但是在mysql中必须手工为需要建立外键的字段手工建立索引,否则无法创建成功。

另外,我在建用户表是直接使用user作为表名,虽然该表创建成功,但是在其子表中建立与其关联的外键时无法创建成功,后来发现user为系统的关系字。将user表名改为user_info后,子表创建成功。

### 如何在 MySQL 中定义和创建关系型数据库结构 #### 创建数据库 为了存储特定应用程序的数据,在 MySQL 中通常会先创建一个新的数据库。这可以通过 SQL 命令 `CREATE DATABASE` 来完成。 ```sql CREATE DATABASE school_db; USE school_db; ``` 上述命令首先创建了一个名为 `school_db` 的新数据库,接着使用 `USE` 语句选择了该数据库作为当前工作环境的一部分[^2]。 #### 定义并创建 一旦有了数据库,就可以在其内部定义具体的格来保存不同类型的信息单元。这里展示两个简单的例子:一个是关于学生的个人信息(`student`);另一个则是有关课程详情(`course`)的格。 对于学生信息: ```sql CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), age INT, gender ENUM('M', 'F'), enrollment_date DATE NOT NULL ); ``` 此段代码建立了具有五个列的学生,其中包含了自动增长的身份识别号(id),姓名(name),年龄(age),性别(gender)以及入学日期(enrollment_date)[^3]。 而对于课程信息,则有如下定义方式: ```sql CREATE TABLE course ( cid INT AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255), credit_hours DECIMAL(4, 2), department_id INT, FOREIGN KEY (department_id) REFERENCES departments(dept_id) ); ``` 这段脚本构建了一张包含四个字段的课程,分别是唯一编号(cid), 称呼(title), 学分(credit_hours) 和所属院系ID(department_id) 。值得注意的是最后一行指定了外键约束条件,它明每门课都属于某个具体部门,并且这种隶属关系是通过参照另一张假设存在的`departments`中的`dept_id`实现的[^4]。 #### 设置间的关系 当涉及到多个实体之间的联系时,比如一位教师可能教授多门不同的科目而一门学科也可能由多位老师共同讲授,这时就需要建立相应的关联模型。最常见的方式是一对多或多对多连接模式。 以师生之间的一对多为例(即每位导师可以指导多名学员),可以在原有的基础上增加一张中间用于示两者间的映射关系: ```sql CREATE TABLE teacher_student_mapping( tid INT, sid INT, start_year YEAR, end_year YEAR, PRIMARY KEY(tid,sid), CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teachers(t_id), CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES students(s_id) ); ``` 此处新增加了两张外部引用的关键字,它们分别指向各自的父级记录,从而形成了双向绑定的效果。同时设定了组合主键确保同一时间段内不会重复分配相同的师徒配对情况发生。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值