头一回建数据库?跟着银行 demo 把增删改查全学会

鸡腿大王 2 阅读 干货分享

很多新手学 MySQL,第一关就是被一堆 CREATE、INSERT、UPDATE、DELETE 吓到。别慌,这份文档其实是 "银行客户 - 账户 - 交易记录" 三个表的搭建流程,咱就把它当成搭积木,一块一块来。

第一步:先进入自己的 "车库"—— 选数据库

USE db_bank;
--选数据库

一句话:告诉 MySQL" 我要在 db_bank 这个数据库里干活了 "。就像进了车库才动手修车,先得选对地方。

第二步:建客户表 t_customer

CREATE TABLE IF NOT EXISTS t_customer (
 customer_id VARCHAR(30) PRIMARY KEY,
 customer_name VARCHAR(20) NOT NULL,
 id_card_number VARCHAR(18) NOT NULL UNIQUE,
 phone VARCHAR(20) NOT NULL,
 email VARCHAR(20) NOT NULL,
 address TEXT NOT NULL,
 customer_type TINYINT(1) NOT NULL,
 CHECK (customer_type IN (1, 2))
);

PRIMARY KEY(主键):customer_id 是每个客户的唯一身份证,不能重复

NOT NULL:姓名、电话这些必须填,不能空着

UNIQUE:身份证号全国唯一,一个号只能对应一个人

CHECK:customer_type 只能填 1 或 2(比如 1 = 普通、2=VIP),填别的就报错 —— 这是给自己设的 "规矩"

第三步:建账户表 t_account

CREATE TABLE IF NOT EXISTS t_account (
 account_id VARCHAR(30) PRIMARY KEY,
 customer_id VARCHAR(30) NOT NULL,
 open_date DATE NOT NULL,
 balance DECIMAL(18, 2) NOT NULL,
 account_status TINYINT(1) DEFAULT 1,
 password VARCHAR(10) NOT NULL,
 CHECK (balance >= 0),
 CHECK (account_status IN (1, 2, 3)),
 FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id)
);

DEFAULT 1:account_status(账户状态)不填默认是 1(正常)

FOREIGN KEY ... REFERENCES(外键):账户里的 customer_id 必须能在客户表t_customer里找到。这就把两张表 "拴" 在一起了 ——先有客户,才能开账户,防止凭空造账户

第四步:建交易记录表 t_record

CREATE TABLE IF NOT EXISTS t_record (
 record_id VARCHAR(30) PRIMARY KEY,
 account_id VARCHAR(30) NOT NULL,
 transaction_amount DECIMAL(18, 2) NOT NULL,
 transaction_type TINYINT(1) NOT NULL,
 transaction_time DATETIME NOT NULL,
 CHECK (transaction_amount >= 0),
 CHECK (transaction_type IN (1, 2, 3)),
 FOREIGN KEY (account_id) REFERENCES t_account(account_id)
);

同样的套路:交易记录也通过外键 account_id 挂到账户表上。账户都得先有,才能有它的流水

第五步:看看自己建了几张表

SHOW TABLES;

就是让 MySQL"报菜名",把你库里所有的表列出来,验证一下建表成功没

第六步:往客户表塞数据 INSERT

INSERT INTO t_customer (customer_id, customer_name, id_card_number, phone, email, address, customer_type) VALUES
('C00001', '李某', '422************53', '139****5698', '415963***@qq.com', '北京市海淀区xx街道', 1),
('C00002', '张某', '610************46', '152****1234', '123789***@qq.com', '北京市朝阳区xx街道', 2);

按列名的顺序往里 "填一行"。注意 VALUES 后面多条数据要用逗号隔开,一次性插两个人。括号里的顺序必须和前面列名一一对上

第七步:插账户、插交易记录

-- 向账户表插入2个账户信息
INSERT INTO t_account
(account_id, customer_id, open_date, balance, account_status,password)VALUES
('A00001', 'C00001', '2026-01-11', 1000.00, 1, '123456'),
('A00002', 'C00002', '2026-01-10', 50000.00, 1, '654321');

-- 插入两条开户交易记录
INSERT INTO t_record
(record_id, account_id, transaction_amount, transaction_type,transaction_time)VALUES
('R00001', 'A00001', 1000.00, 1, '2026-01-11 16:53:42'),
('R00002', 'A00002', 50000.00, 1, '2026-01-10 09:20:15');

和插客户一个道理。这里能顺利插进去,是因为前面已经有客户 C00001、C00002 和账户 A00001、A00002 了—— 这正是外键在 "把关"

第八步:改数据 UPDATE

UPDATE t_account
SET balance = 2000.00, password = '666666'
WHERE account_id = 'A00001';

只改 A00001 这个账户,把余额改成 2000,密码改成 666666

WHERE 一定要写!不写的话,UPDATE 会把整张表所有人的余额和密码都改了

第九步:删数据 DELETE

DELETE FROM t_record
WHERE account_id = 'A00002';

删掉 A00002 这个账户的所有交易记录。同样,WHERE 必须写,否则会清空整张表

完整

-- 使用银行数据库
USE db_bank;

-- 创建客户表 t_customer
CREATE TABLE IF NOT EXISTS t_customer (
 customer_id VARCHAR(30) PRIMARY KEY,       -- 客户编号,主键
 customer_name VARCHAR(20) NOT NULL,        -- 客户姓名
 id_card_number VARCHAR(18) NOT NULL UNIQUE,-- 身份证号,唯一不可重复
 phone VARCHAR(20) NOT NULL,                -- 联系电话
 email VARCHAR(20) NOT NULL,                 -- 邮箱
 address TEXT NOT NULL,                      -- 住址
 customer_type TINYINT(1) NOT NULL,          -- 客户类型:1普通,2VIP
 CHECK (customer_type IN (1, 2))
);

-- 创建账户表 t_account
CREATE TABLE IF NOT EXISTS t_account (
 account_id VARCHAR(30) PRIMARY KEY,        -- 账户编号,主键
 customer_id VARCHAR(30) NOT NULL,           -- 所属客户编号,外键关联客户表
 open_date DATE NOT NULL,                    -- 开户日期
 balance DECIMAL(18, 2) NOT NULL,            -- 账户余额
 account_status TINYINT(1) DEFAULT 1,       -- 账户状态:1正常,2冻结,3销户
 password VARCHAR(10) NOT NULL,             -- 账户密码
 CHECK (balance >= 0),                       -- 余额不能为负数
 CHECK (account_status IN (1, 2, 3)),
 FOREIGN KEY (customer_id) REFERENCES t_customer(customer_id)
);

-- 创建交易记录表 t_record
CREATE TABLE IF NOT EXISTS t_record (
 record_id VARCHAR(30) PRIMARY KEY,         -- 交易记录编号,主键
 account_id VARCHAR(30) NOT NULL,            -- 所属账户编号,外键关联账户表
 transaction_amount DECIMAL(18, 2) NOT NULL, -- 交易金额
 transaction_type TINYINT(1) NOT NULL,      -- 交易类型:1存款,2取款,3转账
 transaction_time DATETIME NOT NULL,         -- 交易时间
 CHECK (transaction_amount >= 0),            -- 交易金额不能为负数
 CHECK (transaction_type IN (1, 2, 3)),
 FOREIGN KEY (account_id) REFERENCES t_account(account_id)
);

-- 查看当前库中的所有表
SHOW TABLES;

-- 向客户表插入2条客户数据
INSERT INTO t_customer
(customer_id, customer_name, id_card_number, phone, email, address, customer_type)
VALUES
('C00001', '李某', '422************53', '139****5698', '415963***@qq.com', '北京市海淀区xx街道', 1),
('C00002', '张某', '610************46', '152****1234', '123789***@qq.com', '北京市朝阳区xx街道', 2);

-- 向账户表插入2个账户信息
INSERT INTO t_account
(account_id, customer_id, open_date, balance, account_status,password)VALUES
('A00001', 'C00001', '2026-01-11', 1000.00, 1, '123456'),
('A00002', 'C00002', '2026-01-10', 50000.00, 1, '654321');

-- 插入两条开户交易记录
INSERT INTO t_record
(record_id, account_id, transaction_amount, transaction_type,transaction_time)VALUES
('R00001', 'A00001', 1000.00, 1, '2026-01-11 16:53:42'),
('R00002', 'A00002', 50000.00, 1, '2026-01-10 09:20:15');

-- 修改A00001账户余额为2000,密码改为666666
UPDATE t_account
SET balance = 2000.00, password = '666666'
WHERE account_id = 'A00001';

-- 删除A00002账户对应的所有交易记录
DELETE FROM t_record
WHERE account_id = 'A00002';