mysql添加构成组合约束_mysql 对约束的操作

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

约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。

常用五类约束:

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

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

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

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

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

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

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

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

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

1、not null

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

Null类型特征: 所有的类型的值都可以是null,包括int、float等数据类型 空字符串””是不等于null,0也不等于null

create table temp(

idint not null,

name varchar(255) not null default‘abc’,

sexchar null)

//上面的table加上了非空约束,也可以用alter来修改或增加非空约束

//增加非空约束

alter table temp modify sex varchar(2) not null;

//取消非空约束

alter table temp modify sex varchar(2) null;

//取消非空约束,增加默认值

alter table temp modify sex varchar(2) default ‘abc’;

2、unique

唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。虽然唯一约束不允许出现重复的值,但是可以为多个null,同一个表可以有多个唯一约束,多个列组合的约束。在创建唯一约束的时候,如果不给唯一约束名称,就默认和列名相同。 MySQL会给唯一约束的列上默认创建一个唯一索引;

create table temp (

idint not null,

name varchar(25),

password varchar(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 tempdrop index name;

3、primary key

主键约束相当于唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值;如果的多列组合的主键约束, 那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别上创建。

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

//列模式:

create table temp(

idintprimary key,

name varchar(25)

);

create table temp2(

idint not null,

name varchar(25),

pwd varchar(15),

constraint pk_temp_id primary key(id)

);//组合模式:

create table temp2(

idint not null,

name varchar(25),

pwd varchar(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 tempmodify id intprimary key;//设置主键自增

create table temp(

idintauto_increment primary key,

name varchar(20),

pwd varchar(16)

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

4、foreign key

外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。 也就是说从表的外键值必须在主表中能找到或者为空。 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数据, 然后才可以删除主表的数据。还有一种就是级联删除子表数据。

注意:外键约束的参照列,在主表中引用的只能是主键或唯一键约束的列,假定引用的主表列不是唯一的记录, 那么从表引用的数据就不确定记录的位置。同一个表可以有多个外键约束。

创建外键约束:

//主表create tableclasses(

idint auto_increment primary key,

namevarchar(20)

);//从表create tablestudent(

idintauto_increment,

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

classes_idint referencesclasses(id)

);//通常先建主表,然后再建从表,这样从表的参照引用的表才存在。

//表级别创建外键约束:create tablestudent(

idint auto_increment primary key,

namevarchar(25),

classes_idint,foreign key(classes_id) referencesclasses(id)

);//上面的创建外键的方法没有指定约束名称,系统会默认给外键约束分配外键约束名称,命名为student_ibfk_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_ibfk_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,前者是级联删除,后者是将从表的关联列的值设置为null。create 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);

5、index(索引)

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

//索引的创建[]的内容可以省略

方法一:在创建表时给字段添加索引

mysql> create tablestudent(-> id int primary keyauto_increment,-> name char(10),-> age int,-> index [index_name](name[length]) //给name字段添加索引->);

Query OK,0 rows affected (0.02sec)

方法二:给已经创建好的字段添加索引

mysql>alter student add index [index_name] on (name[length]);//给student表的name字段添加索引(其中length是对name数据串的指定长度添加索引)

方法三:

mysql>create index [index_name] on student(name[length]);//同方法二

声明:以上内容摘自http://blog.csdn.net/kqygww/article/details/8882990

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页

打赏

weixin_39894932

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者