MySQL常用语句实战:从建库到创建多表关联示例

Oliver
Oliver
发布时间:2026-10-16| 4人浏览过
原创

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)

在编写具体表结构前,建议先清空旧环境以防冲突。核心逻辑分为以下几类:

  1. 库级控制:删除旧库后新建目标库。
  2. 独立主表:如无依赖关系,优先建立实体表(如执行者、工作室)。
  3. 关联子表:最后建立引用外键的表(如电影、参演记录)。

基础语法模板:

-- 创建数据库并连接
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语句的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。