约束条件:限制表中的数据,保证添加到数据表中的数据准确和可靠性!凡是不符合约束的数据,插入时就会失败!
约束条件在创建表时可以使用, 也可以修改表的时候添加约束条件
1、约束条件分类:
1)not null :非空约束,保证字段的值不能为空
s_name VARCHAR(10) NOT NULL, #非空
2)default:默认约束,保证字段总会有值,即使没有插入值,都会有默认值!
age INT DEFAULT 18, #默认约束
3)unique:唯一,保证唯一性但是可以为空,比如座位号
s_seat INT UNIQUE,#唯一约束
4)check:检查性约束【mysql不支持,语法不报错,但无效】
s_sex CHAR(1) CHECK(s_sex='男' OR s_sex='女'),#检查约束(Mysql无效)
5)primary key :主建约束,同时保证唯一性和非空
id INT PRIMARY KEY,#主建约束(唯一性,非空)
6)foreign key:外键约束,用于限制两个表的关系,保证从表该字段的值来自于主表相关联的字段的值!
teacher_id INT REFERENCES teacher(id) #这是外键,写在列级,Mysql无效
注意
1. 列级约束
上面6种约束都可以写,语法都支持,不报错,但外键约束写了mysql无效不起作用
2. 表级约束
非空、默认不支持,其他都可以!
语法:
其他: 【constraint 约束名】 约束类型(字段名称) ,
外键: 【constraint 约束名】 约束类型(字段名称) foreign key(字段名称) references 关联表名(其字段名),
DROP TABLE IF EXISTS students;CREATE TABLE students(id INT ,s_name VARCHAR(10) not null,# 非空约束s_sex CHAR(1) default '男', # 默认约束s_seat INT,age INT ,teacher_id INT , #上面是列级约束,下面有表级约束CONSTRAINT pk PRIMARY KEY(id), #主建约束,pk是起的名,后面一样CONSTRAINT uq UNIQUE(s_seat), #唯一约束CONSTRAINT ck CHECK(s_sex='男' OR s_sex='女'), #检查约束CONSTRAINT fk_students_teacher FOREIGN KEY(teacher_id) REFERENCES teacher(id) #外键约束);
2、MySQL修改表时添加或删除约束
即修改表字段的数据类型或约束
外键删除约束: ALTER TABLE 表名 DROP CONSTRAINT 约束名称
1) 非空约束
alter table students modify column s_name varchar(20) not null; # 添加
alter table students modify column s_name varchar(20) ; # 删除 不写约束条件
2)默认约束
alter table students modify column age int default 18; #添加
alter table students modify column age; #删除
3)唯一键约束
alter table students modify column seat int unique; #添加
alter table students drop index seat; #删除
show index from students; #查看唯一约束
4)主键约束
alter table students modify column id int primary key; #添加
alter table students drop primary key; #删除 约束名称
5)外键约束
alter table students add foreign key(major_id) references majors(id); #添加
alter table students drop foreign key fk_students_teacher; #删除 约束名称
3、自增长列 auto_increment
id int primary key auto_increment,
一个表中有且只能有一个自增长列,自增长列一般和主键搭配
修改表的时候添加自增长列:
alter table t_indentity modify column id int primary key auto_increment;
删除自增长列:
alter table t_indentity modify column id int;
新闻热点
疑难解答