mysql的基本操作

我们将使用动漫的人员的关系来演示数据库的基本操作

一、数据库概述

在动漫《银魂》中,各个角色之间的关系十分复杂,为便于存储和管理相关数据,我们需要为以下实体创建数据库表:

  1. 组织:代表不同的团体或社群。
  2. 成员:属于某个组织的个体,他们有特定的身份和联系方式。
  3. 职业:成员可能从事的多种职业。

数据库表关系

  • 每个组织有一个首领(成员),而一个首领只能拥有一个组织,因此这是 一对一 关系。
  • 每个组织可以有多个成员,成员只属于一个组织,这构成 一对多 关系。
  • 成员可以有多种职业,而每种职业可以被多个成员拥有,这就是 多对多 关系。

二、数据库连接

连接 MySQL 数据库可以使用以下命令:

  • 本地连接
# u是 用户名  p是数据库密码
mysql -u your_username -p
# 输入密码后回车
  • 远程连接
mysql -u your_username -p your_password -h remote_server_address

三、数据库的基本操作

1. 创建数据库

我们将创建一个数据库名为 Gintama,并设置其字符集为 UTF-8,以支持多语言字符。

CREATE DATABASE Gintama CHARACTER SET utf8;

2. 选择数据库

选择刚创建的数据库以便进行后续操作。

USE dbname;

dbname为具体数据库名称。

3. 选择数据库

SHOW DATABASES;

4.删除数据库

DROP DATABASE dbname;

四、创建表和其他操作

1. 创建组织表

组织表用于存储不同组织的信息,包括组织名、备注和首领的 ID(成员 ID)。

CREATE TABLE organizations (
    id INT PRIMARY KEY AUTO_INCREMENT,    -- 自增长的组织 ID
    name VARCHAR(10) NOT NULL,            -- 组织名称,不可为空
    remarks VARCHAR(50),                   -- 备注信息
    memberid INT DEFAULT 0                 -- 首领 ID,默认为 0
);

2. 创建成员表

成员表用于存储组织成员的基本信息,包括姓名、性别和职业 ID。

CREATE TABLE members (
    id INT PRIMARY KEY AUTO_INCREMENT,      -- 自增长的成员 ID
    name VARCHAR(10) NOT NULL,              -- 成员姓名,不可为空
    sex BOOL NOT NULL,                       -- 成员性别,不能为空
    occupationid INT DEFAULT 0              -- 职业 ID,默认为 0
);

3. 创建职业表

职业表用于存储不同职业的信息。

CREATE TABLE occupations (
    id INT PRIMARY KEY AUTO_INCREMENT,       -- 自增长的职业 ID
    name VARCHAR(10) NOT NULL                -- 职业名称,不可为空
);

4. 创建职业与成员关系表

由于成员与职业之间存在多对多关系,因此需要建立一个中间表来存储这种关系。

CREATE TABLE member_occupation (
    memid INT NOT NULL,                     -- 成员 ID
    occid INT NOT NULL,                     -- 职业 ID
    PRIMARY KEY (memid, occid)               -- 复合主键
);

5. 其他操作

  • 显示数据库下的所有表
SHOW TABLES;
  • 查看表结构
DESC 表名;
  • 查看表的创建语句
SHOW CREATE TABLE 表名;
  • 修改表添加新列
ALTER TABLE 表名 ADD 列名称 列类型 [列参数] [NOT NULL DEFAULT];
  • 修改表删除列
ALTER TABLE 表名 DROP 列名称;
  • 修改表更改列名或列类型
ALTER TABLE 表名 CHANGE 旧列名 新列名 列类型 [列参数] [NOT NULL DEFAULT];
  • 修改表添加主键
ALTER TABLE 表名 ADD PRIMARY KEY (主键所在列名);
  • 清空表数据
TRUNCATE TABLE 表名;
  • 修改表添加索引
ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT] INDEX 索引名(列名);
  • 修改表删除索引
ALTER TABLE 表名 DROP INDEX 索引名;

五、数据库的增删改查

在我们的《银魂》中,角色之间错综复杂的关系使得管理这些信息变得尤为重要。我们将通过数据库管理来整理组织、成员和职业的信息。

1. 添加数据

我们的第一个任务是将《银魂》的角色和组织信息添加到数据库中。

添加组织数据到 organizations
INSERT INTO organizations (name, remarks, memberid) VALUES
('志村家', '志村新八的武士组织', 1),  -- 代表志村新八的家族,首领是他自己。
('攘夷志士', '反抗集团', 2),             -- 代表那些为自由而战的角色,如桂小太郎。
('真选组', '维护治安的团队', 3),         -- 土方十四郎和冲田总悟的组织,保护江户的治安。
('万事屋', '干任何工作的小集团', 4),     -- 银时和志村新八的万事屋,接受各种雇佣。
('桂的组织', '桂小太郎的组织', 5),       -- 桂小太郎的组织,隐藏在反抗政府的斗争之中。
('银魂团队', '银时与伙伴们的队伍', 6),   -- 银时与他的朋友们组成的团队。
('黑船', '日本与外国势力的交渉者', 7),   -- 象征着与外部势力交流的角色。
('土方的部队', '土方十四郎的忠诚部队', 8), -- 土方忠诚的部队,执行维护正义。
('江户守', '守护江户的组织', 9),         -- 守护江户的勇士们。
('神乐家', '神乐的家族', 10);            -- 神乐的家庭,象征着力量和团结。
添加成员数据到 members
INSERT INTO members (name, sex, occupationid) VALUES
('志村新八', TRUE, 1),                    -- 志村新八是武士,忠于其家族。
('桂小太郎', TRUE, 2),                    -- 桂小太郎是剑客,灵活而勇敢。
('土方十四郎', TRUE, 3),                  -- 土方,强壮的巡警。
('冲田总悟', TRUE, 3),                    -- 冲田以其剑技称道的巡警。
('神乐', FALSE, 4),                       -- 神乐是强大的佣兵,战斗力惊人。
('坂本辰马', TRUE, 2),                    -- 坂本作为剑客,有着淡淡的风趣。
('志村妙', FALSE, 1),                     -- 志村妙,作为妇女,象征着组织内的支持。
('长谷川泰三', TRUE, 5),                  -- 长谷川表示农民的忍耐与坚韧。
('高杉晋助', TRUE, 6),                    -- 高杉是商人角色中的反叛者,饱含魅力。
('志村露娜', FALSE, 1);                   -- 志村露娜,家族的一员。
添加职业数据到 occupations
INSERT INTO occupations (name) VALUES
('武士'),                               -- 志村新八的职业。
('剑客'),                               -- 桂小太郎与坂本的职业。
('巡警'),                               -- 土方与冲田的职责。
('佣兵'),                               -- 神乐身上展现的角色。
('农民'),                               -- 反映长谷川的辛劳。
('商人'),                               -- 高杉晋助作为商人的角色。
('忍者'),                               -- 代表潜伏与隐秘的职业。
('书生'),                               -- 知识分子的象征。
('医生'),                               -- 治愈者的角色。
('杂役');                               -- 万事屋中的支援角色。
添加职业与成员关系数据到 member_occupation
INSERT INTO member_occupation (memid, occid) VALUES
(1, 1), -- 志村新八 --> 武士
(1, 2), -- 志村新八 --> 剑客
(2, 2), -- 桂小太郎 --> 剑客
(2, 3), -- 桂小太郎 --> 巡警
(3, 3), -- 土方十四郎 --> 巡警
(3, 1), -- 土方十四郎 --> 武士
(4, 3), -- 冲田总悟 --> 巡警
(5, 4), -- 神乐 --> 佣兵
(6, 2), -- 坂本辰马 --> 剑客
(7, 5), -- 志村妙 --> 农民
(8, 5), -- 长谷川泰三 --> 农民
(9, 6), -- 高杉晋助 --> 商人
(10, 1); -- 志村露娜 --> 武士

2. 查看数据

在添加了这些生动的角色后,我们可以查询各个表以了解当前数据。

查询所有组织
SELECT * FROM organizations;

查询所有组织,为我们绘制出《银魂》中的重要团体。

查询所有成员
SELECT * FROM members;

查询所有成员,了解主要角色的基本信息。

查询所有职业
SELECT * FROM occupations;

查询所有职业,揭示角色们的职业身份。

3. 更新数据

当故事发展时,角色的身份和职责也可能会变化。

更新组织
UPDATE organizations
SET remarks = '更新后的备注'
WHERE id = 1;

在组织发生变化时,可更新其备注信息。

更新成员信息
UPDATE members
SET occupationid = 2
WHERE id = 1;

如果志村新八的身份有所变化,可以更新其职业。

更新职业
UPDATE occupations
SET name = '忍者'
WHERE id = 1;

假设志村新八成为了一名忍者,可以更新其职业名称。

4. 删除数据

在某些情况下,角色可能会从组织中离开或去世,我们可以将其从数据库中删除。

删除成员
DELETE FROM members
WHERE id = 1;

删除志村新八角色信息。

删除组织
DELETE FROM organizations
WHERE id = 1;

删除某个组织信息。

删除职业
DELETE FROM occupations
WHERE id = 1;

删除某个职业信息。

六、多表联合

由于《银魂》中角色关系复杂,多表联查是必不可少的操作。

1. 职业和成员关系表操作

通过角色之间的职业关系,我们可以加深理解。

添加成员与职业的关系
INSERT INTO member_occupation (memid, occid)
VALUES (1, 1);

为志村新八添加武士的身份。

查询成员及其职业
SELECT m.name AS member_name, o.name AS occupation_name
FROM members m
JOIN member_occupation mo ON m.id = mo.memid
JOIN occupations o ON mo.occid = o.id;

查询每名角色与其职业的对应关系,强调角色身份的多样性。

2. 联合查询示例

采用联合查询可以将组织、成员和职业信息相互融合,描绘出更完整的状态。

查询组织、成员和职业信息
SELECT 
    o.name AS organization_name,
    m.name AS member_name,
    m.sex AS member_sex,
    GROUP_CONCAT(oc.name SEPARATOR ', ') AS occupation_names
FROM 
    organizations o
LEFT JOIN 
    members m ON o.memberid = m.id
LEFT JOIN 
    member_occupation mo ON m.id = mo.memid
LEFT JOIN 
    occupations oc ON mo.occid = oc.id
GROUP BY 
    o.id, m.id;

通过此查询,揭示出组织与其成员之间的关系和角色多重身份。

添加复杂的条件查询

在特定条件下,我们也可以进行更深入的分析。例如,查询所有属于某个组织的男性成员及其职业。

SELECT 
    o.name AS organization_name, 
    m.name AS member_name, 
    GROUP_CONCAT(oc.name SEPARATOR ', ') AS occupation_names
FROM 
    organizations o
JOIN 
    members m ON o.id = m.occupationid
LEFT JOIN 
    member_occupation mo ON m.id = mo.memid
LEFT JOIN 
    occupations oc ON mo.occid = oc.id
WHERE 
    m.sex = TRUE -- 查询男性成员
GROUP BY 
    m.id;

使用此查询可获取指定组织下的男性成员,从而深入理解角色的组成。

以上内容将动漫《银魂》的角色关系与数据库操作有机结合,强调了角色之间的联系和变化。同时也为数据管理提供了实用的 SQL 操作示例,希望能帮助理解每个步骤的实际意义与用途!如果有任何疑问或需要进一步探讨的内容,请随时告诉我!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值