有些数据认为是合法数据,有些是非法数据。 人,是非常不靠谱的!!(对计算机而言)
约束:数据库,自动的对数据的合法性进行校验检查的一系列机制,目的就是为了保证数据库中能够避免被插入/修改一些非法的数据。
MySQL 中提供了以下约束:
○ NOT NULL-指示某列不能存储 NULL 值。
○ UNIQUE-保证某列的每行必须有唯一的值
○ DEFAULT-规定没有给列赋值时的默认值。
○ PRIMARY KEY-NOT NULL和 UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更
○ FOREIGN KEY-保证一个表中的效据匹配另一个表中的值的参照完整性
○ CHECK-保证列中的信符合指定的条件。对于MYSQL数据库,对CHECK子句进行分析,但是忽路CHECK子句。
NOT NULL
UNIQUE
Duplicate:重复 entry: 入口、条目
不仅仅是在限制 插入,也会限制 修改!
Unique约束,会让后续插入数据/修改数据的时候,都先触发一次 查询操作,通过这个查询,来确定当前这个记录是否已经存在。
数据库引入约束之后,执行效率就会受到影响,就可能会降低很多
这就意味着,数据库其实是比较慢的系统(干的活多),也比较吃资源的系统,部署数据库的服务器,很容易成为一整个系统的“性能瓶颈”。
DEFAULT
desc 表名; => describle 描述
order by 列名 desc; => descend 降序
后续插入数据的时候,default就会在没有显示指定插入的值的时候生效了。
上述设置约束的过程,都是先删除表,再重新创建表~
可不可以不删除表,直接设置约束? 可以,alter table可以修改表结构
PRIMARY KEY (最重要的约束***)
一张表里面只能有一个primary key
一个表里的记录,只能有一个作为身份标识的数据
虽然只能有一个主键,但是主键不一定只是一个列,也可以是多个列共同构成一个主键(联合主键)
对于带有主键的表来说,每次插入数据/修改数据,也会涉及到进行先查询的操作。
Mysql会把带有unique和primary key的列自动生成索引,从而加快查询速度。
如何保证主键唯一呢?
Mysql提供了一种“自增主键”这样机制
主键经常会使用int/bigint
程序猿插入数据的时候,不必手动指定 主键 值——由数据库服务器自己给你分配一个主键
写为null其实是交给数据库服务器自动分配
为空就是从刚才 最大的数值 继续往后分配
此处这里的id的自动分配,也是有一定局限性的
如果是单个mysql服务器,没问题
如果是一个分布式系统,有多个mysql服务器构成的集群,这个时候依靠 自增主键 就不行
FOREIGN KEY (外键)
描述了两个表之间的关联关系
执行这个插入操作,就会触发针对class表的查询,就会查100是否在class中存在。
针对父表进行 修改/删除 操作,如果当前被修改/删除的值,已经被子表引用了,这样的操作也会失败。
外键约束始终要保持,子表中的数据在对应的父表的列中,要存在
指定外键约束的时候,要求父表中被关联的这一列,得是主键或者unique