1.列级约束
create table student(-- 列级约束
sno int(6) primary key auto_increment, -- 主键 自增
name varchar(10) not null,-- 非空
sex char(1) default"男" check(sex="男"||sex="女"),-- 默认值 check约束
age int(2) check(age>18&&age<50),
enterdate date,
classname varchar(10),
email varchar(16) UNIQUE -- 唯一
);
insert into student values(1,"张三","男",23,"1999/12/12","java","xxxvv.com");
insert into student values(null,"张三","男",23,"1999/12/12","java","xxxaavv.com");-- 这里的null并不代表主键为空,而是占位的意思(注意:主键可以自增)
insert into student values(default,"李四",null,23,"1999/12/12","java","lxxaavv.com");-- 性别可以为空,可以不指定性别
insert into student (name,email)values("王五","xwddw.onm");-- 没有给予性别时,性别就是默认值
select * from student;
2.表级约束
create table student(-- 表级约束
sno int(6) auto_increment,
name varchar(10) not null,
sex char(1) default"男" ,
age int(2),
enterdate date,
classname varchar(10),
email varchar(16),
constraint pk_stu primary key(sno),
constraint ck_stu_sex check(sex="男"||sex="女"),
constraint ck_stu_age check(age>=18&&age<=60),
constraint uk_stu_email unique(email)
);
3.第三种约束方式
create table student(
sno int(6) ,
name varchar(10) not null,
sex char(1) default"男" ,
age int(2),
enterdate date,
classname varchar(10),
email varchar(16)
);
alter table student add constraint pk_stu_sno primary key(sno);
alter table student ADD constraint ck_stu_sex check(sex="男"||sex="女");
alter table student add constraint ck_stu_age check(age>18&&age<50);
alter table student add constraint uk_stu_email unique(email);
alter table student modify sno int(6) auto_increment;
desc student
表的结构如图
4.注意
(1)默认值约束与非空约束,只能使用列级约束。
(2)自增约束(AUTO_INCREMENT)可以使表中某个字段的值自动增加。一张表中只能有一个自增长字段,并且该字段必须定义了约束该约束可以是主键约束、唯一约束以及外键约束),如果自增字段没有定义约束,数据库则会提示“Incorrect table definition; there can be only one auto column and it must be defined as a key”错误。
(3)由于自增约束会自动生成唯一的ID,所以自增约束通常会配合主键使用,并且只适用于整数类型。一般情况下,设置为自增约束字段的值会从1开始,每增加一条记录,该字段的值加1。