当前位置: 首页 > news >正文

前端学习之后端java小白(三)-sql外链一对多

一、 链接两个表之间的数据

<1>在已存在的表中添加字段

1. 基本语法
ALTER TABLE 表名 ADD COLUMN 字段名 数据类型 [约束];
2. 事例
-- 在已存在的表中添加字段使用 ALTER TABLE 语句的 ADD COLUMN
ALTER TABLE empTest ADD COLUMN user_id INT;
-- 添加邮箱字段
ALTER TABLE users ADD COLUMN email VARCHAR(100);
-- 添加年龄字段
ALTER TABLE users ADD COLUMN age INT;
-- 添加创建时间字段
ALTER TABLE users ADD COLUMN created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
3. 带约束字段添加
 -- 添加不能为空的字段
ALTER TABLE users ADD COLUMN phone VARCHAR(20) NOT NULL;-- 添加唯一约束的字段
ALTER TABLE users ADD COLUMN username VARCHAR(30) UNIQUE;-- 添加带默认值的字段
ALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';-- 添加检查约束的字段
ALTER TABLE users ADD COLUMN salary DECIMAL(10,2) CHECK (salary > 0);
4. 指定字段位置
 -- 添加到表的最前面:ALTER TABLE users ADD COLUMN user_code VARCHAR(20) FIRST;-- 添加到指定字段后面ALTER TABLE users ADD COLUMN middle_name VARCHAR(50) AFTER name;
5. 一次添加多个字段
ALTER TABLE users 
ADD COLUMN email VARCHAR(100),
ADD COLUMN phone VARCHAR(20),
ADD COLUMN address TEXT,
ADD COLUMN birthday DATE;

<2>已经存在的表可以通过 ALTER TABLE 语句添加外键约束

1. 基本语法
ALTER TABLE 子表名 
ADD CONSTRAINT 约束名 
FOREIGN KEY (列名) REFERENCES 父表名(列名);
2. 案例:假设我们有两个已经存在的表
-- 用户表(已存在)
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);-- 订单表(已存在,但没有外键)
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,      -- 这列存在但没有外键约束product_name VARCHAR(100)
);
-- 添加外键约束:
-- 给 orders 表的 user_id 列添加外键约束
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id);
3. 完整操作示例
-- 1. 创建父表(用户表)
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100)
);-- 2. 创建子表(订单表),暂不添加外键
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,product_name VARCHAR(100),amount DECIMAL(10,2)
);-- 3. 插入一些测试数据
INSERT INTO users VALUES 
(1, '张三', 'zhangsan@email.com'),
(2, '李四', 'lisi@email.com');INSERT INTO orders VALUES 
(101, 1, 'iPhone', 7999.00),
(102, 2, 'iPad', 4999.00);-- 4. 现在添加外键约束
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id);
4. 多种添加方式
-- 1. 指定约束名(推荐)
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id);
-- 2.不指定约束名(系统自动生成)
ALTER TABLE orders 
ADD FOREIGN KEY (user_id) REFERENCES users(id);
-- 3.添加多个外键
-- 假设订单表还有 category_id 列
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id),
ADD CONSTRAINT fk_orders_category_id FOREIGN KEY (category_id) REFERENCES categories(id);
5. 验证外键是否添加成功
SHOW CREATE TABLE orders;-- 或者查询约束信息
SELECT CONSTRAINT_NAME,TABLE_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE 
WHERE TABLE_NAME = 'orders' AND CONSTRAINT_NAME LIKE 'fk_%';

二、其他小点

1. 创建表时设置自动增长
-- ✅ 推荐:ID自动增长
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,    -- 注意这里加了 AUTO_INCREMENTname VARCHAR(50),email VARCHAR(100)
);

插入数据时不需要指定ID

-- ✅ 不需要指定ID,系统自动分配
INSERT INTO users (name, email) VALUES 
('张三', 'zhangsan@email.com'),
('李四', 'lisi@email.com'),
('王五', 'wangwu@email.com');

查看结果

SELECT * FROM users;
/*
+----+------+---------------------+
| id | name | email               |
+----+------+---------------------+
|  1 | 张三 | zhangsan@email.com  |
|  2 | 李四 | lisi@email.com      |
|  3 | 王五 | wangwu@email.com    |
+----+------+---------------------+
*/

三、外链案例

1. 创建表结构
-- 父表:用户表
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,phone VARCHAR(20)
);-- 子表:订单表(包含外键)
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,                        -- 外键字段product_name VARCHAR(100),amount DECIMAL(10,2),order_date DATE,FOREIGN KEY (user_id) REFERENCES users(id)  -- 外键约束
);
2. 插入数据
-- 先插入父表数据(用户)
INSERT INTO users (name, email, phone) VALUES 
(1, '张三', 'zhangsan@email.com', '13800138001'),
(2, '李四', 'lisi@email.com', '13800138002'),
(3, '王五', 'wangwu@email.com', '13800138003'),
(4, '赵六', 'zhaoliu@email.com', '13800138004');-- 再插入子表数据(订单)
INSERT INTO orders (user_id, product_name, amount, order_date) VALUES 
(1, 'iPhone 15', 7999.00, '2024-01-10'),
(1, 'AirPods', 1299.00, '2024-01-15'),
(2, 'MacBook Pro', 12999.00, '2024-01-20'),
(2, 'iPad', 4999.00, '2024-01-25'),
(3, '小米手机', 2999.00, '2024-02-01'),
(1, 'Apple Watch', 2999.00, '2024-02-05');
3. 数据展示

users 表(父表):

 SELECT * FROM users;

在这里插入图片描述
orders 表(子表):

SELECT * FROM orders;

在这里插入图片描述

4. 关联查询展示

显示每个订单的用户信息:

SELECT o.id AS 订单ID,u.name AS 用户姓名,u.email AS 邮箱,o.product_name AS 商品名称,o.amount AS 金额,o.order_date AS 订单日期
FROM orders o
JOIN users u ON o.user_id = u.id
ORDER BY o.order_date;

在这里插入图片描述

5. 数据关系图

在这里插入图片描述

四、实践

-- 查看有哪些数据库
SHOW DATABASES;
-- 假设要使用名为 'TestData' 的数据库
USE TestData; 
-- 现在可以进行表操作了
CREATE TABLE empTest (id INT PRIMARY KEY, -- 员工id,主键且自增长ename VARCHAR(50) NOT NULL UNIQUE, -- 员工姓名,非空并且唯一join_date DATE NOT NULL, -- 入职日期, 非空salary DOUBLE(7,2) NOT NULL, -- 工资 非空bonus DOUBLE(7,2) DEFAULT 0, -- 奖金 非空 product_name VARCHAR(100) DEFAULT 0, -- 产品名称 非空amount DECIMAL(10,2)  -- 金额
);
-- 查看当前选择的数据库
SELECT DATABASE();
-- 查看当前数据库中的所有表
SHOW TABLES;
-- 不选择数据库,直接指定
CREATE TABLE myshop.users (id INT PRIMARY KEY,name VARCHAR(50)
);-- 链接两个表之间的数据-- 已经存在的表可以通过 ALTER TABLE 语句添加外键约束-- 在已存在的表中添加字段使用 ALTER TABLE 语句的 ADD COLUMN
ALTER TABLE empTest ADD COLUMN user_id INT;
-- 给empTest表的userid添加外建约束
ALTER  TABLE empTest
ADD CONSTRAINT fk_empTest_user_id
FOREIGN KEY (user_id) REFERENCES users(id)-- 修改已经存在表的字段约束
ALTER TABLE empTest MODIFY COLUMN id INT   AUTO_INCREMENT;
-- 查看表数据
DESCRIBE empTest;
-- 插入表数据
INSERT INTO empTest(ename,join_date, salary, bonus, product_name, amount) VALUES ('zhangsan', '2025-09-02', 80, 20, '产品', 60);SELECT * FROM empTest;
SELECT * FROM users;ALTER TABLE empTest DROP FOREIGN KEY fk_empTest_user_id;
-- 添加表数据
INSERT INTO users (user_id, username, email, password) VALUES (1,'外链','www.badu.com','456');ALTER TABLE users ADD COLUMN user_id INT;

文章转载自:

http://G5EEItMk.kkdbz.cn
http://N51OETKt.kkdbz.cn
http://9ypg6NU8.kkdbz.cn
http://12Sbr0Rx.kkdbz.cn
http://LforvWiA.kkdbz.cn
http://2aXcc8qJ.kkdbz.cn
http://Okm3ncve.kkdbz.cn
http://9ONUkv7M.kkdbz.cn
http://pSXsuaoa.kkdbz.cn
http://YXmdA23c.kkdbz.cn
http://9dJvSvnj.kkdbz.cn
http://ZTfNTzWw.kkdbz.cn
http://9tKprThn.kkdbz.cn
http://VFr8WpFJ.kkdbz.cn
http://o2s4nYRG.kkdbz.cn
http://GR9RyKaT.kkdbz.cn
http://zzjTe3L6.kkdbz.cn
http://wLSXS5Oe.kkdbz.cn
http://4DaGiQrM.kkdbz.cn
http://wjht1kI4.kkdbz.cn
http://ajjIYHag.kkdbz.cn
http://RczRYbvT.kkdbz.cn
http://6lxZW8ap.kkdbz.cn
http://jUxKtzc9.kkdbz.cn
http://gvT2OFKS.kkdbz.cn
http://F53EyZxG.kkdbz.cn
http://3XOgiiVd.kkdbz.cn
http://OKvqDCCG.kkdbz.cn
http://G5exvffg.kkdbz.cn
http://9y1kxXI0.kkdbz.cn
http://www.dtcms.com/a/376377.html

相关文章:

  • 学习triton-第1课 向量加法
  • PySpark 与 Pandas 的较量:Databricks 中 SQL Server 到 Snowflake 的数据迁移之旅
  • ArcGIS软件安装。
  • 【Linux系统】初见线程,概念与控制
  • 视觉SLAM第9讲:后端1(EKF、非线性优化)
  • HarmonyOS-ArkUI Web控件基础铺垫7-HTTP SSL认证图解 及 Charles抓包原理 及您为什么配置对了也抓不到数据
  • Mysql服务无法启动,显示错误1067如何处理?
  • Redis主从模式和集群模式的区别
  • 基于51单片机水塔水箱液水位WIFI监控报警设计
  • AR消防头盔:火场救援的智能“透视眼”
  • 【MFC】对话框:位置属性(居中、绝对对齐、X位置Y位置)应用示例
  • 路由器无线桥接二级验证网络(初始密码和网页登录个人账号和密码)
  • 【MFC】对话框属性:X Pos(X位置),Y Pos(Y位置)
  • 工程师 - Onion Architecture in Software Development
  • Golang单例模式和工厂模式详解
  • Redis 分布式锁:从原理到实战的完整指南
  • 计算机网络——第一章 计算机网络体系结构
  • 【公共数据】《公共数据资源授权运营实施指南》核心观点
  • 姓名+身份证号码+人像实名认证接口-三要素身份证实名认证api
  • Linux编程笔记1-概念数据类型输入输出
  • 认知语义学对人工智能自然语言处理的影响与启示:从理论融合到未来展望
  • Markdown 介绍和使用教程
  • 实习——配置电源管理策略
  • Es6新特性总结
  • 【云原生网络篇】从 Private Endpoint 到 K8s Pod 对外注册:一次网络底层的全面探究
  • 老梁聊全栈系列:(阶段一)从单体到云原生的演进脉络
  • AI 模型训练过程中参数用BF16转向FP16的原因
  • win11,安装c++版OpenCV,带cuda
  • openEuler 24.03 (LTS-SP2)简单KVM安装+桥接模式
  • websocket 服务器往客户端发送的数据要加掩码覆盖吗?