约束条件

Posted z18271397173

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约束条件相关的知识,希望对你有一定的参考价值。

一、介绍

约束条件与数据类型的宽度一样,都是可选参数

作用:用于保证数据的完整性和一致性
主要分为:

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL    标识该字段不能为空
UNIQUE KEY (UK)    标识该字段的值是唯一的
AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT    为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充
说明:

1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum(‘male‘,‘female‘) not null default ‘male‘
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key
外键 foreign key
索引 (index,unique...)

约束条件&not null&default

not null 与 default
是否可空,null表示空,非字符串
not null - 不可空
null - 可空 not null 示例: create table student( id int primary key auto_increment, 主键递增 name char(5), sex enum(‘male‘,‘female‘) not null ); insert into student(name,sex) values(‘alex‘,NULL) 插入成功,性别为空 需要限制,不能为空 sex enum(‘male‘,‘female‘) not null not null就是约束条件 insert into student(name,sex) values(‘alex‘,null) 报错,因为不能空了 default 示例: create table student( id int primary key auto_increment, 主键递增 name char(5), sex enum(‘male‘,‘female‘) , 默认值就是左边第一个 age int ); insert into student(name) values(‘alex‘); 查看的效果就是除了名字后面都是NULL sex enum(‘male‘,‘female‘) not null; 有默认参数,默认时第一个参数,还是从左边开始 sex enum(‘male‘,‘female‘) not null default ‘female‘; 修改默认值 insert into t1(name) values(‘alex‘); 就会看到,sex这块默认是female age int not null 加上这个,不为空,默认值是0 age int not null default 30 不为空,默认值30

 unique 唯一

示例
    #单列唯一
    create table teacher(
    id int not null unique,  有值且唯一,这样写相当于主键
    name char(10)
    );
    insert into teacher values(1,‘egon‘);
    insert into teacher values(1,‘alex‘);
    插入报错,因为ID是唯一

#多列唯一
    #255.255.255.255  IP地址最大的状态
    create table services(
    id int primary key auto_increment,
    name char(10),
    host char(15),
    port int,
    constraint host_port unique(host,port)
    );
    constraint 约束的意思,host_port 别名  unique(host,port) 表示这2个字段加起来都是唯一的,联合唯一
    insert into services values(‘ftp‘,‘192.168.20.17‘,8080);
    insert into services values(‘httpd‘,‘192.168.20.17‘,8081);

primary key  唯一
    create table t8(x int,y int,primary key(x,y));
    查看显示2个主键,其实是一个,是x,y和起来的主键
    insert into t1 values(1,2);
    insert into t1 valyes(1,3)  都不会报错,除非是插入后,在插入相同的就会报错了,x,y主键是合起来的

 foreign key

技术分享图片

示例  部门信息
    #先建被关联的表,并且被关联的字段必须唯一
    create table dep(
    id int primary key auto_increment,      不为空,唯一,主键
    department varchar(50),
    comment varchar(100)
    );

    #在创建关联的表  员工信息
    create table emp_info(
    id int primary key auto_increment,
    name varchar(20),
    dep_id int,
    constraint(约束) fk_depid_id foreign key(dep_id) references dep(id)   让员工关联部门
    on delete cascade  不需要先删除/修改被关联的表内容,后面没有逗号 和上面是一行
    on update cascade
    );
    foreign key(dep_id) references dep(id)  创建关联,dep_id自己的字段,references引用关联,dep表的字段
    constraint fk_depid_id 起个别名,跟unique一样

#插入数据 #先给被关联的表插入数据 insert into dep values (1,‘欧德博爱技术有限事业部‘,‘说的好‘), (2,‘艾利克斯人力资源部‘,‘招不到人‘), (3,‘销售部‘,‘卖不出东西‘); #再给关联的表插入数据 insert into emp_info values (1,‘egon‘,1), (2,‘alex1‘,2), (3,‘alex2‘,2), (4,‘alex3‘,2), (5,‘李坦克‘,3), (6,‘刘飞机‘,3), (7,‘张火箭‘,3), (8,‘林子弹‘,3), (9,‘加特林‘,3);
#删除操作 delete update delete from dep where id=2; 先删除被关联表 delete from emp_info where dap_id=2; 才能删除关联表 update user set uid=10 where uid=2; 修改关联表,关联表有修改,但是被关联表没有被修改 on delete cascade on update cascade 被关联的表删除或是修改,关联的表也会随之删除或是修改,这才合理 drop batle t1;删除表的时候,应该先删除被关联表,在删除关联表

  

技术分享图片

 

技术分享图片

 

 

 






以上是关于约束条件的主要内容,如果未能解决你的问题,请参考以下文章

条件片段和导航重用

活动中 TabLayout 内的片段的约束问题

4.3 合并重复的条件执行片段

如何有条件地将 C 代码片段编译到我的 Perl 模块?

自动刷新android片段,直到满足条件

iOS 在xib或者storyboard中添加AutoLayout后,在代码中修改AutoLayout约束条件