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;
相关推荐
feifeigo1233 小时前
升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
数据库·mysql·adb
A__tao8 小时前
一键将 SQL 转为 Java 实体类,全面支持 MySQL / PostgreSQL / Oracle!
java·sql·mysql
一只fish9 小时前
MySQL 8.0 OCP 1Z0-908 题目解析(17)
数据库·mysql
叁沐10 小时前
MySQL 06 全局锁和表锁:给表加个字段怎么有这么多阻碍?
mysql
power 雀儿11 小时前
集群聊天服务器---MySQL数据库的建立
服务器·数据库·mysql
Edingbrugh.南空13 小时前
Flink MySQL CDC 环境配置与验证
mysql·adb·flink
BD_Marathon14 小时前
Ubuntu:Mysql服务器
服务器·mysql·ubuntu
程序猿小D15 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
羊小猪~~15 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
叁沐16 小时前
MySQL 05 深入浅出索引(下)
mysql