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 ,主要的键,一张表中只能有一个字段可以使用对应的键,(用来唯一约束该字段里面的数据,不可重复)
一张表中只能最多有一个主键,且主键不可为空
增加主键:
-
创建表时直接在字段之后跟primary key关键字
字段名 数据类型 primary key;
-
优缺点:直接了当但只能使用一个字段作为主键
-
创建表时,在所有字段之后,使用 primary key(主键字段列表) 来创建主键,如果有多个字段作为主键,可以是复合主键
primary key(用来作为主键的字段);
-
当表创建好之后通过修改字段属性追加或直接添加。(前提是该字段数据必须无重复)
alter table 表名 modify 字段名 数据类型 primary key;
alter table 表名 add primary key(字段列表);
主键约束:
-
主键对应字段中的数据不允许重复,一旦重复,数据操作失败(增和改) -
复合主键只要满足其组合主键不一致即可,若组合主键相同则冲突(主键列表中数据不可全相同) -
主键更新/删除:想要更新主键必须先删除原有主键之后才可新建(所以所谓的主键更新实际上是删除原来的主键之后重新再定义主键。)
alter table 表名 drop primary key;
主键分类:
在实际创建表的过程中,很少使用真实业务数据作为主键字段(业务主键例如学号,课程号)大部分时候使用逻辑性的字段(字段无意义,值是什么都可以)将这种字段主键称之为逻辑主键(即主键可分为逻辑主键
和业务主键
)
5. UNIQUE KEY :
❝一张表中往往有很多字段需要具有唯一性,数据不可重复,但一张表中只能有一个主键,此时,唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题。
唯一键本质与主键差不多,唯一键默认的允许自动为空且可以多个为空(空字段不参与唯一性比较)
❞
当系统发现没有主键时会使用唯一键代替主键作用(唯一键字段不为空)
5.1 增加唯一键:
-
在创建表时,字段之后直接跟
字段名 数据类型 unique/ unique key
-
在所有字段之后跟
unique key(字段列表);//复合唯一键
-
创建表之后再添加唯一键:
alter table 表名 add unique key (字段名)
5.2 唯一键约束:
与主键本质相同;唯一区别就是唯一键默认允许为空且多个为空(允许为空),若唯一键字段不允许为空,则与主键的约束作用一致
5.3 唯一键更新/删除:
同主键,更新唯一键也需要先删除后新建(针对于同一字段,因为系统认为唯一键只是普通索引)
alter table 表名 drop index 索引名(唯一键字段名)
6. AUTO_INCREMENT :
-
当对应的字段不给值或者为默认值,NULL时,会自动被系统触发,系统会从当前字段中已有的最大值进行 +1 操作,得到一个新的不同的字段,既能保证数据变化又不需要人工操作,通常与主键搭配 -
任何一个字段要做自增长前提必须自身是一个索引(key栏有值) -
自增长字段必须是整型数值字段(int) -
一张表最多只能有一个自增长
字段名 整型数据类型 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.约束数据的有效性(唯一性等)
增加索引的前提条件:
❝索引本身会产生索引文件(有可能比数据文件还大)会非常耗费磁盘空间,可看作效率与磁盘空间的比例。视情况而定。
❞
若某字段需要作为查询条件经常使用则可以使用索引(一定要想办法增加索引来提升效率);
若某字段需要进行数据的有效性约束,也可能使用索引(主键,唯一键)
mysql提供的索引:
❝1.主键索引:primary key
❞
2.唯一索引:unique key
3.全文索引:fulltext index
4 普通索引:index
删除唯一索引时按照普通索引来做(drop index)
5.全文索引:针对文章内部的关键字进行索引,最大弊端在于如何确定关键字(英文容易:英文单词之间有空格;中文难:无空格且中文可以随意组合(需要分词:sphinx))
好了,到这里我们今天对于mysql数据库的列属性的简单介绍就完了,如有纰漏,可以在评论区留言。