先贴一下实验要求:
一、实验目标
创建数据库和基本表,输入、修改数据
二、实验步骤
1、使用控制台或Workbench连接MySQL的本地数据库(localhost)
2、使用SQL语句创建数据库 MovieDB
3、使用SQL语句创建基本表,并定义数据类型、主键、外键等约束
(1)艺人表Artist(id, name, birthday, sex, imdbnumber, introduction)
(2)影视作品表Movie(id, name, releasedate, duration, language, introduction)
(3)艺人电影关系表Participation(id, artistid,movieid,rolename)
要求:每张表的id均为INT类型的自增主键(auto_increment primary key),请找资料如何在mysql中定义自增长主键。
4、在豆瓣电影中找到你喜欢的5个演员,使用Insert语句将其影人信息及代表电影录入到创建好的三个表中
5、使用Alter Table修改Movie表,增加评分列(rating)
6、使用Update语句为已有电影增加评分数据
7、验证:可在表上点击右键,选择“select rows – limit 1000”查看当前表中的数据
三、完成实验报告
略
四、可能发生的问题
1、外键约束不会建
使用以下语句构建:foreign key(f_id) references repo_table(f_id))
2、外键约束无法建立
请从以下方面找问题:
(1)参照表与被参照表对应字段的编码是否一致(utfmb4)
(2)被参照表是否存在参照表参照的数据(参照完整性)
(3)数据库默认编码是否为utf8mb4
3、中文无法导入
请确认编码问题,编码是否为utfmb4
接下来按照实验步骤记录:
1、使用控制台或Workbench连接MySQL的本地数据库(localhost)
在Navicat的左上角的图标内进行连接,选择MySQL输入密码连接连接就好。
2、使用SQL语句创建数据库 MovieDB
使用如下语句创建数据库:
CREATE DATABASE ***;
3、使用SQL语句创建基本表,并定义数据类型、主键、外键等约束
使用如下语句创建表:
CREATE TABLE 表名(表内变量 变量类型(及大小),表内变量 变量类型(及大小),...);
例子如下:
CREATE TABLE Artist(id INT auto_increment primary key, name CHAR(20), birthday DATE, sex CHAR(2), imdbnumber CHAR(10), introduction CHAR(100));
CREATE TABLE Movie(id INT auto_increment primary key, name CHAR(20), releasedate DATE, duration CHAR(20), language CHAR(20), introduction CHAR(100));
CREATE TABLE Participation(id INT auto_increment primary key, artistid INT,movieid INT,rolename CHAR(20),FOREIGN KEY(artistid) REFERENCES Artist(id),FOREIGN KEY(movieid) REFERENCES Movie(id));
要注意一下:在Navicat里面,若是已经运行生成表了就不能再运行相应的CREATE语句了,会提示表已存在,若是想重新生成表只能删掉原来的表。为了让已有的表不影响后续程序的运行,可以只选中后面需要运行的语句来进行运行即可。
其中primary key代表该项为主键,auto_increment primary key直接加在变量类型后面,表示此为自增长主键,即后续insert的时候就不用写id了。
构建外键约束用法如下:
FOREIGN KEY(该表中与目标表中有联系的变量) REFERENCES 目标表(目标表中有联系的变量)
这里参考一下别人写的关于主键和外键的理解:
(由于几乎都是转的且原博消失了所以不标注来源了)
1.定义
1.1 什么是主键和外键
关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键
课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键
成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键
1.2 主键和外键的作用
1.2.1为了维护关系数据库的完整性:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。
1.2.2起约束作用:
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
1.3 主键、外键和索引的区别
定义:表的主键唯一标识一条记录,不能有重复,不允许为空。表的外键是另一表的主键, 外键可以重复, 可以是空值。索引该字段没有重复值,但可以有一个空值。
作用:主键用来保证数据完整性,外键用来和其他表建立联系用的,索引是提高查询排序的速度。
个数:主键只能有一个。一个表可以有多个外键。一个表可以有多个唯一索引。
4、在豆瓣电影中找到你喜欢的5个演员,使用Insert语句将其影人信息及代表电影录入到创建好的三个表中
使用如下语句进行插入:
INSERT INTO 表名(表内变量1,表内变量2,...) VALUES ('表内变量1的内容','表内变量2的内容',...);
例子如下:
INSERT INTO Artist(name,birthday,sex,imdbnumber,introduction) VALUES ('成龙','1954-04-07','男','nm0000329','中国香港影视男演员、导演、制作人、编剧、歌手,国家一级演员。');
INSERT INTO Movie(name, releasedate, duration, language, introduction) VALUES ('尖峰时刻','1998-09-18','98分钟','英语 / 粤语 / 汉语普通话','《尖峰时刻》是由布莱特.拉特纳导演,成龙,克里斯·塔克主演的喜剧动作片。');
INSERT INTO Participation(artistid,movieid,rolename) VALUES (1,1,'Chief Inspector Lee');
注意插入的内容要与前面变量的顺序一致。
5、使用Alter Table修改Movie表,增加评分列(rating)
使用如下语句增加:
ALTER TABLE 表名 ADD 变量 变量类型;
例子如下:
ALTER TABLE Movie ADD rating float;
6、使用Update语句为已有电影增加评分数据
使用如下语句增加:
UPDATE 表名 SET 某列 = 值 WHERE 条件或位置;
例子如下:
UPDATE Movie SET rating =7.2 WHERE id=1;
按照如上步骤做出来的图就是下面这样啦:
今天第一次学建数据库,有错误请多包涵。
最后记录下一些小错误和安装事宜(以下博客都是侵权删):
一开始想打开MySQL的时候输入密码总是闪退,还以为记错密码了,后面用管理员权限打开发现报错ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061),然后用博客:
记录一个可以免费激活Navicat的博客: