MySQL:列属性(列约束)

1. 是否允许为空(Null/not Null)

规定一个字段的值是否可以是null。默认是可以为空。

此时,插入值a = 10 , b 为空,发现可以正确插入:

若试图插入值b = 11,而a 不做处理,发现不能正确插入,提示 a 没有默认值。

即当对某个字段未输入信息时,列属性趋向于先查找有无默认值。

tip: NULL与空字符串不同,Null会占用空间,需要表示某些字段可以为NULL。

2. 设置默认值(default value)

当插入数据中,有空字段时,会尝试查找该字段有没有设置默认值。

若提前设置了默认值,则会使用默认值。如下图:

当只插入a = 11时,b 由于不允许为NULL,查找默认值,并设置b = 20.

结果如下图:

只插入b = 11,也是同样的道理。

tip: 若给某字段插入的值为NULL,则显示会是NULL,而不会选择默认值;

当且仅当没有给该字段插入值,并且有默认值时,才会启用默认值。

默认值常用的情况是:该字段不能为空,会设置默认值。

3. 主键|唯一索引

主键(PK : primary key):在创建表时,可以唯一标识某条记录的字段或字段集合。

可以是真实实体的属性,如身份证号,但常用解决方案是利用一个与实体信息不相关的属性,作为唯一标识

主键不与业务逻辑发生关系,只用来标识记录。

ID 班级 姓名 年龄
1 1520113 张三 24
2 1520114 李四 26

对于上表,姓名和年龄可能会出现重复,不能作为主键;

若没有ID,而其他个字段单独都可能出现重复,可以考虑组合其中某几个字段(如班级+姓名),实现唯一标识。

主键的设置方法:

方案一:字段上设置

此时,若试图再次插入一个t_id为1的数据时,会提示错误,主键不能重复。

另外,主键t_id也不可以设置为NULL,虽然并未设置NOT NULL。

但是若类型允许,可以为负值,只要满足唯一标识原则。

查询表,会发现t_id已被设为主键。

方案二:在建表的最后声明

1 create table teacher1(
2 t_id int,
3 t_name varchar(5),
4 class_name varchar(6),
5 days tinyint unsigned,
6 primary key (t_id)    //在定义的末尾注明主键是上述的哪个字段
7 );

方案二的优势:可以标注多个字段作为组合主键。

tip: 注意说法上的严谨:现在是一个主键上包含了两个字段,而不能说这两个字段都是主键,可以说这两个字段组成了主键。

tip: 自动增长机制(为每条记录提供一个唯一的标识)

每次插入记录时,将某个字段的值自动加一。

使用auto_increment标识,如下图所示

对于设置了auto_increment的主键而言,当输入数据时,若把该字段的值设为NULL,或者不输入该字段内容。

系统都会以自动增加的形式,为数据编号,如下图:

tip: 其实不是主键的字段,也可以设置为auto_increment。

另外,自动增长的初始值是可以设置的,默认是1.

通过alter 语句进行更改,如下图:

此时再插入数据,不设置主键的值,会发现结果如下:

tip:当设置的N的值,小于当前主键的值时,则可以设置成功,但是实际仍然会基于现有的主键值进行自动增长。

question: 设置了auto_increment后,是否还可以手动插入主键的值?YES!!只要不发生冲突。

能否更新当前的数据?YES,利用update语句。

4. 外键约束(foreign key)

若一个实体的某个字段指向另一个实体的主键,eg. student表的字段class_id指向class表的主键class_id。

就成当前student实体的class_id是外键。

被指向的实体,称为主实体,也叫父实体。class

负责指向的实体,称为从实体,也叫子实体。student

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

① 增加子表记录时,是否有与之对应的父表记录;

② 删除or更新父表记录时,子表应该如何处理相关的记录;

定义:在子表上增加外键字段,指向父表的主键。

建立it_class表,设置字段class_id为主键:

建立itcast_student表,定义字段class_id,并设置它为外键,指向it_class表中的主键字段class_id。

语句为 foreign key (字段名) references 父表名 (父表主键);

若要在itcast_student表中,插入数据,但该学生所指的班级不存在,会导致创建不成功:

可以在父表it_class中插入数据,即使子表中没有指向其主键的数据:

级联操作:当主表数据改变时,与之关联的从表数据应该如何处理。

① 主表更新:on update

② 主表删除:on delete

允许的级联动作:

① cascade:如果主表被更新or删除,则从表也会执行相应的操作。

② set null:若主表记录被删除,则从表相应记录设置为null。表示从表不指向任何主表记录。

③ restrict:拒绝主表的相关操作。

修改外键:

先删除,再新建,通过修改表来完成。

alter table tb_name drop foreign key (class_id);

删除外键需要通过指定外键名称来达到目的,可以通过在创建外键时,指定名称,也可以使用MySQL默认生成的名称。

新建外键,指定允许的级联动作为set null:

此时若删除父表it_class中编号为1的记录时,会发现与之关联的从表itcast_student中相应的记录处,变成了NULL:

on update 指的是只有主表的主键发生变化,才会对从表发生影响。

时间: 2024-10-07 07:36:59

MySQL:列属性(列约束)的相关文章

MySQL数据库8(八)列属性

列属性 列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长. null属性 NULL属性代表字段为空 如果对应的值为YES,表示该字段可以为NULL. 注意: 1.在设计表的时候,尽量不要让数据为空. 2.MySQL的记录长度为65535字节,如果有一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节. 默认值 default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数据

MySQL列属性约束及存储引擎

列属性约束,保证表的结构和数据的正确性和稳定性. 总的来说有五种:唯一性和主键约束.外键约束.检查约束.空值约束.默认值约束. 五大关键词:UNIQUE和Primary Key, Foreign Key, CHECK, NOT NULL, DEFAULT 是否为空 规定一个字段的值,是否可以是null. null(默认) 或 not null Null表示没有值.与任何数据不同.表示什么都没有. 如果一个列不允许为空,但是在赋值时,没有为该字段赋值,则会出现问题. Mysql的每条记录,如果存在

20141230 mysql数值类型和列属性一

枚举字符串 枚举字符串指的是在定义之初就确定要存放的字符串有哪些,然后在数据进行存储的时候就只能存储已经定义过的字符串,只能使用任意的一个字符串.(单选框) 语法:enum 字段名 enum(字符串1,字符串2,-); 枚举采用最多2个字节保存数据,最多能存65535个数据 枚举的意义 1. 规范数据:没有进行维护的数据不能插入 2. 节省空间:实际存储的数据是数字 虽然SQL是一种强类型语言,但是SQL能够自动转换数据类型(与php一样) select有一个特点:后面可以跟任意表达式 证明枚举

09、MySQL—列属性

列属性又称之为字段属性,在mysql中一共有6个属性:null,默认值,列描述,主键,唯一键和自动增长 1.Null属性 NULL属性:代表字段为空 如果对应的值为YES表示该字段可以为NULL 注意: (1) 在设计表的时候,尽量不要让数据为空 (2) Mysql的记录长度为65535个字节,如果一个表中有字段允许为NULL,那么系统就会设计保留一个字节来存储NULL,最终有效存储长度为65534个字节. 2.默认值 Default:默认值,当字段被设计的时候,如果允许默认条件下,用户不进行数

学习笔记:MySQL列属性

列属性 a)         null|not null 缺省值是null,也就是允许为空,如果是not null而又没有给该字段赋值的话,系统会首先查询该字段有没有默认值 b)         default: 给一个字段一个默认值,如果没有给该字段填充数据,就用该默认值来代替,通常就是配合not null一起使用 c)         primary key: 主键,唯一可区别其他记录的字段,一个表中只能有一个主键,也可以很多个字段组合成一个组合主键,而且不允许为空! d)        

mysql字符串类型、列属性及外键

字符串类型 Char 和varchar 在定义char 跟varchar时,都需要设置长度. 语法: char(M); 最大长度为255 varchar(M); 最大长度为65532 不同编码长度不同 GBK最大为:32767 utf8最大为:21845 M为长度! 两者区别: Char的M是固定的,即使输入的字符长度小于M值,该字符长度也会被定义为M值: 效率更快,使用一些固定字符长度的时候可以使用,例:电话号码.身份证号码等! Varchar的M是范围性值,只要不超过M,输入的值长度为多少即

msyql定义列属性

定义列属性 (列属性,列约束) 是否为空 not null  默认值    default 0  主键     primary key    (可以唯一识别,某条记录的字段或者是字段的集合,就是主键)  自动增长   auto_increment (可以设置自动增长的初始值) 例: auto_increment 10(这样就会从10开始增长)   注释     comment 'xxx'    (注释:可以让我们清晰看懂这个属性)

使用IDENTITY列属性和Sequence对象

使用IDENTITY列属性 1. 建立表 Sales.MyOrders USE TSQL2012; IF OBJECT_ID(N'Sales.MyOrders', N'U') IS NOT NULL DROP TABLE Sales.MyOrders; GO CREATE TABLE Sales.MyOrders ( orderid INT NOT NULL IDENTITY(1, 1) CONSTRAINT PK_MyOrders_orderid PRIMARY KEY, custid INT

小贝_mysql建表以及列属性

mysql建表以及列属性 简要: 一.建表原则 二.详细的列属性说明 一.建表原则 建表: 其实就是声明列的过程,数据最终是以文件的形式放在硬盘(内存) 列: 不同的列类型占的空间不一样. 选列的原则: 够用,不浪费 二.列类型以及属性说明 列类型有: 整形.浮点型.字符型.日期/时间型 2.1.整形 tinyint/smallint/mediumint/int/bigint 2.1.1.详解tinyint 一个字节 [][][][][][][][]共8位 假设8为都为0 ==> 转化为十进制