MySQL列属性

列属性:约束,真正约束字段的是数据类型,但是数据的类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。
列属性有:null, not null ,default,primary key ,unique key ,auto_increment,comment

空属性:

两个值:null 和not null

主键

主键:primary key,一张表中只有一个字段可以使用对应的键,用来唯一约束该字段里面的数据, 不能重复。主键也是索引
增加主键:
方案一:在创建表时直接在字段后面跟primary key 关键字(且不能为空)

create table my_pri(
    name varchar(20) not null,
    number char(10) primary key
) charset utf8;

优点:非常直接,确定只能使用一个字段作为主键
方案二:在创建表的时候,在所有的字段之后,使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键,则称为复合主键)

-- 复合主键
create table my_pri2(
   number char(10) comment '学号',
   course char(10) comment '课程',
   score tinyint unsigned  default 0,
-- 增加主键限制:学号和课程应该是对应的,具有唯一性
primary key(number,course)
) charset utf8;
MySQL列属性_第1张图片
屏幕快照 2017-07-25 上午10.39.12.png

PS :复合主键还是一个主键,只不过是多个字段共同组合而成的。唯一性的标准是字段组合起来不同。

方案3:当表已经创建好之后,可以额外追加主键:通过修改表字段属性,或者直接追加。
alter table 表名 add primary key(字段列表)
前提:表中字段对应的数据是不重复的。

自动增长属性 auto_increment

  • 删除主键
    alter table 表名 drop primary key
    自增长通常跟主键搭配

  • 自增长特点:
    1.任何一个字段做自增长,前提是本身是一个索引(key一栏有值)。
    2.自增长的数据类型必须是整型
    3.一张表最多有一个自增长

  • 修改自增长:
    1.自增长属性如果需要属性,则需要先删除这个自增长属性,再增加新的自增长
    2.如果修改自增长的基数,则该值必须必当前自增长的值要大。

alter table 表名 auto_increment = 值

3.为什么自增从1开始,为什么自增都为1
有系统变量控制
show variables like 'auto_increment%'

![Upload 屏幕快照 2017-07-25 上午11.43.57.png failed. Please try again.]

可以修改,但修改无意义

  • 删除自增长

自增长是字段的一个属性:可以通过modify来进行修改(保证字段没有aoto_increment即可)
alter table 表名 modify 字段 类型

唯一键

一张表往往有很多字段具有唯一性,但是主键只有一个。唯一键 unique key 就可以解决这样的问题。
唯一键默认允许字段为空,而且是多个字段为空。空值不做比较。

  • 创建唯一键
    方案一:在创建表时直接在字段后面跟unique key 或者unique 关键字
create table my_unique1(
    number char(10) unique 
) charset utf8;

方案二:在创建表的时候,在所有的字段之后,使用unique key(唯一键字段列表)来创建唯一键(如果有多个字段作为唯一键,则称为复合唯一键)

方案三:当表已经创建好之后,可以额外追加唯一键
alter table 表名 add unique key(字段列表)

  • 唯一键约束

唯一键与主键本质相同,区别就是唯一键允许字段的值为空,并且是多个值为空。如果唯一键添加not null属性,约束和主键一样。

  • 更新&删除唯一键

更新:先删除后增加(唯一键有多个,可以不删除)
删除:alter table 表名 drop index 索引名
PS:唯一键默认是用字段名作为索引名

额外知识:什么是索引?

几乎所有索引都是建立在字段之上
索引:系统根据某种算法,将已有数据或者可能将要新增的数据,单独建立一个文件,文件能够实现快速匹配数据,并且能够快速找到对应表中的记录。
索引的意义:增加查询数据的效率,约束数据的有效性。
增加索引是有前提条件,索引本身会产生索引文件,意味着会耗费磁盘空间。
如果某个字段需要作为查询的条件经常使用,这可以将该字段设置为索引。
如果某个字段需要作为数据有效性的约束,也可能使用索引(主键,唯一键)
MySQL中提供了多种索引:
1、主键索引:primary key
2、唯一索引:unique key
3、全文索引:fulltext index
4、普通索引:index
全文索引:针对文章内部的关键字进行索引,全文索引的弊端在于如何确定关键字。对英文友好,中文很难(分词 sphinx)。

你可能感兴趣的:(MySQL列属性)