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;
相关推荐
源码集结号2 小时前
一套智慧工地云平台源码,支持监管端、项目管理端,Java+Spring Cloud +UniApp +MySql技术开发
java·mysql·spring cloud·uni-app·源码·智慧工地·成品系统
GanGuaGua3 小时前
MySQL:表的约束
数据库·mysql
Li zlun4 小时前
MySQL 性能监控与安全管理完全指南
数据库·mysql·安全
韩立学长7 小时前
【开题答辩实录分享】以《走失人口系统档案的设计与实现》为例进行答辩实录分享
mysql·mybatis·springboot
杨云龙UP8 小时前
小工具大体验:rlwrap加持下的Oracle/MySQL/SQL Server命令行交互
运维·服务器·数据库·sql·mysql·oracle·sqlserver
阿巴~阿巴~8 小时前
使用 C 语言连接 MySQL 客户端(重点)
服务器·数据库·sql·mysql·ubuntu
清水加冰8 小时前
【MySQL】SQL调优-如何分析SQL性能
数据库·sql·mysql
知其然亦知其所以然8 小时前
MySQL性能暴涨100倍?其实只差一个“垂直分区”!
后端·mysql·面试
风跟我说过她8 小时前
CentOS 7 环境下 MySQL 5.7 深度指南:从安装、配置到基础 SQL 操作
sql·mysql·centos
数据知道10 小时前
Go基础:正则表达式 regexp 库详解
开发语言·mysql·golang·正则表达式·go语言