1.MYSQL 字段约束
有时设置字段的数据类型还远远不够,还需要添加一些附加属性,如自动增量、自动补零、默认值设置等。这时可以使用字段约束来实现。
1.1. UNSIGNED
- 只能用于设置数值类型。
- 不允许出现负数,若是某些字段不需要插入负数,使用该属性可以将字段的最大储存长度增加一倍。例如:(
TINYINT
:原本储存长度为 -128 ~ 127,使用UNSIGNED
后为 0 ~ 255)
1.2. ZEROFILL
- 同上,只能用于设置数值类型。
- 在数值
之前
自动用 0 补齐不足的位置 - 当给字段使用其属性时,该字段自动应用
UNSIGNED
属性
1.3. AUTO_INCREMENT (此属性必须配合 KEY 值一起使用)
- 该属性用于设置字段的自动增量属性
- 设置后该字段的值不允许重复
1.4. NULL和NOT NULL(一般就使用默认值即可)
- 字段默认为 BULL,即此字段未插入值(也可理解为默认值)
- 如果指定了NOT BULL ,则必须在此字段插入值(否则报错,严格模式下)
1.5. DEFAULT
- 此属性可以给字段添加默认值,在性别等字段使用
使用方法如下
1.6. 字段约束的使用
直接在建表或插入数据时,添加约束至数据类型后即可
这里拿 UNSIGNED 实验一下
建表成功,下面来对比一下两个表的数据
上面是没有使用字段约束的 TINYINT 类型,后面的括号代表了字节长度为 4 ( -128 ~ 127
,符号也会算进去)
上面是使用了unsigneds
字段约束的TINYINT
类型,字节长度为 3 (0 ~ 255
,没有负数符号,所以最大字节为 3)。
2.MYSQL 主键约束(PRIMARY KEY)
主键约束也是字段约束一种,保持了数据的唯一性,帮助我们更好找到需要的内容
关键字 : PRIMARY KEY
- 每张数据表中只能存在一个主键
- 作用为 保证记录的唯一性
- 主键自动使用 NOT BULL 关键字
AUTO_INCREMENT
必须和PRIMARY KEY
一起使用。但是反过来,PRIMARY KEY
则不需要,可以单独使用
下面将 AUTO_INCREMENT
使用一下
上面创建了 名为 tp2 的数据表,定义了 id 与 user 用了 不用的字段约束,下面来查看一下
下面来定义一下 user 的数据 ,并查看数据
可以看到,我们并没有给 id
设置具体的值,但是 AUTO_INCREMENT
字段约束会自动增量,于是当user
插入了值时,id
也会自动增量
注意:上面只是体现了 AUTO_INCREMENT
的特性,下面来看看 PRIMARY KEY
有什么作用
定义表 tp3
查看表,id
出现KEY
为 PRI
,并且不能为 NULL
向表中插入id
值为 5成功。但是再插入同样的 id
值时却失败,将 5 换成其他数字,成功插入。
这就证明了 使用 PRIMARY KEY
可以将字段的值具有唯一性,不可重复
3.MYSQL 唯一约束(UNIQUE KEY)
唯一约束跟主键约束非常类似,不同的就是唯一约束可以 为空值 并且可以存在多个唯一约束
- 关键字: UNIQUE KEY
- 可以保证记录的唯一性
- 可以为空值
- 可以存在多个 UNIQUE KEY
在表中若是存在多个需要唯一标识的值时(例如:手机号、id值、身份证等),用PRIMARY KEY
就不能完全满足需求了,这时 UNIQUE KEY
就可以更合适的使用
4.MYSQL 外键约束(FOREIGN KEY)
此约束作为了解,真实操作时不会这么直接使用外键约束
外键约束可以保持数据一致性,完整性。
实现一对一或一对多关系
- 父表与子表必须使用相同的储存引擎,必须为 innoDB
- 外键列(子表列)和参照列(父表列)必须具有相同的数据类型,且数字的长度和是否有符号位也必须相同,字符的长度可以不同
- 外键列和参照列必须创建索引。否则MySQL将自动创建索引
- 查看索引
SHOW INDEXES FROM 表名
创建方式:FOREIGN KEY (外键列名) 参照表名 (参照列名)
下面来创建一个外键列,先创建父表(参照表)
下面创建子表
创建完成