十一、mysql中数据表的字段(列)的属性(约束)详解

1、列属性定义及分类

列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,所以需要一些额外的约束,来更加保证数据的合法性。
列属性主要分为:null/not null、default、primary key、unique key、auto_increment、comment。下面依次进行介绍。

2、null和not null属性

虽然数据库在插入数据时(当使用插入特定字段的数据时),其他字段的值都是默认为空的,但是在实际的开发中,我们还是要尽量避免出现空字段,一者,空字段毫无意义,再者,空字段也无法参与运算。
而在具体的设置方面,null表示允许字段为空,这是数据库默认的,而not null表示不允许字段为空,需要自己设置,详细如下:

字段名 字段类型 not null   --不允许字段为空
字段名 字段类型            --允许字段为空 

实例:创建my_class表格,然后向其中插入数据
实例1
解析:所创建的表中,c_name不允许为空,而c_num字段允许为空,所以在最后插入数据时,出现错误,而前面几次都可以插入进去。

3、default属性

此属性可以用来指定默认值,也就是说提前将该字段的值指定为某个值,如果用户传入了新的值,就把该值覆盖,如果用户插入数据时未向该字段传入值或者传入default时,就使用默认值。
实例:

alter table my_class modify c_name varchar(5) not null default '一一班';--修改上面表my_class的字段属性的默认值为一一班

向其中插入数据:
插入
在这里插入图片描述
解析:第一次插入数据时,由于不允许为空的字段(c_name)插入了null,所以导致出错;第二次插入数据时,使用了“default”关键字,所以直接使用默认值;第三次未向默认字段传值,所以结果为默认值;第四次使用用户传入的值,结果改为用户传入的值;以上的几次结果由最后的查询结果易知。

4、primary key(主键)属性

  1. 主键:唯一标识记录的键值,在一张表中键值不能重复且不能为null(空)。
  2. 主键约束:一张表中,被设为主键的字段的值不能重复,一旦重复,那么次条记录将无法插入数据表中,在修改时会修改失败。
  3. 添加主键的方法:
    1. 在创建表时,直接在相应字段后跟primary key即可,例如:c_id primary key;这种方法的优点是非常直接,缺点是只能使用一个字段作为主键;
    2. 在创建表时,在最后使用primary key(字段列表)来创建主键,优点是可以创建多个字段作为复合主键;实例:
        create table if not exists my_class(
            c_id mediumint auto_increment,
            c_name varchar(10),
            c_num  tinyint,
            primary key(c_id,c_name)
            );  --c_id和c_name作为复合主键     
    
    1. 当表已经创建好后(创建时未设置主键字段),再次额外追加主键,可以通过修改表字段属性,也可以通过追加列的方式进行性;详情如下:
     alter table 表名 modify 字段名 字段类型 其他约束条件 primary key;  --修改表字段属性进行
     alter table 表名 add primary key(主键字段列表); --追加primary key列的方式进行
     --假设my_class表创建时未设置主键,现将c_id设为主键
     alter table my_class modify c_id mediumint auto_increment primary key;  --方式一
      --假设my_class表创建时未设置主键,现将c_id和c_name设为主键
      alter table my_class add primary key(c_id,c_name);--方式二
  1. 主键一旦设置完成后,就无法直接进行修改,只能先将原来的主键删除后,再添加新的主键,删除主键的基本语法:alter table 表名 drop primary key;,然后在添加新的主键即可,添加主键方法前面已经介绍过,在此不再说明。实例:
    alter table my_class drop primary key; --删除表my_class的主键(注意,自增长的列必须被定义为key,所以先修改主键所在字段的属性,去掉自增(auto_increment)特性),再执行此语句删除主键,然后添加新的主键。
  1. 主键的分类:在实际应用中,很少使用真实的业务数据作为主键字段,大部分时候使用逻辑性字段充当主键(字段没有业务含义,值是什么都可以,比如整型的自增字段),将这种字段的主键成为逻辑主键。实例如下(可以使用comment来添加字段的说明):
create table if not exists my_student(
      id int primary key auto_increment comment '逻辑主键,自增长',
      sno char(10) not null comment '学号',
      sname varchar(20) comment '姓名'
);

5、auto_increment属性

前面的实例已经使用过很多次这个属性了,我们也可以看到(实际上也确实如此)此属性经常是和primary key属性搭配使用的,自增长的特点如下:

  1. 任何一个字段要设为自增长,那么其必须为一个索引,也就是说查看其字段信息时,key一栏要有值;
  2. 自增长字段必须是数值类型,不能为字符串和时间日期类型;
  3. 一张表,最多只能有一个字段被设为自增长;
  4. 自增长的第一个元素是1,也就是说其是从1开始增长的;
  5. 自增长每次增长1;
  6. 如果自增长对应的字段输入了值,那么自增长失效,该字段直接更新为指定的值(如果值大于表中所有已有的值,则添加到最后,如果传入0,则和不传的效果一样),如果下次没有指定值,那么自增长将在指定值的基础上继续加1自增长。
  7. 可以通过查看表的创建语句去查看下一次自增长的具体值:基本语法:show create table 表名;

修改自增长:由于一张表最多只能有一个自增长字段,所以想要修改自增长的字段,只能先删除原来字段的自增长特性,然后给目标字段再添加自增长特性;而如果修改当前自增长字段已有的值时,新的值只能比已有的值的最大值还要大,如果小于或等于最大值,则修改不生效,且修改完成后,修改的哪一个记录将会被放到记录的最后一条。修改自增长的初始值的语法:alter table 表名 auto_increment = 值;
查看mysql中用于自增长的变量的基本语法(自增长对应的变量):show variables like 'auto_increment%';
修改自增长步长的基本语法:set auto_increment = 5;这个修改是针对整个数据进行修改,而不是单张表,修改是会话级别的(也就是说当前会话的所有数据都适用)。
对于自增长属性的删除,则可以通过modify关键字来进行(保证字段没有auto_increment即可);基本语法:

alter table 表名 modify 字段名 类型 列属性;  --这里一定不能出现自增长auto_increment,以及当表中已有主键时绝对不能加primary key

6、unique key(唯一键)属性

一张表中往往有很多字段要求数据不能重复(数据唯一),但是一张表中只能有一个主键,所以这里引入了唯一键的属性,就可以很好的解决这个问题。唯一键与主键类似,两者不同的地方在于唯一键允许值为null,且空字段可重复(因为空字段不参与重复性比较),且一张表中可以有多个唯一性约束。
增加唯一键的方法有以下几种:

一、在创建表时添加
基本语法:字段名 类型 unique key
二、在创建表时,在最后添加
基本语法:unique key(字段1,...,字段n)
三、在创建表后添加唯一键
方法一:alter table 表名 modify 列名 类型 unique key[其他列属性];
方法二:alter table 表名 add unique key(字段1,...,字段n);

当向表中添加了唯一约束后,在查看表中的字段信息时,如果发现设为唯一键的字段的key值为PRI(主键)的原因是本字段刚好是一个不为空的唯一键,但究其根本原因,还是因为表中没有定义主键导致的。
唯一键约束:唯一键的本质与主键相同,唯一的区别就是唯一键允许为空,而且是多个为空,如果唯一键字段也设置为not null,那么其约束作用和主键相同。
唯一键的更新和删除:先删除后再更新(可以不删除,如果需要修改唯一键的约束字段,则必须删除),删除唯一键的基本语法如下:

alter table 表名 drop index 索引名字;   --唯一键默认使用字段名作为索引名,故此也可以写成以下形式
alter table 表名 drop index 添加唯一键的那个字段的字段名;
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值