mysql字段约束

字段约束用来确保数据的完整性(可靠性和准确性)。

  • 1主键约束
    • 1>主键简介:
      主键是表的标志列,在mysql中支持将一个或多个字段作为一个主键来使用。关系数据库依赖于主键,主键在物理层面只有两个用途:
      • 唯一的标志一行记录
      • 作为一个可以被外键引用的有效对象。
    • 2>设置主键:
      创建主键分为单字主键和复合主键
      单字主键创建只需在字段后边添加primary key
      mysql字段约束_第1张图片
      如上图所示,在mysqltest数据库创建student表,把学生的sid列设置为单字主键。
      复合主键的创建:
      mysql字段约束_第2张图片
      如果有一张表,创建的时候没有添加主键,现在要给它添加主键:
      alter table table_name add primary key(字段名称);
      mysql字段约束_第3张图片
      如上图,给已有的good表设置gid为主键。
    • 3>修改主键:
      修改主键有两种可能,一种是表中有主键,需要将主键修改在其它字段上(如上边给good表添加主键),另一种是表中没有主键,需要修改字段类型,使其成为主键。类型的修改要使用modify关键字。
      对于已经设置了主键的表,主键的修改不能够直接执行。必须先删除原有主键,再重新设置主键。主键的删除只是删除了指定字段或字段组的主键约束,并不能够删除字段或字段组,一个表中只能有一个主键。
      前边建的book表有主键字段组(bnum、typeid),现将表中的原有主键删除,将字段bnum修改为主键。
      删除主键:alter table table_name drop primary key;
      mysql字段约束_第4张图片
  • 2外键约束

    • 1>外键简介
      外键记录了表与表之间字段的联系。外键将不同表的字段关联起来,使这些数据在修改、删除时有着关联,在数据操作时维护这些数据完整性。
      外键有两个作用:

      • 让数据自己通过外键来保证数据的完整性和一致性
      • 能够增加数据库表关系的可读性
        外键的定义还要遵循以下的情况:
      • 所有的表必须是InnoDB型,它们不能是临时表,mysql中只有InnoDB类型的表才支持外键
      • 所有要建立外键的字段必须建立约束
      • 对于非InnoDB表,foreign key 子句会被忽略
    • 2>外键的使用
      语法:
      alter table table_name add [constraint 外键名] foreign key [id] (index_cil_name, …) references table_name (index_col_name, …)
      [on delete {cascade | set null | no action | restrict}]
      [on update {cascade | set null | no action | restrict}]
      可以看到mysql对创建外键要求严格,精确到字段的类型和长度。
      对于外键最好采用 on delete restrict 和on update cascade的方式。
      cascade:外键表中外键字段值会跟随父表被跟新,或所在的列会被删除。
      no action:不进行任何关联操作
      restrict:restrict相当于no action,即不进行任何操作。拒绝父表修改外键关联列,删除记录。
      set null:在父表的外键关联字段被修改和删除时,外建表的外键列被设置为空(null)。

对于数据的添加,子表的外键列输入的值,只能是父表外键关联列已有的值,否则出错。
现有刚刚创建的表student和book。把book中typeid字段对应student表中的sid字段:
mysql字段约束_第5张图片
通过show create table table_name 可以创建表的代码以及存储引擎,同时可以看到外键的设置。
删除外键:
alter table table_name drop foreign key 外键名;
一张表的外键可能不止一个,删除多个外键可以重复使用上述语句。
mysql字段约束_第6张图片
注:定义外键时,使用“constraint 外键名 foreign key …”语句,能够很方便的通过外键名来删除外键。
3. 非空约束
被设置了非空约束的字段,在添加数据的时候必须要有数据。非空约束限制字段中的内容不能为空,但可以是空串或0。
在创建表的时候直接在字段类型后边添加 not null 或null,即可设置为字段非空或者空。
把已有的表某个字段设置为非空:
alter table table_name modify 字段名 字段类型 not null;
4. 默认值
默认值是为字段指定默认的数据值。默认值的使用减轻了数据添加的负担,默认值除了可以定义为指定值,还可以设置为当前时间。被设置默认值的字段最好不为空,否则系统将无法确定该字段在添加时添加null还是默认值。
添加默认值:
在创建表的时候直接字段类型后边添加 “default 默认数据”,对于已有的表使用set关键字:
alter table table_name alter 字段名 set default 默认值数据;
删除已有的默认值:
alter table table_name alter 字段名 drop default;
修改默认值:可先执行删除语句在执行添加默认值语句。
mysql字段约束_第7张图片
上述sql语句先给typeid添加默认值2,再修改为5.
5. 唯一性约束
唯一性约束(unique constraint)要求添加该约束的列字段的值唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或多列不出现重复值。
创建唯一约束字段:
在建表时,可以直接创建唯一约束,可以直接在字段的数据类型后边直接添加unique关键字,也可以在所有字段定义之后使用[constraint <约束名>] unique(<字段名>)
对于已经存在的表和字段,添加唯一约束要使用add关键字:
alter table table_name add unique(字段列表);
删除唯一约束:
alter table table_name modify column 字段名 字段类型 [字段约束];
6. 自增约束
自增约束是一种由系统自动增加并填入字段数值的约束。
auto_increment是数据列的一种属性,只适用于整数类型数据列,
auto_increment数据列必须有唯一约束,以避免序号重复,
mysql一张表中只能有一个auto_increment字段,
当使用truncate table table_name 删除全部数据时,auto_increment会从1重新开始编号,
自增字段的值只能一次加1,而不能像SQL Server数据库中的自增约束一样,每次加2、每次加3,
在InnoDB数据表中,不可通过 create table or alter table 的auto_increment=n 语句来改变自增初值。
7. 删除指定名称的约束
mysql中,一个字段的所有约束都可以同名约束名删除,使用drop index语句:
alter table table_name drop index 约束名;
mysql字段约束_第8张图片

参考书目:《数据库应用入门与提高》侯振云、肖进编著。

你可能感兴趣的:(mysql初学)