关系型数据库的设计规则:遵循ER模型和三范式
E:Entity实体,指代数据库当中的一张表
R:Relationship,代表关系
ER图:https://jingyan.baidu.com/article/d5a880eba77c3513f147ccdf.html
1.列不能拆分
2.唯一标识··3.关系引用主键
具体体现:
数据完整性(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息而提出的。数据完整性分为四类:实体完整性(Entity Integrity)、域完整性(Domain Integrity)、参照完整性(Referential Integrity)、用户定义的完整性(User-definedIntegrity)。
实体完整性:同一个表中不能有相同的无法区分的数据
域完整性:数据的域有必要限定
参照完整性:所有的引用参照属性都在相应的表中能够找到
用户定义的完整性:符合用户定义的规则
PRIMARY KEY主键约束不能重复,不能为空NOT NULL 非空约束不能为空DEFAULT默认约束插入数据时此列没有值插入,则使用默认值UNIQUE KEY唯一约束此列不能有重复值FROEIGN KEY外键约束约束表之间的关系
索引的本质是一张特殊的表,当数据量大时,查找索引比起要查找全部内容快了太多了,并且由于索引表数据量小,也非常节省计算机资源。
单列主键约束为id int key;
复合主键约束为
create table dbtest(
id int auto_increment,
name varchar(10),
primary key(id,name)
);
将多个元素设置为主键。
外键创建时默认会自生成约束,也可通过显示声明。
一个表可以有很多的外键约束
外键约束需要一个表的两个字段或者两个表的两个字段之间建立外键约束
外键约束一定是在从表、子表中建立的。
外键的建立前提是主表必须唯一或者是主键
主表:有被依赖项的表。例如学生表和课程表
从表:外键所在,依赖主表的表。例如选课表,表中有两个外键,分别参考学生表和课程表
约束的五个等级:
使用方法
例如:alter table uniquetest add constraint fc foreign key(name) references testtab(fname) on delete cascade on update cascade;
如何查看某个表的外键约束名:
select * from information_schema.table_constraints where table_name=表名;
注:MYSQL不支持
一个表可以有多个唯一约束,唯一键意味着唯一,可以为NULL,这意味着除了NULL值其他的都必须唯一,而可以有多个NULL值。
或者在建表时通过unique key(字段列)设置唯一约束
一个表可以有很多的默认值约束
默认值约束只能针对某一个字段来说
默认值约束意味着该字段如果没有手动赋值,会按默认值处理
一个表只能有一个自增约束,因为一个表只能有一个维护自增值的变量
自增约束的列只能是整数列
自增约束的列必须是键列
Identity用法详解https://blog.csdn.net/weixin_34367845/article/details/90087125
identity是sqlServer的语法,mysql不支持identity
Identity是标识值,在SQL Server中,有ID列,ID属性,ID值,ID列的值等术语。
Identity属性是指在创建Table时,为列指定的Identity属性,其语法是:column_name type IDENTITY [ (seed , increment) ],Identity属性有两个参数:seed和increment,seed是ID值的初始值,increment是ID值的增量。在Table中创建的Column,如果使用Identity属性标识,那么该列是ID列。默认情况下,不能显式向ID列插入数值。ID列是由系统自动赋值的,在赋值时,系统根据该表的ID值,自动插入递增的,唯一的数值,同时ID值根据Increment自动递增。ID值有自动递增的特性,当语句执行失败或事务回滚时,ID值不会回滚,这会导致ID列的值不连续。
如果想要显式向ID列插入特定的数值,那么,必须启用 Identity_Insert选项,该选项自动将ID值更新为ID列的最大值。
一个表可以有很多的非空约束
非空约束只能针对某一个字段来说
非空约束意味着该字段不能存入null
alter table 数据库名.表名称 modify 字段名 数据类型 not null;
alter table 数据库名.数据表名 drop index 约束名
添加not null/unique/key的尾缀,
添加foreign key(在上文中定义的列名) references 其他表名(其他表的列名)来实现约束
create table Student(
Uid int not null identity(1,1) primary key, --主键约束--
Name varchar(20) not null unique, --唯一约束--
Age int not null check(Age>=18), --检查约束--
TeaUid int not null foreign key references Teacher(Uid), --外键约束--
Notes varchar(100) null
)
show databases;可以看见一个叫information_schema的数据库
show tables;可以看见table_constraint的表,其中保存着约束信息。
show index from 数据库名.数据表名;可以全面的查看索引信息。
不用填写约束名,且默认约束名就为列名
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。