头一回建数据库?跟着银行 demo 把增删改查全学会
很多新手学 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';