mysql设置约束大于0_MySQL约束

MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息;

常用5种约束:

not null: 非空约束,指定某列不为空

unique:  唯一约束,指定某列和几列组合的数据不能重复

primary key:  主键约束,指定某列的数据不能重复、唯一

foreign key:  外键,指定该列记录属于主表中的一条记录,参照另一条数据

check: 检查,指定一个表达式,用于检验指定数据

MySQL不支持check约束,但可以使用check约束,而没有任何效果;

根据约束数据列限制,约束分为:

单列约束:每个约束只约束一列

多列约束:每个约束约束多列数据

一、not null约束

非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。

Null类型特征:

所有的类型的值都可以是null,包括int、float 等数据类型

create table temp(

idint not null,

namevarchar(255) not null default 'abc',

sexchar null)//上面的table 加上了非空约束,也可以用alter来修改或增加非空约束//增加非空约束alter table tempmodify sexvarchar(2) not null;//取消非空约束alter table temp modify sex varchar(2) null;//取消非空约束,增加默认值alter table temp modify sex varchar(2) default 'abc' null;

二、unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。

唯一约束不允许出现重复的值,但是可以为多个null。

同一个表可以有多个唯一约束,多个列组合的约束。

在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。

唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。

MySQL会给唯一约束的列上默认创建一个唯一索引;

create table temp(

idint not null,

namevarchar(25),

passwordvarchar(16),--使用表级约束语法

constraint uk_name_pwd unique(name, password)

);//表示用户名和密码组合不能重复//添加唯一约束alter table temp add unique(name, password);alter table temp modify name varchar(25) unique;//删除约束alter table temp drop index name;

三、primary key

主键约束相当于   唯一约束 + 非空约束  的组合,主键约束列不允许重复,也不允许出现空值。

每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。

当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。

MySQL的主键名总是PRIMARY。

//列模式create table temp(/*主键约束*/idint primary key,

namevarchar(25)

);create tabletemp2(

idint not null,

namevarchar(25),

pwdvarchar(15),constraint pk_temp_id primary key(id)

);//组合模式create tabletemp2(

idint not null,

namevarchar(25),

pwdvarchar(15),constraint pk_temp_id primary key(name, pwd)

);//alter删除主键约束alter table temp drop primary key;//alter添加主键约束alter table temp add primary key(name, pwd);//alter修改列为主键alter table temp modify id int primary key;//设置主键自增create table temp(

idint auto_increment primary key,

namevarchar(20),

pwdvarchar(16)

);//auto_increment自增模式,设置自增后插入数据的时候就不需要给该列插入值了。

四、foreign key约束

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系

//创建外键约束//主表create tableclasses(

idint auto_increment primary key,

namevarchar(20),

);//从表create tablestudent(

idintanto_increment,

namevarchar(22),constraint pk_id primary key(id),

classes_idint referencesclass(id)

);//通常先建主表,然后再建从表,这样从表的参照引用的表才存在//表级别创建外键约束:create tablestudent(

idint auto_increment primary key,

namevarchar(25),

classes_idint,foreign key (classes_id) referencesclasses(id)

);//上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_idfk_n

其中student是表名, n是当前约束从1开始的整数//指定约束名称create tablestudent(

idint auto_increment primary key,

namevarchar(25),

classes_idint,/*指定约束名称*/

constraint fk_classes_id foreign key(classes_id) referencesclasses(id)

);//多列外键组合,必须用表级别约束语法create tableclasses(

idint,

namevarchar(20),number int,primary key(name,number)

);create tablestudent(

idint auto_increment primary key,

namevarchar(20),

classes_namevarchar(20),

classes_numberint,/*表级别联合外键*/

foreign key(classes_name, classes_number) references classes(name, number)

);//删除外键约束alter table student drop foreign keystudent_idfk_1;alter table student drop foreign keyfk_student_id;//增加外键约束alter table student add foreign key(classes_name, classes_number) references classes(name, number);//自引用、自关联(递归表、树状表)create tabletree(

idint auto_increment primary key,

namevarchar(50),

parent_idint,foreign key(parent_id) referencestree(id)

);//级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on delete cascade或on delete set null, 前者是级联删除,后者是将从表的关联列的值设置为nullcreate tablestudent(

idint auto_increment primary key,

namevarchar(20),

classes_namevarchar(20),

classes_numberint,/*表级别联合外键*/

foreign key(classes_name, classes_number) references classes(name, number) on delete cascade);

五、check约束

MySQL可以使用check约束,但check约束对数据验证没有任何作用。

create table temp(

idintauto_increment,

namevarchar(20),

ageint,primary key(id),/*check约束*/

check(age > 20)

);//上面check约束要求age必须大于0,但没有任何作用。创建table的时候没有任何错误或警告。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值