列属性

空属性

学到这里突然发现一个大问题,原来创建字段时最好不要留null,会引发很多问题https://www.cnblogs.com/balfish/p/7905100.html

所以创建或添加字段时最好加上not null

MySQL学习总结(5):列属性

MySQL学习总结(5):列属性

列描述

跟注释差不多意思,最好在创建的时候就声明:

MySQL学习总结(5):列属性

当然也可以创建好后再加,但不建议这样做,因为修改该字段描述时相当于重新创建该字段:

MySQL学习总结(5):列属性

MySQL学习总结(5):列属性

默认值

同样,最好在创建时就设置:

MySQL学习总结(5):列属性

当然也可以创建好后修改:

MySQL学习总结(5):列属性

以下为例子:

创建好my_set后,有两个字段data1和data2,其中data1的默认值为0:

MySQL学习总结(5):列属性

data2没有默认值

MySQL学习总结(5):列属性

向data2插入数据后发现data1用了默认值

MySQL学习总结(5):列属性

主键

接下来区分几个概念:

超码是用来唯一区分各行的字段(的集合),候选码是最小的超码(即最少的可以构成超码的字段集合),而主码即主键就是程序员选择的候选码(因为候选码可能不止一个)

添加主键

在设置新表时创建:

1. 在最后加primary key(字段名集合)

MySQL学习总结(5):列属性

MySQL学习总结(5):列属性

可见主键会被默认置非空

(插个题外话:刚好上网查了一下发现sublime也可以编辑sql并运行https://www.jianshu.com/p/bd77910e4d2e?from=jiantop.com,这样就不用在命令行这么麻烦啦)

这种创建方法的好处是可以创建复合键,即多个字段组合来区分各行:

MySQL学习总结(5):列属性

MySQL学习总结(5):列属性

2. 在字段后面加primary key:

MySQL学习总结(5):列属性

但这种方法的缺点是只能指定一个字段为主键

创建后再设定主键:

3. alter table 表名 add primary key(字段名);  --这种方法也可以创建复合主键

MySQL学习总结(5):列属性

注意,对于任何方式创建主键,只能是之前没有主键的才可以这样做,即主键一旦创建过就不能再增添了

主键约束:

不同行的主键必须不同,这样主键才起到区分作用,因此若同一个主键有相同的值会报错,这里就不贴图了

删除主键:

想要更新主键(对应的那个字段),必须先删除主键属性才能操作:

alter table 表名 drop primary key;

MySQL学习总结(5):列属性

MySQL学习总结(5):列属性

自动增长

自动增长是一个跟日期时间类型中timestamp类型一样神奇的类型,因为它会自动增长,即

auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值。

自增长通过跟主键进行搭配使用,其特点为:

  • 任何字段要做自增长,前提其本身必须是一个索引,即key栏有值;
  • 自增长字段必须是数字(整型);
  • 每张表最多有一个自增长字段。

使用自增长:

MySQL学习总结(5):列属性

并且可以通过show create table 表名查看下一次的增长值是什么

MySQL学习总结(5):列属性

修改自增长:

即修改下次的值:

alter table 表名 auto_increment = 值;

但注意,只有当这个值比当前的值大时才会生效,否则不生效

MySQL学习总结(5):列属性

(不仅感叹一句看着sublime的五颜六色心里好爽)

这里我们看到自增长是从1开始的,并且增量是1,而这两个值是可以改变的:

MySQL学习总结(5):列属性

修改增量为3,初始值为2:

MySQL学习总结(5):列属性

但我发现这跟说好的不一样,,,因为修改auto_increment_offset无效,不知道为什么,所以就还是用alter table的方式来修改初始值了,再次创建表来验证:

MySQL学习总结(5):列属性

注意这个set的修改是会话级别的,意思就是当次命令行有效,关掉后再开的话就不行了,而且修改的是整个数据库

删除自增长:

因为自增长是列属性,所以通过modify的方式删除,有个坑就是不能再写primary key,否则报错,应这样删除:

MySQL学习总结(5):列属性

 

相关文章: