MySQL常用语句实战:从建库到创建多表关联示例
MySQL是广泛使用的关系型数据库管理系统。对于初学者或需要快速查阅的操作场景,掌握基础的建库、建表和数据插入流程至关重要。本文将结合实际的电影数据库(Movie Database)设计案例,梳理从环境准备到执行多表结构创建的完整MySQL操作指令,帮助读者直观理解DDL(数据定义语言)与DML(数据操作语言)的结合使用。
目标:建立电影管理数据库并初始化基础数据
在实际开发或课程练习中,通常需要创建一个包含多个关联表的数据库。本教程以构建一个名为my_own_movie_database的电影信息库为例,目标是建立执行者(exec)、工作室(studio)、电影(movies)、明星(moviestar)及参演关系(starsin)五张核心表,并插入测试数据。
第1步:连接数据库与验证信息
在打开MySQL客户端后,默认没有处于活动状态的数据库上下文,需明确指定操作目标。
- 目的:切换到指定的工作库,以便后续操作生效。
- 动作:使用
USE关键字。 - 参数:目标数据库名称(如:
Mdatabase)。
USE Mdatabase;
确认操作后,可通过以下命令检查当前环境状态:
- 查看所有库:执行
SHOW databases;(注:原文写为 database,此处按标准 SQL 补充复数形式)返回可用数据库列表。 - 查看当前库表结构:执行
SHOW tables;显示已存在的表。 - 查看表字段详情:执行
SHOW columns FROM table_name;输出列名、类型等约束条件。
第2步:在工具中新建脚本文件
为了规范管理与方便调试,建议在 MySQL Workbench 等可视化工具中开启新的 SQL 编辑器窗口进行操作。
按照界面指引新建 SQL 标签页或文件:
第3步:编写建库建表逻辑(DDL)
在编写具体表结构前,建议先清空旧环境以防冲突。核心逻辑分为以下几类:
- 库级控制:删除旧库后新建目标库。
- 独立主表:如无依赖关系,优先建立实体表(如执行者、工作室)。
- 关联子表:最后建立引用外键的表(如电影、参演记录)。
基础语法模板:
-- 创建数据库并连接
CREATE DATABASE db_name;
USE db_name;
-- 创建表结构
CREATE TABLE table_name (
col1 type constraint,
PRIMARY KEY (pk_col)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第4步:执行完整的建表与插入代码
将上述逻辑整合进实际场景中。在 Workbench 编辑区粘贴以下代码:
完整参考代码如下(含注释说明):
-- 1. 清理旧环境并初始化数据库
drop database if exists `my_own_movie_database`;
create database `my_own_movie_database`;
USE `my_own_movie_database`;
-- 2. 创建 exec 表 (电影执行者)
CREATE TABLE `movieexec` (
`name` char(30) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`cert` int(11) NOT NULL DEFAULT '0',
`netWorth` int(11) DEFAULT NULL,
PRIMARY KEY (`cert`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# 插入 exec 数据
#
INSERT INTO `movieexec` VALUES ('Calvin Coolidge','Fast Lane',123,20000000),('Merv Griffin','Riot Rd.',199,112000000),('Stephen Spielberg','123 ET road',222,100000000),('Ted Turner','Turner Av.',333,125000000),('George Lucas','Oak Rd.',555,200000000),('Jane Fonda','Turner Av.',567,200000000);
-- 3. 创建 studio 表 (电影制片厂)
CREATE TABLE `studio` (
`name` char(30) NOT NULL DEFAULT '',
`address` varchar(100) DEFAULT NULL,
`presC` int(11) DEFAULT NULL,
PRIMARY KEY (`name`)
);
#
# 插入 studio 数据
#
INSERT INTO `studio` VALUES ('MGM','MGM Boulevard',123),('Fox','Fox Boulevard',199),('Disney','Disney Boulevard',222),('USA Entertainm','USA Entertainm Boulevard',333),('Paramount','Paramount Boulevard',555);
-- 4. 创建 movies 表 (核心影片表,含外键引用)
CREATE TABLE `movies` (
`title` char(100) NOT NULL DEFAULT '',
`year` int(11) NOT NULL DEFAULT '0',
`length` int(11) DEFAULT NULL,
`movieType` char(10) DEFAULT NULL,
`studioName` char(30) ,
`producerC` int(11) DEFAULT NULL,
PRIMARY KEY (`title`,`year`),
-- 设置外键约束,当制片厂被删除时级联更新或删除相关电影
FOREIGN KEY (studioName) REFERENCES studio(name) ON DELETE CASCADE
);
#
# 插入 movies 数据
#
INSERT INTO `movies` VALUES ('Empire Strikes Back',1980,111,'drama','Fox',555),('Gone With the Wind',1938,null,'drama','MGM',123),('Logan\'s run',1977,120,'drama','MGM',888),('Pretty Woman',1990,119,'drama','Disney',999),('Star Trek',1979,132,'sciFic','Paramount',444),('Star Trek: Nemesis',2002,116,'sciFic','Paramount',321),('Star Wars',1977,124,'sciFic','Fox',555),('Terms of Endearment',1983,132,'drama','MGM',123),('The Man Who Wasn\'t There',2001,116,'comedy','USA Entertainm',777),('The Usual Suspects',1995,106,'drama','MGM',999);
-- 5. 创建 moviestar 表 (演员表)
CREATE TABLE `moviestar` (
`name` char(30) NOT NULL DEFAULT '',
`address` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`birthdate` date DEFAULT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# 插入 moviestar 数据
#
INSERT INTO `moviestar` VALUES ('Alec Baldwin','Baldwin Av.','M','1977-06-07'),('Debra Winger','A way','F','1978-05-06'),('Harrison Ford','Prefect Rd.','M','1955-05-05'),('Jack Nicholson''s','X path','M','1949-05-05'),('Jane Fonda','Turner Av.','F','1977-07-07');
-- 6. 创建 starsin 表 (演艺关联中间表)
CREATE TABLE `starsin` (
`movieTitle` char(100) NOT NULL DEFAULT '',
`movieYear` int(11) NOT NULL DEFAULT '0',
`starName` char(30) NOT NULL DEFAULT '',
PRIMARY KEY (`movieTitle`,`movieYear`,`starName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#
# 插入 starsin 数据
#
INSERT INTO `starsin` VALUES ('Empire Strikes Back',1980,'Harrison Ford'),('Star Wars',1977,'Carrie Fisher'),('Star Wars',1977,'Harrison Ford'),('Star Wars',1977,'Mark Hamill'),('Terms of Endearment',1983,'Debra Winger'),('Terms of Endearment',1983,'Jack Nicholson'),('The Usual Suspects',1995,'Kevin Spacey');
第5步:运行代码与结果观察
在 Workbench 的查询窗口写好代码后,点击“执行”按钮(快捷键通常为 Ctrl+Shift+Enter 或对应的闪电图标)。若报错请核对拼写与分号。
执行完成后:
- 左侧浏览器面板将自动刷新,出现新数据库
my_own_movie_database。 - 展开该节点可看到刚才生成的五个表格结构。
- 双击表格可查看内部数据是否完整。
排错提示
- 外键冲突:如果创建
movies时报错Cannot add foreign key constraint,通常是引用的父表(如studio)尚未创建,或者父表中缺失了对应的主键值。请严格保证父子表的创建顺序。 - 存储引擎:建议使用
InnoDB引擎以支持事务和外键约束。 - 编码格式:确保数据库和表均设置为
utf8或utf8mb4,防止中文乱码。
总结
掌握 USE 切换上下文、CREATE TABLE ... FOREIGN KEY 定义多表关联以及 INSERT INTO 填充初始数据,是搭建小型业务系统的基础。通过本文的代码块,您可以直接在本地环境中复现一套标准的电影库结构,作为后续学习复杂查询(如 JOIN 语法)的数据底库。以上就是MySQL语句汇总整理的详细内容,更多关于MySQL语句的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













