空属性约束
mysql有空属性和非空属性:null和not null
数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算
所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。这就是“约束”
-- 创建一个名为students的表
create table students (
student_id int not null,//设置not null非空字段
);
此时如果插入数据时没有给student_id 插入,就会报错。
列描述
comment,没有实际含义,专门用来描述字段,会根据表创建语句保存
create table students (
-> name varchar(20) not null comment '姓名',
-> age tinyint unsigned default 0 comment '年龄',
-> sex char(2) default '男' comment '性别'
-> );
通过desc查看不到注释信息,通过show可以看到:
show create table students \G
使用 \G 后,结果将以垂直方式显示,每列的名称和值将各占一行:
zerofill
它用于在显示数值类型的列时,将数值前面的空位用零填充,以达到指定的位数。
这时候筛选出来的就是填充后的数字,若想看到真实存储的可以用:
select age , hex(age) from students;
默认值(Default)
某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值
-- 创建一个名为students的表
create table students (
student_id int default 0,//默认值
sex char(2) default '男'
);
给一个已创建的表修改默认值:
alter table students alter column student_id set default '2';
主键约束
可以想象一个学生信息表,其中每个学生都有一个唯一的学生ID。这个学生ID就可以作为主键。主键约束防止两个学生具有相同的学生ID,确保每个学生都有一个唯一的身份。
总而言之,主键约束就是一种规则,要求表中的某个列(或多个列)具有唯一且不为空的值,以标识和区分表中的每个记录。
不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型
创建表的时候添加主键约束:
-- 创建一个名为students的表
create table students (
student_id int primary key,//主键约束
name varchar(50),
age int
);
创建表最后再添加:
create table students (
student_id int ,//主键约束
name varchar(50),
age int
primary key(student_id)
);
给创建好的表添加主键:
alter table students add primary key(student_id );
删除主键:
alter table students drop primary key ;
复合主键
mysql> create table students (
-> id int unsigned,
-> course char(10) comment '课程代码',
-> primary key(id, course) // id和course为复合主键
-> );
创建表后插入复合主键:
alter table students add primary key(id,class);
自增长
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。
比如新创建的auto_num:
可以看见auto_num并没有插入数据,但他会随着id,class的列增长而自增长。
唯一键
如果主键是每个人的身份证,那唯一键就可以认为是准考证号
唯一键更多的是针对某一种业务,比如上述例子就是在“考试”这个业务。
mysql> create table students (
-> id char(10) unique comment '学号,不能重复,但可以为空',
-> name varchar(10)
-> );
唯一键不能重复,但是可以为null值
外键
外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接
外键是针对从表来说的:
创建stu的外键,这个外键是myclass的主键(直接添加):
create table myclass (
class_id int primary key,
name varchar(30) not null comment'班级名'
);
create table stu (
stu_id int primary key,
name varchar(30) not null comment '学生名',
class_id int,
foreign key (class_id) references myclass(id)
);
也可以创建以后再进行添加:
alter table test add foreign key (class) references students(id);