vlambda博客
学习文章列表

MySQL之列属性,看这一篇就够了

今天对关于mysql数据库的学习做一总结,我们都知道其实真正约束字段的是字段的数据类型,但数据类型的约束又很单一,只规定该字段放什么数据以及数据大小,不能规定额外的第三方信息,可我们又有其他需求,这时就需要一些额外的约束来更加保证数据的合法性。呢么今天,我就为大家简单介绍一下关于mysql数据库的列属性(也就是字段属性)

列属性

1. NULL :

该字段数据可为空 (默认)实际开发时尽可能保证所有数据不为空,因为空数据无意义且不可参与运算,占用一个字节

2. NOT NULL :

该字段数据不能为空

3.DEFAULT :

当我们实际应运时会发现某一种数据会经常性的出现某个具体值,这时我们就可以一开始指定好默认值(比如一个公司员工工资都是8k,呢我们在员工工资这一字段就可以设置 default 8000);而在需要真实数据时,用户可以选择性使用默认值,也可以填充实际数据(比如这时有个高管,工资20k,插入数据时就可以直接写20000)。(使用默认值可在插入数据时在有默认值字段不插数据或使用default关键字)

字段名 数据类型 default 默认值;
insert into 表名 values (default);

4. PRIMARY :

主键:primary key ,主要的键,一张表中只能有一个字段可以使用对应的键,(用来唯一约束该字段里面的数据,不可重复)

一张表中只能最多有一个主键,且主键不可为空

增加主键:

  1. 创建表时直接在字段之后跟primary key关键字
   字段名 数据类型  primary key;
  • 优缺点:直接了当但只能使用一个字段作为主键
  1. 创建表时,在所有字段之后,使用 primary key(主键字段列表) 来创建主键,如果有多个字段作为主键,可以是复合主键
primary key(用来作为主键的字段);
  1. 当表创建好之后通过修改字段属性追加或直接添加。(前提是该字段数据必须无重复)
alter table 表名 modify 字段名 数据类型 primary key
alter table 表名 add primary key(字段列表);

主键约束:

  1. 主键对应字段中的数据不允许重复,一旦重复,数据操作失败(增和改)
  2. 复合主键只要满足其组合主键不一致即可,若组合主键相同则冲突(主键列表中数据不可全相同)
  3. 主键更新/删除:想要更新主键必须先删除原有主键之后才可新建(所以所谓的主键更新实际上是删除原来的主键之后重新再定义主键。)
 alter table 表名 drop primary key

主键分类:

在实际创建表的过程中,很少使用真实业务数据作为主键字段(业务主键例如学号,课程号)大部分时候使用逻辑性的字段(字段无意义,值是什么都可以)将这种字段主键称之为逻辑主键(即主键可分为逻辑主键业务主键

5. UNIQUE KEY :

一张表中往往有很多字段需要具有唯一性,数据不可重复,但一张表中只能有一个主键,此时,唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题。

唯一键本质与主键差不多,唯一键默认的允许自动为空且可以多个为空(空字段不参与唯一性比较)
当系统发现没有主键时会使用唯一键代替主键作用(唯一键字段不为空)

5.1 增加唯一键:

  1. 在创建表时,字段之后直接跟
 字段名 数据类型 unique/ unique key
  1. 在所有字段之后跟
unique key(字段列表);//复合唯一键
  1. 创建表之后再添加唯一键:
 alter table 表名 add unique key (字段名)

5.2  唯一键约束:
与主键本质相同;唯一区别就是唯一键默认允许为空且多个为空(允许为空),若唯一键字段不允许为空,则与主键的约束作用一致

5.3 唯一键更新/删除:
同主键,更新唯一键也需要先删除后新建(针对于同一字段,因为系统认为唯一键只是普通索引)

 alter table 表名 drop index 索引名(唯一键字段名)

6. AUTO_INCREMENT :

  1. 当对应的字段不给值或者为默认值,NULL时,会自动被系统触发,系统会从当前字段中已有的最大值进行 +1 操作,得到一个新的不同的字段,既能保证数据变化又不需要人工操作,通常与主键搭配
  2. 任何一个字段要做自增长前提必须自身是一个索引(key栏有值)
  3. 自增长字段必须是整型数值字段(int)
  4. 一张表最多只能有一个自增长
 字段名 整型数据类型 primary key auto_increment;

自增长使用:

当自增长被给定的值为默认值或NULL时会触发自动增长,自增长第一个元素默认为1,且每次自增 1 ,若自增长对应的字段输入了值则自增长失效,下次重新在最大值 +1 进行增长

增加自增长:

当表创建完成后如果要给字段添加自增长

 alter table 表名 modify 字段名 数据类型 auto_increment;

修改自增长:

自增长如果涉及到字段改变,必须先删除自增长,后增加。修改当前自增长已经存在的值时,只能修改比当前已有的自增长的最大值大,小的话无效

alter table 表名 auto_increment = 值;

在这里我们简单介绍一下关于自增长的修改操作,但是没啥意义,就全当扩展内容:

在数据库中,所有系统的表现(字符集,校对集)都是由系统内部的变量进行控制,我们可以通过命令来查看这些变量,(此处针对于自增长来查看)

查看自增长对应变量:

show variables like ‘auto_increment%’;

修改变量是对整个数据库修改而不是单个表,但此修改为会话级修改:

   set auto_increment_increment = n; //一次自增变量为n

删除自增长:

自增长为字段属性,可通过modify进行修改(保证字段没有auto_increment)

 Alter table 表名 modify 字段名 数据类型;(有主键时不可添加主键)

7.COMMENT :

列描述,无实际含义,专门用来描述字段,会根据表创建语句保存;使用 show create table 表名;进行查看,类似于注释。

 字段名 数据类型 comment ‘描述’;

索引

最后我们对索引做一简单介绍:

  1. 几乎所有的索引都是建立在字段之上
  2. 系统根据某种算法,将已有的数据(未来可能新增的数据)单独建立一个文件,文件能够实现快速的匹配数据,并且快速的找到对应表中的记录
  3. 数据库在查询数据时先取出一条数据进行匹配,不匹配就再取一条数据进行匹配,直到匹配成功之后还会继续取数据进行匹配,也就是整表索引,这样会使数据查询效率极低;当增加索引后,数据库会先在索引文件中找,找到索引文件后系统告诉数据库该数据在磁盘中哪一行,然后直接在该行找到需要查询的数据

索引的意义

1.提升查询数据的效率
2.约束数据的有效性(唯一性等)

增加索引的前提条件:

索引本身会产生索引文件(有可能比数据文件还大)会非常耗费磁盘空间,可看作效率与磁盘空间的比例。视情况而定。
若某字段需要作为查询条件经常使用则可以使用索引(一定要想办法增加索引来提升效率);
若某字段需要进行数据的有效性约束,也可能使用索引(主键,唯一键)

mysql提供的索引:

1.主键索引:primary key
2.唯一索引:unique key
3.全文索引:fulltext index
4 普通索引:index
删除唯一索引时按照普通索引来做(drop index)
5.全文索引:针对文章内部的关键字进行索引,最大弊端在于如何确定关键字(英文容易:英文单词之间有空格;中文难:无空格且中文可以随意组合(需要分词:sphinx))


好了,到这里我们今天对于mysql数据库的列属性的简单介绍就完了,如有纰漏,可以在评论区留言。