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;
相关推荐
chenzhou__1 小时前
MYSQL学习笔记(个人)(第十五天)
linux·数据库·笔记·学习·mysql
一只自律的鸡2 小时前
【MySQL】第二章 基本的SELECT语句
数据库·mysql
@yanyu6669 小时前
idea中配置tomcat
java·mysql·tomcat
hello_zzw14 小时前
docker部署MySQL主从服务集群
mysql·adb·docker
初见00116 小时前
Java MySQL 事务隔离级别深度剖析:从幻读到MVCC
mysql
nzxzn17 小时前
MYSQL第二次作业
数据库·mysql
冻咸鱼18 小时前
MySQL的CRUD
数据库·mysql·oracle
初见00119 小时前
Java MySQL 索引深度解析:从原理到最佳实践
mysql
冻咸鱼20 小时前
MySQL中表操作
android·sql·mysql·oracle
心态特好20 小时前
从缓存到分库分表:MySQL 高并发海量数据解决方案全解析
数据库·mysql·缓存