2021-10-18 构建电影数据库MovieDB(数据库第一次实验)

先贴一下实验要求:

一、实验目标

创建数据库和基本表,输入、修改数据

二、实验步骤

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),然后用博客:

启动MySQL报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)_BigData_Mining的博客-CSDN博客https://blog.csdn.net/BigData_Mining/article/details/88344513完美地解决了~

记录一个可以免费激活Navicat的博客:

Navicat Premium 15_zytony521的博客-CSDN博客https://blog.csdn.net/weixin_48502798/article/details/115970263?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163456023716780255299872%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163456023716780255299872&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-115970263.first_rank_v2_pc_rank_v29&utm_term=navicat%E6%BF%80%E6%B4%BB&spm=1018.2226.3001.4187还有就是一个可以快速入门的博客:

Navicat使用快速入门教程_苜苜的烂笔头的博客-CSDN博客_navicat使用教程https://blog.csdn.net/qq_45069279/article/details/105919312本次记录就到这~

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要开发一个电影检索程序,需要有一个电影数据库和一个用户界面,用户可以在其中输入检索条件来查询电影信息。以下是使用Java编写电影检索程序的一般步骤: 1.设计数据库结构:需要设计电影数据库的表结构。包括电影的基本信息,如电影名称、导演、演员、上映日期、评分等信息。 2.连接数据库:使用Java提供的数据库API,如JDBC,连接数据库并执行SQL查询。 3.编写用户界面:使用Java Swing或JavaFX编写用户界面。该界面应包括查询条件,如电影名称、导演、演员等,以及一个搜索按钮。 4.查询数据库:当用户点击搜索按钮时,程序应执行SQL查询语句,根据用户输入的检索条件查询电影信息。 5.显示查询结果:查询完成后,将结果显示在程序界面上,可以使用表格或列表等方式展示。 以下是一个简单的示例代码: ```java import java.sql.*; public class MovieSearch { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/moviedb"; static final String USER = "username"; static final String PASS = "password"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动 Class.forName(JDBC_DRIVER); // 打开链接 System.out.println("Connecting to database..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println("Creating statement..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, title, director, actor, release_date, rating FROM movies WHERE title LIKE '%"+args[0]+"%' OR director LIKE '%"+args[0]+"%' OR actor LIKE '%"+args[0]+"%'"; ResultSet rs = stmt.executeQuery(sql); // 显示结果集 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String title = rs.getString("title"); String director = rs.getString("director"); String actor = rs.getString("actor"); String release_date = rs.getString("release_date"); float rating = rs.getFloat("rating"); // 输出数据 System.out.print("ID: " + id); System.out.print(", Title: " + title); System.out.print(", Director: " + director); System.out.print(", Actor: " + actor); System.out.print(", Release Date: " + release_date); System.out.println(", Rating: " + rating); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }catch(Exception e){ // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 关闭资源 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ }// 什么都不做 try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } } ``` 这是一个控制台程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值