第4步---MySQL的约束
保证表中的数据的完整性和有效性的
不能为空
不能重复
主键
自增
非空
默认约束
0填充约束
外键约束
1.约束
1.1主键约束
-
主键 primary key
-
自增 auto_increment
-
非空 not null
-
默认约束 default
-
唯一性unique
-
0填充约束 zerefill
-
外键约束 foreign key
1.简介:最重要的约束。约束一个列或者是多个列。可以更快的找个对应的行。唯一+非空约束。只能有一个主键。
2.关键字:primary key
3.默认唯一索引
1.2单列索引
-- =================================单列主键=================================
-- 创建新的表
DROP TABLE IF EXISTS student;
CREATE TABLE IF NOT EXISTS student(
id int PRIMARY key,
name VARCHAR(20),
deptId int
)
-- 后面定义主键
DROP TABLE IF EXISTS student2;
CREATE TABLE IF NOT EXISTS student2(
id int ,
name VARCHAR(20),
deptId int,
CONSTRAINT pk1 PRIMARY KEY(id)
)
主键作用
-
重复主键
会出现下面的错误。
不能为空值
1.3联合主键
-- =================================联合主键=================================
-- 创建新的表 不指定外键的名称
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int ,
deptId int,
name VARCHAR(20),
PRIMARY KEY (id,deptId)
)
-- 创建新的表 指定外键的名称
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int ,
deptId int,
name VARCHAR(20),
CONSTRAINT pk1 PRIMARY KEY (id,deptId)
)
作用:
-
可以单个为空
-
不能全部是重复。可以部分是重复的。
1.4修改表结构添加主键
-- =================================修改表=================================
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int ,
deptId int,
name VARCHAR(20)
)
-- 修改语句
-- 添加单个主键
ALTER TABLE student3 ADD PRIMARY KEY (id);
-- 添加多个主键
ALTER TABLE student3 ADD PRIMARY KEY (id,deptId);
1.5删除主键约束
-- =================================删除主键=================================
-- 单列和组合主键都是这个删除的方法
ALTER TABLE student3 DROP PRIMARY KEY;
虽然删除了主键但是不为空的约束还是存在的。
1.6自增长约束
1.设置自增
-- =================================自增长约束=================================
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int PRIMARY KEY auto_increment,
deptId int,
name VARCHAR(20)
)
-
增长的话增长到这个类型的最大的值
-
必须是整型
-
可以执行开始的值和步长
2.设置初始的值
-- 初始值
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int PRIMARY KEY auto_increment ,
deptId int,
name VARCHAR(20)
) auto_increment =100;
-- 采用修改表的形式
-- 采用修改表的形式修改自增的初始值
ALTER TABLE student3 auto_increment =200;
delete删除数据的时候还是从原先的基础上继续进行自增
但是truncate不是从1考试进行自增的。
2.非空约束
设置表的字段不能为空
-- =================================非空约束=================================
-- 创建表的时候设置
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int PRIMARY KEY auto_increment ,
deptId int ,
name VARCHAR(20) NOT NULL
)
-- 修改表的时候添加
ALTER TABLE student3 MODIFY deptId VARCHAR(20) NOT NULL;
-- 删除的时候就去掉就行
ALTER TABLE student3 MODIFY name VARCHAR(20) ;
3.默认值约束
-- =================================默认值约束=================================
-- 创建表的时候设置
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int PRIMARY KEY auto_increment ,
deptId int UNIQUE,
name VARCHAR(20) NOT NULL DEFAULT '用户名'
)
-- 修改表的时候添加(默认删除重新加)
ALTER TABLE student3 MODIFY name VARCHAR(20) NOT NULL DEFAULT '用户名修改';
-- 删除默认值约束
ALTER TABLE student3 MODIFY name VARCHAR(20) NOT NULL ;
4.零填充约束
插入数据的时候当前字段的值的长度小于定义的长度的时候,就会在值得前面补上对应得0
zerefill默认为int(10)
默认加了无符号得限制。数值范围是原先得两倍
-- =================================默0填充约束=================================
-- 创建表的时候设置
DROP TABLE IF EXISTS student3;
CREATE TABLE IF NOT EXISTS student3(
id int ZEROFILL auto_increment,
deptId int UNIQUE,
name VARCHAR(20) NOT NULL DEFAULT '用户名',
PRIMARY KEY (id)
)
-- 删除
ALTER TABLE student3 MODIFY id INT;
下面是添加得数据
以上所有的操作都是可以在navicat可视化界面中进行找到并进行设置的。