列属性
空属性
学到这里突然发现一个大问题,原来创建字段时最好不要留null,会引发很多问题https://www.cnblogs.com/balfish/p/7905100.html
所以创建或添加字段时最好加上not null
列描述
跟注释差不多意思,最好在创建的时候就声明:
当然也可以创建好后再加,但不建议这样做,因为修改该字段描述时相当于重新创建该字段:
默认值
同样,最好在创建时就设置:
当然也可以创建好后修改:
以下为例子:
创建好my_set后,有两个字段data1和data2,其中data1的默认值为0:
data2没有默认值
向data2插入数据后发现data1用了默认值
主键
接下来区分几个概念:
超码是用来唯一区分各行的字段(的集合),候选码是最小的超码(即最少的可以构成超码的字段集合),而主码即主键就是程序员选择的候选码(因为候选码可能不止一个)
添加主键
在设置新表时创建:
1. 在最后加primary key(字段名集合)
可见主键会被默认置非空
(插个题外话:刚好上网查了一下发现sublime也可以编辑sql并运行https://www.jianshu.com/p/bd77910e4d2e?from=jiantop.com,这样就不用在命令行这么麻烦啦)
这种创建方法的好处是可以创建复合键,即多个字段组合来区分各行:
2. 在字段后面加primary key:
但这种方法的缺点是只能指定一个字段为主键
创建后再设定主键:
3. alter table 表名 add primary key(字段名); --这种方法也可以创建复合主键
注意,对于任何方式创建主键,只能是之前没有主键的才可以这样做,即主键一旦创建过就不能再增添了
主键约束:
不同行的主键必须不同,这样主键才起到区分作用,因此若同一个主键有相同的值会报错,这里就不贴图了
删除主键:
想要更新主键(对应的那个字段),必须先删除主键属性才能操作:
alter table 表名 drop primary key;
自动增长
自动增长是一个跟日期时间类型中timestamp类型一样神奇的类型,因为它会自动增长,即
auto_increment,当对应的字段,不给值,或者是默认值,或者是null的时候,就会自动的被系统触发,系统会从当前字段中取已有的最大值再进行+1操作,得到新的字段值。
自增长通过跟主键进行搭配使用,其特点为:
- 任何字段要做自增长,前提其本身必须是一个索引,即
key栏有值; - 自增长字段必须是数字(整型);
- 每张表最多有一个自增长字段。
使用自增长:
并且可以通过show create table 表名查看下一次的增长值是什么
修改自增长:
即修改下次的值:
alter table 表名 auto_increment = 值;
但注意,只有当这个值比当前的值大时才会生效,否则不生效
(不仅感叹一句看着sublime的五颜六色心里好爽)
这里我们看到自增长是从1开始的,并且增量是1,而这两个值是可以改变的:
修改增量为3,初始值为2:
但我发现这跟说好的不一样,,,因为修改auto_increment_offset无效,不知道为什么,所以就还是用alter table的方式来修改初始值了,再次创建表来验证:
注意这个set的修改是会话级别的,意思就是当次命令行有效,关掉后再开的话就不行了,而且修改的是整个数据库
删除自增长:
因为自增长是列属性,所以通过modify的方式删除,有个坑就是不能再写primary key,否则报错,应这样删除: