前端学习之后端java小白(二)-sql约束/建表

一、约束

SQL约束(Constraints)是用于限制表中数据的规则,确保数据的完整性和准确性。以下是主要的SQL约束类型:

主要约束类型:

1. NOT NULL 约束: 确保列不能包含空值
复制代码
CREATE TABLE users (
    id INT NOT NULL,
    name VARCHAR(50) NOT NULL
);
2. UNIQUE 约束:确保列中的所有值都是唯一的
复制代码
CREATE TABLE users (
    id INT UNIQUE,
    email VARCHAR(100) UNIQUE
);
3. PRIMARY KEY 约束: 唯一标识表中的每一行 / 自动包含 NOT NULL 和 UNIQUE 约束
复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);
4. FOREIGN KEY 约束: 链接两个表之间的数据 / 确保引用完整性

这是外键约束

FOREIGN KEY (user_id):指定 user_id 列作为外键

REFERENCES users(id):这个外键引用 users 表中的 id 列

复制代码
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);
5.CHECK 约束: 确保列中的值满足特定条件
复制代码
CREATE TABLE products (
    id INT PRIMARY KEY,
    price DECIMAL(10,2) CHECK (price > 0),
    age INT CHECK (age >= 18 AND age <= 100)
);
6. DEFAULT 约束: 为列提供默认值
复制代码
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    status VARCHAR(20) DEFAULT 'active'
);

约束管理:

1. 添加约束
复制代码
-- 添加 NOT NULL 约束
ALTER TABLE users MODIFY COLUMN email VARCHAR(100) NOT NULL;

-- 添加 UNIQUE 约束
ALTER TABLE users ADD CONSTRAINT uk_email UNIQUE (email);

-- 添加 FOREIGN KEY 约束
ALTER TABLE orders ADD CONSTRAINT fk_user 
FOREIGN KEY (user_id) REFERENCES users(id);

-- 添加 CHECK 约束
ALTER TABLE products ADD CONSTRAINT chk_price 
CHECK (price > 0);
2. 删除约束
复制代码
-- 删除约束(通过约束名)
ALTER TABLE users DROP CONSTRAINT uk_email;
ALTER TABLE orders DROP CONSTRAINT fk_user;
ALTER TABLE products DROP CONSTRAINT chk_price;

-- 删除主键约束
ALTER TABLE users DROP PRIMARY KEY;

约束的好处

  1. 数据完整性:确保数据符合业务规则
  2. 数据一致性:维护数据之间的关系
  3. 防止错误数据:在数据插入/更新时进行验证
  4. 提高查询性能:某些约束(如主键、唯一约束)会自动创建索引

注意事项

  1. 约束在数据插入、更新时会进行检查
  2. 违反约束的操作会被拒绝
  3. 外键约束可能影响删除和更新操作
  4. 过多的约束可能影响写入性能

SQL约束是数据库设计中的重要组成部分,有助于维护数据质量和业务逻辑的正确性。

二、建表

复制代码
-- 查看有哪些数据库
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)
);
相关推荐
坚持学习前端日记1 分钟前
个人运营小网站的最佳策略
java·学习·程序人生·职场和发展·创业创新
幽络源小助理6 分钟前
SpringBoot+Vue美食网站系统源码 | Java餐饮项目免费下载 – 幽络源
java·vue.js·spring boot
k***92166 分钟前
C++:继承
java·数据库·c++
崇山峻岭之间8 分钟前
Matlab学习记录20
开发语言·学习·matlab
小鸡脚来咯12 分钟前
Hive SQL与SQL不同处
hive·hadoop·sql
Coder_Boy_15 分钟前
基于SpringAI企业级智能教学考试平台考试模块全业务闭环方案
java·人工智能·spring boot·aiops
微爱帮监所写信寄信17 分钟前
微爱帮监狱寄信写信小程序信件内容实时保存技术方案
java·服务器·开发语言·前端·小程序
沛沛老爹18 分钟前
Web开发者实战A2A智能体交互协议:从Web API到AI Agent通信新范式
java·前端·人工智能·云原生·aigc·交互·发展趋势
shizhenshide19 分钟前
物联网(IoT)设备如何应对验证码?探讨无头浏览器与协议级解决方案
java·struts·microsoft·验证码·ezcaptcha
七夜zippoe20 分钟前
响应式编程基石 Project Reactor源码解读
java·spring·flux·响应式编程·mono·订阅机制