在观看本教程之前,首先你要确保在你的电脑上安装有相应的MySQL版本。
在下面我们整个数据库操作中,我们会用到如下的SQL命令:
a、创建数据库并为其设置字符集
create database stu_db default character set utf8 collate utf8_general_ci;
b、创建完数据库后,我们看看是否创建成功,查看数据库的语句是:
show databases;
c、在数据库创建完之后,我们接着根据我们的实际需求去创建数据表:
create table department(
id int not null auto_increment,
d_name varchar(11) not null,
d_num int(11) not null,
primary key(id),
index index_name(d_num)
);
在上面中我们添加了一行 index index_name(d_num),为d_num这个属性设置索引,这个是必须的因为我们待会创建student表的时候将会用这个属性做外键参照,当然如果你直接以department的ID作为外键参照,就不用这行了,因为主键在生成的时候就建立了唯一索引。如果你在创建表的时候没有添加索引,我们可以通过如下的方式去添加索引:
alert table department add index(d_num);
d、创建student 表
create table student (
id int not null auto_increment,
stu_name varchar(11) not null,
stu_num int(11) not null,
stu_d_num int(11) not null,
primary key(id),
constraint FK foreign key(stu_d_num) references department(d_num);
);
或者是在创建完数据表之后我们在进行创建外键约束:
alert table student add foreign key FK(stu_d_num) references department(d_num);
接下来我们看详细的图文操作:
1.打开windows(在搜索框中搜索cmd ,注意要右键以管理员方式运行)
在命令行中输入:net start MySQL(这个是打开MySQL服务器,如果你不是以管理员的身份运行的命令行窗 口那么在启动MySQL时就会报 ‘发生系统错误5’);
等到MySQL服务启动之后如图
接下来我们利用自己的MySQL账号去登录进MySQL服务器
使用的命令就是 MySQL -u[username] -p(在这里我的用户名是root)
利用SQL命令查看我们创建的数据库 show databases;(注意这个地方的database是复数形式,并且每个SQL 语句写完之后都得用逗号分隔)
接下来我们利用SQL语句创建数据库,并且设置字符集,例如我们创建stu_db数据库。
需要注意的是,我们在写stu_db时不需要给它加引号,我在测试的时候发现,这个地方加引号会报错。
可以看到,数据库中已经产生了stu_db数据库。
我们接下来,再在这个数据库中添加数据表,我们创建院系表 department
可以看到,在我创建表的过程中,由于引号的添加导致产生了很多错误,因此,在SQL语句的书写中
特别要注意引号的添加位置,不然很容易出错。
接下来我们创建学生表stu_db,在这个表中将以院系表的编号作为其外键,但是很显然,在department表中,
我们并没有发现院系编号的列,所以我们要在院系表中添加一列使用的SQL语句是
alter table department add column d_num int(11) not null;
再来看表结构,我们发现这个时后数据表中的院系名称d_name是允许为空的,这很闲然是不符合实际需求的,所以我们要对它进行非空的修改,SQL语句为
alter table department modify d_name varchar(11) not null;
可以看到修改成功了!
接下来我们根据department来创建student表,SQL语句为:
create table student(
id int not null auto_increment,
stu_name varchar(11) not null,
stu_num int not null,
constraint stu_d_num foreign key(d_num) references department(d_num),
primary key(id)
);
可以看到在我们设置外键时失败了,这个是什么原因呢?我们首先来分析一下,外键要有哪些条件
1、数据类型的比配,比如说,在我们所要参照的表中的列属性为int(11),这样我们在设置外键的设置时要设置
int(11) 属性稍有偏差,都会造成外键设置的失败。
2、数据表的引擎不同,若要使用外键约束,数据表的引擎必须是InnoDB不然就无法使用外键。
3、外键设置有个特点,设置成外键参考的属性要么是主键,如果不是主键,那么必须为这个属性添加索引,不然
外键也无法设置成功。
这三点是比较常见,又容易忽略的问题,我就是因为上面的第三个问题发生的错误。
我们为department的编号列添加索引
alert table department add index(d_num);
我们再看,创建student表并添加外键:
创建成功!
在设置外键的过程中还有几个特别重要的属性,也是初学者需要掌握的,
1、cascade :级联更新和删除
2、set NUll: 父表中删除时,子表中设置成NULL。
3、no Action: 父表的操作不会影响到子表。
4、restrict:拒绝删除或者更新父表。
5、set default :innoDB暂时不支持这一属性。