MySQL列属性约束及存储引擎

列属性约束,保证表的结构和数据的正确性和稳定性。

总的来说有五种:唯一性和主键约束、外键约束、检查约束、空值约束、默认值约束。 五大关键词:UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT

是否为空

规定一个字段的值,是否可以是null。 null(默认) 或 not null Null表示没有值。与任何数据不同。表示什么都没有。 如果一个列不允许为空,但是在赋值时,没有为该字段赋值,则会出现问题。 Mysql的每条记录,如果存在可以为null的字段,则需要使用一个字节保存哪些字段是空。

create table one(a ,b int );* from one;默认值属性

使用default value来声明 DEFAULT子句用于为列指定一个默认,当该字段不存在值时,会被启用。 默认值必须为一个常数,不能为一个函数或一个表达式。 可以不存在default,但是mysql会判断: 如果该列可以为空,,则默认值为null;如果不可以,则不设置默认值。

注意: 可以在处理数据时,使用default,显示地使用默认值。 有些列是不能有默认值的:Blob,text。 时间戳类型,可以设置一个特殊的默认值 CURRENT_TIMESTAMP。在当列不存在或者传递的值为null时,使用当前的时间戳。

two(a ,b , c ,d int);two(b) values(10);select * from two;

默认值,在没有为该字段设置值是启用。 而且默认值的设置需要使用固定值。

常见场景 一个字段不能为空,而且存在默认值。

主键约束

主键(PK,primary key)就是可以唯一标识某条记录的字段或者是字段的集合。 主关键字是表中的一个或多个字段,要求主键的值不能重复,只能有一个主键。 如果还存在不重复的记录,可以定义成唯一索引,提高检索效率。 主键不能为空,不设置或者null都会变成not null。

主键可以是真实实体的属性。 但是常用的好的解决方案是: 利用一个与实体信息不相关的属性,作为唯一标识。 主键与业务逻辑不发生关系。只用来标识记录。(自身保证不冲突,主键不属于当前实体的任何属性。)

设置主键的语法:通过primary key完成 两种方案: 1、字段上设置

teacher(t_id ,t_name varchar(10),classname varchar(6),days tinyint unsigned)teacher teacher teacher\G

主键不能为空,也不能重复。一个字段是主键的话,自动设置不为空。

2、在定义完字段后,可以定义 通过这种方式可以定义多列主键。

create table teacher(t_id int,t_name varchar(10),classname varchar(6),days tinyint unsigned,primary key (t_id));

组合主键

teacher(t_name varchar(10),classname varchar(6),days tinyint unsigned,primary key (t_name,classname));

注意: 组合主键表示一个主键内包括多个字段,而不是多个字段都是主键;只需要一个唯一标识即可,mysql规定只能存在一个主键。

通过修改表来删除主键 alter table tbl_name drop primary key; 通过修改表来增加主键Alter table tb add primary key(id);

主键字段原则上在插入后,应该不被修改,但是语法上可以修改,但是修改的值不能与已有值冲突。

主键常见的设计: 每个表都应该存在一个可以唯一标识的主键字段, 最好与实体没有联系,不是实体属性字段。

自动增长

为每条记录提供给一个唯一的标识。 每次插入记录时,将每个字段的值自动增加1。 使用auto_increment标识。

需要整型,还需要有索引。

通常自动增长是从1开始递增,但是可以通过修改表属性,更改初始值。 表属性 auto_increment=x;(如果比已存在的小,则会从已有的最大值新记录)

teacher(t_id auto_increment,t_name varchar(10),classname varchar(6),days tinyint unsigned);teacher teacher (t_name,classname,days)values(‘周韦彤’,’0324′,31);select * from teacher;

自动增长的初始值:是可以设置的,默认是1。 通过表的选项:auto_increment n

* teacher values(null,’范冰冰’,’0334′,35);select * from teacher;

自动增长是否可以手动插入该列的值? 仍然可以手动插入。 如果是主键的话,该列不能重复,否则,可以重复。 insert into teacher values(7,’范冰冰’,’0334’,35);

自动增长该列是否可以更新? 可以

teacher where t_name=’范冰冰’;

如何删除自增长的主键id? 先删除自增长,在删除主键。

Alter table tb change id id int(10);//删除自增长;//删除主建Alter table test change id id int;//删除自增长;//删除主键insert into test values(6,’mark’,5);实体之间的关系

1:1 一对一 两个实体表内,存在相同的主键字段。 如果记录的主机值等于另一个关系表内的记录的主机主键值,则两条记录一一对应。

1:n 一对多 一个实体,对应多个其他实体 例如:一个班级对应多个学生

设计: 在多的那端,增加一个字段, 用于指向该实体所属的另外的实体的唯一标识,即主键。

m:n 多对多 设计: 典型的是利用一个中间表,表示实体之间的关系。

中间表的每个记录,表示一个关系。 一个M:N可以通过1:M,1:N来实现。

外键

如果一个实体(student)的某个字段(class_id),指向(引用)另一个实体(class)的主键(class_id),就称student实体的class_id是外键。

被指向的实体(class),称之为主实体,也叫(父实体)。 负责指向的实体,称之为从实体(从表),也叫子实体(子表)。

作用: 用于约束处于关系内的实体。

需要解决的问题? 增加子表记录时,是否有与之对应的父表记录。 在删除或者更新主表记录时,从表应该如何处理相关的记录。

他们的快乐像贪玩的小孩,游荡到天光却还不肯回来。

MySQL列属性约束及存储引擎

相关文章:

你感兴趣的文章:

标签云: