表的约束

表的完整性约束

约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:
unsigned 无符号与int等搭配
not null :非空约束,指定某列不能为空; 
unique : 唯一约束,指定某列或者几列组合不能重复
primary key :主键,指定该列的值可以唯一地标识该列记录 第一个 非空加唯一
foreign key :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
auto_increment:自增必须设置最少(unique)自带非空只能对数字有效
    设置了自增必须以一一对应的格式添加数据
    如果删除了某个数据 其他不变 自带记录
    delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。
    truncate table tl;数据量大,删除速度比上一条快,且直接从零开始,

unsigned 无符号

与int 搭配

实列

drop database day01;

create database day01;

use day01;
create table d1(
id int unsigned);

insert into d1 values(1);

not null 非空约束

不可为空

实列

drop database day01;
create database day01;
use day01;

create table d1(
    id int not null,
    name char(12),
    hobby set('抽烟','喝酒','烫头','搓脚')
 );
 
 insert into d1(id,name,hobby) values(
 1,'小强','抽烟,喝酒');

unique 唯一约束

注意
null 在mysql中 不一样
在 mysql中每次添加的null 不一样  对于mysql 数据与数据间相等就是重复 所以 就算设置了 unique 唯一 也是可以重复的

实列

create table t3(
    id int unique,
    username char(18) unique,
);

unique 联合唯一

联合唯一 ip 加端口 不可以唯一
联合唯一 不是ip不可以重复 也不是port不可以重复 而是 ip+port不可以重复

实列

create table t2(
id inta primary key,
servername char(12) not null,
ip char(15), 
port int,
unique(ip, port)
);

default默认值

create table t3(int unsigned not null default 18);

primary key 主键

primary key  主键
一张表只能有一个
如果不指定主键,默认是第一个非空+唯二
联合主键primary, key(字段1,字段2)
primary key 主键 设置
非空+唯一 第一个设置会被设置成主键
如果一张表中没有设置primary key 主键,那么第一个设置非空+唯一的字段会被设置成主键
一张表中只能有一个主键

实列

create table t4(
    id int not null unique,
    username  char(18) not null unique,     age tinyint unsigned
);

联合主键

姓名中 姓 和 名唯一

create table t14(
        id int,
        server_name char(12),
        ip char(15),
        port char(5),
        primary key(ip,port)); 

foreign 外键约束

创建时 先创被关联的 在创关联的 没有给权限 不可以更新删除(好处避免错误)
# 外键约束 : 对应外表中的字段至少是unique的,推荐使用主键作为关联字段   一变全变
基本格式
foreign key(自己的字段) references 其他表(字段)
给权限
on delete cascade 级联删除一般不设置
on update cascade 级联更新



# create table class3(
#   id int primary ,
#   cname char(12) not null unique,
#   start_date date,
#   period char(12),
#   course char(12),
#   teacher char(12)
# );
# create table student3(
#   id int primary key auto_increment,
#   name char(12) not null,
#   gender enum('male','female'),
#   cid int,
#   foreign key(cid) references class3(id) on delete cascade on update cascade
# );

自增auto_increment

自增auto_increment 
必须设置最少  unique
auto increment自带非空
只能对  数字 有效
删除了某个数据 其他不变 自带记录**
delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。
truncate table tl;数据量大,删除速度比上一条快,且直接从零开始,

不需要自己写、
只能对数字有效自带非空约束
并至少是unique的约束之后才能使用auto increment

实列

create table t20(id int primary key auto increment,
                name char (12));
设立了自增后 只可以这么写 看起来麻烦 其实不麻烦 以为数据多了 你不知道那一条
insert into t20(name, job, age, post) values
(' alex',' cto', 84, 'Iuffy ),
posted @ 2020-02-29 22:43  一起奥利给  阅读(256)  评论(0编辑  收藏  举报