MySQL—约束和分页(八)

1.NOT NULL约束

sql 复制代码
-- 1 NOT NULL 约束
-- 1.1 创建NOT NULL 约束
-- 1.1.2 为id添加非空约束,为name添加非空约束,并设置默认值
CREATE TABLE emp(
id INT(10) NOT NULL,
name VARCHAR(20) NOT NULL DEFAULT 'abc',
sex CHAR NULL
);
-- 1.2 增加NOT NULL 约束
-- 1.2.1 为sex添加非空约束
ALTER TABLE emp MODIFY sex CHAR NOT NULL;
-- 1.3 取消NOT NULL约束
-- 1.3.1 取消sex的非空约束
ALTER TABLE emp MODIFY sex CHAR NULL;
-- 1.3.2 取消sex的非空约束,并添加默认值
ALTER TABLE emp MODIFY name VARCHAR(20) DEFAULT 'ABC' NULL;

2.UNIQUE 约束

sql 复制代码
-- 2 UNIQUE 约束
-- 2.1 创建UNIQUE约束
CREATE TABLE USER(
id INT NOT NULL,
NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表级约束语法,表示用户名和密码组合不能重复
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
-- 2.2 添加唯一约束
-- 2.2.1 添加组合唯一约束,约束名使用默认名字,即id
ALTER TABLE USER ADD UNIQUE(id, NAME);
-- 2.2.2 添加组合唯一约束,指定约束名为name_pwd
ALTER TABLE USER ADD CONSTRAINT name_pwd UNIQUE(NAME,PASSWORD);
-- 2.2.3 添加唯一约束,约束名使用默认名字:id
ALTER TABLE USER MODIFY id INT UNIQUE;
-- 2.3 删除唯一约束
ALTER TABLE USER DROP INDEX id_2;
-- 查看所有索引
SHOW INDEX FROM USER;

3.PRIMARY KEY 约束

sql 复制代码
-- 3 PRIMARY KEY 约束
-- 说明:相当于非空约束+唯一约束的组合,不允许重复也不允许空值。
-- 3.1 创建主键约束
-- 3.1.1 列级模式
CREATE TABLE emp4(
id INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(20)
);
-- 3.1.2 表级模式
CREATE TABLE emp5(
id INT,
NAME VARCHAR(20),
PWD VARCHAR(15),
CONSTRAINT emp5_id PRIMARY KEY(id) 
);
-- 3.1.3 组合模式
CREATE TABLE emp6(
id INT,
NAME VARCHAR(20),
PWD VARCHAR(15),
CONSTRAINT emp5_NAME_PWD PRIMARY KEY(NAME,PWD) 
);
-- 3.2 删除主键约束
ALTER TABLE emp5 DROP PRIMARY KEY;
-- 3.3 添加主键约束
ALTER TABLE emp5 ADD PRIMARY KEY(NAME,PWD);
-- 3.4 修改主键约束(要先删除主键后才能执行)
ALTER TABLE emp5 MODIFY id INT PRIMARY KEY;

4.FOREIGN KEY 约束

sql 复制代码
-- 4 FOREIGN KEY 约束
-- 4.1 创建外键约束
-- 4.1.1 单一外键约束
CREATE TABLE dept(
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(20)
);

CREATE TABLE employee(
emp_id INT AUTO_INCREMENT PRIMARY KEY,
last_name VARCHAR(15),
dept_id INT,
CONSTRAINT employee_dept_id FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
);
-- 4.1.2 组合外键约束
CREATE TABLE classes(
id INT,
name VARCHAR(20),
number INT,
PRIMARY KEY(name, number)
);
CREATE TABLE student(
id INT AUTO_INCREMENT PRIMARY KEY,
class_name VARCHAR(20),
class_number INT,
CONSTRAINT f_name_number FOREIGN KEY(class_name,class_number) REFERENCES classes(name, number)
);
-- 4.2 删除外键约束(只能删除那种指定名字的外键)
ALTER TABLE student DROP FOREIGN KEY f_name_number;
-- 删除KEY
ALTER TABLE student DROP INDEX f_name_number;
-- 4.3 增加外键约束
ALTER TABLE student ADD CONSTRAINT f_name_number FOREIGN KEY(class_name,class_number) REFERENCES classes(name, number);

5.CHECK 约束

sql 复制代码
CREATE TABLE customer(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
age INT CHECK(age > 20),
sex VARCHAR(4)
);
-- 不会有任何警告或提示
INSERT INTO customer(name,age)
VALUE("Jack",135);

6.limit实现分页

sql 复制代码
-- 6.1 查询前3条
SELECT * FROM customer LIMIT 0,3;
-- 或
SELECT * FROM customer LIMIT 3;
-- 6.2 从第3条开始(不包含第3条),往后查询4条
SELECT * FROM customer LIMIT 3,4;
相关推荐
玄斎9 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
编程小Y10 小时前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
lvbinemail11 小时前
Grafana模板自动复制图表
数据库·mysql·zabbix·grafana·监控
weixin_4481199411 小时前
Datawhale Hello-Agents入门篇202512第1次作业
数据库·sql·mysql
皮皮林55111 小时前
有了开源的 MySQL,为什么还要选择 PostgreSQL?
mysql
廋到被风吹走12 小时前
【数据库】【MySQL】分库分表策略 分类、优势与短板
数据库·mysql·分类
五阿哥永琪14 小时前
MySQL 慢查询定位与 SQL 性能优化实战指南
sql·mysql·性能优化
xiaok17 小时前
GROUP BY进阶用法
mysql
李慕婉学姐17 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
qq_124987075318 小时前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计