【MySQL03】:MySQL约束

MySQL中的约束

表中一定要有各种约束, 通过约束,我们能够未来保证数据库中的数据是合法的。
约束的目标就是保证数据的完整性和可预期性。

空属性

  • 两个值 : null(默认的) 和 not null(不为空)

  • 数据库的默认字段都为空, 但是实际开发, 尽量保证字段不为空。

默认值约束(DEFAULT)

我们通过在类型后面设置default参数

default值如果设置, 如果有确定的数据, 就设置数据, 没有就default。

谈谈空和default之间的关系。

  • 如果我们没有指定一列要插入, 用的是default, 如果在建表中, 没有默认值, 就会报错。

  • 在默认情况下, 我们的default是null, 当我们设置了not null, 我们就必须设置default, 不然就会报出没有对应的default值进行插入。

  • default和not null不冲突而是互相补充。

  • 如果我们默认设置了not null, 没有默认的default(因为默认的default就是null)

comment(列描述)

针对表中的内容进行描述(类似于Java/C++中的注释)

zerofill(根据位数补零)

zerofill的作用就是将我们忽略的0进行填充, 比如我们int(10), 如果只是数据1并且设置了zerofill, 就会将高位设置成为0, 0000000001。

主键(primary key)

主键要么只有一个, 要么没有, 逐渐就是这张表中最重要的一项, 类似于迭代器的作用, 逐渐必须是唯一的。

create table if not exists test_key(
    id int unsigned primary key comment "学号"
);

(删除主键), 不会删除这一列, 但是会删除主键约束

alter table table_name drop primary key

复合主键, 多个元素共同唯一(同时相同才会冲突)

create table Info (
    id int unsigned comment "编号",
    course_id int unsigned comment "课程编号",
    score tinyint unsigned comment "课程成绩",
    primary key(id,course_id)
);

自增长(auto_increment)

自动增长的约束, 他能够实现自动增长,当我我们也可以手动的插入, 相当于自动的设置DEFAULT值。每次自动增长

+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Info  | CREATE TABLE `Info` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `course_id` int unsigned NOT NULL COMMENT '课程编号',
  `score` tinyint unsigned DEFAULT NULL COMMENT '课程成绩',
  PRIMARY KEY (`id`,`course_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3         |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

我们可以手动设置AUTO_INCREMET=?来设置自增的开始

唯一键(unique)

create table stu(
  id char(20) unique comment "学生的的唯一键",
  name varchar(20) not null
);

比如每个学生都有自己的电话号码的邮箱, 但是显然学号才是主键, 所以对于电话号码和邮箱都应该设置成为unique, 对于上层我们可以避免插入的时候登录学生信息错误(电话号码和邮箱重复)

外键 (foreign key)

外键强调表和表之间的关联和约束。
主要定义主表和从表之间的关联关系
外键的本质是如果表和表之间存在关系的时候, 外键可以帮助我们添加约束

id  |  name  |  class_id  |
100 |  张三   |     10     |
101 |  李四   |     20     |

class_id |  class_name |
    10   |      一班    |
    20   |      二班    |

class_id某种意义上就算外键。

foreign key(class_id) references other_table(id)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值