文章目录

  • 空属性
  • 列描述
  • 默认值
  • 主键
  • 新增主键
  • 主键约束
  • 更新主键 & 删除主键
  • 主键分类
  • 自增长
  • 唯一键
  • 新增唯一键
  • 更新唯一键 & 删除唯一键
  • 唯一键约束
  • 索引



  • 真正约束字段的是数据类型(列类型),但是数据类型的约束很单一,需要有一些额外的约束来更加保证数据的合法性
  • 列属性有很多:NULL/NOT NULL、default、primary key、unique key、auto_increment、comment

空属性

  • 两个值:NULL(默认的)和NOT NULL(不允许为空)
  • 虽然字段默认的都是基本为空,但是实际上在真实开发时,尽可能的要保证所有的数据都不应该为空:空数据没有意义;空数据没有办法参与运算;只要有任何一个字段允许为空,那么每条记录就必须拿出一个字节来存储NULL值
  • 创建一个字段允许为空的表

列描述

  • 列描述:comment,没有实际含义:是专门用来描述字段含义的,会根据表创建语句保存:用来给程序员或数据库管理员来进行了解的

默认值

  • 默认值:某一种数据会经常性的出现某个具体的值,可以再一开始就指定好:在需要真实数据的时候用户可以选择性的使用默认值
  • 默认值生效的两种办法
    (1) 给默认值字段赋值default
    (2) 不给默认值字段赋值

主键

  • 主键:primary key,主要的键:一张表中最多只能有一个主键,用来唯一的约束该字段里面的数据,不能重复
  • 一张表最多只能有一个主键:并不是说最多只能有一个字段是主键字段,可以是多个字段作为复合主键
  • 主键字段不能为空,如果是复合主键的话,那么复合值不能为空即可
  • 主键字段的值能重复,如果是复合主键,复合值不重复即可

新增主键

  • 方案一:在创建表的时候直接在字段之后跟primary key关键字

    (1)优点:非常直接
    (2) 缺点:只能使用一个字段作为主键,不能构造复合主键
  • 方案二:在创建表的时候,在所有字段之后使用primary key(字段列表)来创建主键:如果有多个字段作为主键可以是复合主键
  • 插入数据
  • 方案三:当表创建后之后,额外追加主键:可以通过修改表字段属性,也可以直接追加:前提表中字段对应的数据本身是独立的,即不重复的
    (1) 通过修改字段属性来追加主键
create table my_pri3(
	name varchar(20) not null comment '姓名',
	number varchar(20) comment '学号'
)charset utf8;
-- 通过修改表字段属性来追加主键:只能给一个字段追加主键
alter table my_pri3 modify number varchar(20) primary key comment '学号';

date mysql 设置为空 mysql设置字段可以为空_主键


(2) 直接追加主键

create table my_pri4(
	number varchar(20) comment '学号', 
	course varchar(20) comment '课程名称',
	scrore tinyint unsigned default 60 comment '分数'
)charset utf8;
-- 直接追加主键
alter table my_pri4 add primary key(number ,course );

date mysql 设置为空 mysql设置字段可以为空_date mysql 设置为空_02

主键约束

  • 主键对应的字段中的数据不允许重复:一旦重复数据操作就会失败(在主键冲突的时候还是会与解决方案的):增和改

更新主键 & 删除主键

  • 没有办法更新主键:主键必须先删除才能增加
alter table 表名称 drop primary key; -- 一张表中最多最能有一个主键

date mysql 设置为空 mysql设置字段可以为空_主键_03

主键分类

  • 主键分为业务主键与逻辑主键
  • 在实际创建表的过程中,很少使用真实业务数据作为主键字段:业务主键,如学号,课程号等;大部分的时候使用逻辑性的字段作为主键:逻辑性的字段没有业务含义,值是什么都没有关系
  • date mysql 设置为空 mysql设置字段可以为空_date mysql 设置为空_04



自增长
  • 自增长:当对应的字段不给值或者说给default或者给NULL的时候,会自动的被系统触发,系统会从当前字段中已有的最大值再进行+1操作,得到一个新的不同的值
  • 自增长通常是跟主键搭配使用
  • 任何一个字段要做自增长必须前提是该字段本身是一个索引,即key栏有值
  • date mysql 设置为空 mysql设置字段可以为空_字段_05


  • date mysql 设置为空 mysql设置字段可以为空_主键_06


  • 自增长字段的数据类型必须是整型
  • 一张表中最多只能有一个自增长
  • 触发自增长:
    (1) 不给自增长字段赋值
    (2) 给自增长字段赋值default
    (3) 给自增长字段赋值NULL
  • date mysql 设置为空 mysql设置字段可以为空_字段_07


  • 删除自增长:自增长是列属性,可以通过modify来进行修改:保证字段没有auto_increment即可
alter table 表名称 数据类型 [列属性] [位置];

唯一键
  • 一张表往往有很多字段需要具有唯一性,即不同的记录上该字段的数据是不能重复的:但是一张表中最多只能有一个主键:那么唯一键(unique key)就可以解决表中多个字段需要唯一性约束的问题
  • 唯一键的本质与主键差不多:唯一键默认的允许字段为空,而且可以多个记录的该字段为空:空字段不参与唯一性的比较

新增唯一键

  • 方案一:在创建表的时候直接在字段后面跟上unique key关键字:但是只能指定单字段为唯一键,不能指定复合唯一键
  • date mysql 设置为空 mysql设置字段可以为空_自增长_08


  • 方案二:在创建表的时候在所有字段之后使用unique key(字段列表)来创建唯一键:当然可以使用多个unique key(字段):unique key(字段1),unique key(字段2), …(当然这里不是复合唯一键)
  • date mysql 设置为空 mysql设置字段可以为空_主键_09


  • 方案三:在创建表之后追加唯一键
alter table 表名称 add unique key(字段列表);

date mysql 设置为空 mysql设置字段可以为空_date mysql 设置为空_10

更新唯一键 & 删除唯一键

  • 更新唯一键:先删除再追加
alter table 表名称 drop index 索引名称; -- 默认的索引名称就是字段名称,看key栏有值对应的字段

date mysql 设置为空 mysql设置字段可以为空_字段_11

唯一键约束

  • 唯一键与主键本质相同:唯一的区别就是唯一键默认允许为空,而且是多个为空
create table my_unique1(
	number varchar(20) unique key comment '唯一键',
	name varchar(20) not null
)charset utf8;

date mysql 设置为空 mysql设置字段可以为空_date mysql 设置为空_12


索引
  • 几乎所有的所有都是建立在字段之上的
  • 索引:系统根据某种算法,将已有的数据或未来可能新增的数据,单独建立一个文件:文件能够实现快速的匹配数据,并且能够快速的找到对应表中的记录
  • 索引的意义
    (1) 提升数据查询的效率
    (2) 约束数据的有效性
  • 增加索引的前提条件:索引本身会产生索引文件,有时候可能比数据文件还大,会非常耗费磁盘空间
  • 如果某个字段需要作为查询条件经常使用,那么可以使用索引:一定会想办法增加索引
  • 如果某个字段需要进行数据的有效性约束,也可能使用索引:如主键、唯一键等
  • MySQL提供多种索引:
    (1) 主键索引:primary key
    (2) 唯一索引:unique key
    (3) 普通索引:index
    (4) 全文索引:fulltext index
  • 全文索引fulltext index:针对文章内容的关键字进行索引!全文索引最大的问题在于如何确定关键字
    (1) 英文很简单:英文单词与单词之间有空格、标点符号等
    (2) 中文很难:没有空格,而且中文可以各种随意组合:分词:sphinx