码迷,mamicode.com
首页 > 其他好文 > 详细

数据完整性

时间:2021-05-25 17:45:08      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:har   从表   推荐   完整   class   int   日期类   不重复   可变   

第一节 数据完整性

作用:保证用户输入的数据保存到数据库中是正确的。

确保数据的完整性=在创建表时给表中添加约束

完整性的分类:

  • 实体完整性:行
  • 域完整性:列
  • 引用完整性:学生表(学号,姓名) 成绩表(学号,科目,成绩) 科目表(科目编号,科目名称)

实体完整性:表示数据表中的数据要保证唯一性、不重复、可以使用primarykey 或 unique开约束

域完整性:是指数据表中的字段要符合逻辑要求,是个有效的数据、符合常理。可以添加check约束 或者     default约束

引用完整性是:数据库表与表之间的字段是有联系的,有时候一张表的数据需要引用另一张表的数据。则可以使用foreign key 约束

1.1 实体完整性约束
实体:即表中的一行(一条记录)代表一个实体(entity)

实体完整性的作用:标识每一行数据不重复

约束类型:

主键约束(primary key)
唯一约束(unique)
自动增长列(auto_increment)
1.1.1 主键约束(primary key)
注意:每个表中只有一个主键。
特点:数据唯一,且不能为null

示例:

第一种添加方式:

#创建表student
CREATE TABLE student(
     id INT PRIMARY KEY,
     `name` VARCHAR(50)
);

 第二种添加方式:此种方式优势在于,可以创建联合主键

CREATE TABLE student(
       id INT,
       `name` VARCHAR(50),
       PRIMARY KEY(id)
);

  

1.1.2 唯一约束

特点:数据不能重复,可以为null

CREATE TABLE student(
       id INT primary key,
       `name` VARCHAR(50) uniqe
);

  

1.1.3 自动增长列

sqlserver数据库(identity)oracle(sequence)

自动增长不能单独使用,一般需要和主键配合。

给主键添加自动增长的数值,列只能是数值类型

CREATE TABLE student5(
       id INT PRIMARY KEY AUTO_INCREMENT,
       `name` VARCHAR(50) 
);

  

CREATE TABLE student6(
       id INT PRIMARY KEY AUTO_INCREMENT,
       `name` VARCHAR(10)
)AUTO_INCREMENT=10;#从10开始,递增1

  

1.2 域完整性约束
域完整性约束的作用:限制此单元格的数据正确,不对其他单元格起作用,域代表当前单元格

域完整性约束:数据类型、非空约束(not null)、默认值约束(default)

check约束(mysql不支持)check(sex = ‘男’or sex =‘女’)

1.2.1 数据类型

数值类型

技术图片

 

 

 

int:数字中的int等同于java中的int。

bigint:数字中的长整形,等同于java中的long。

float:单晶度浮点型数据

double:双精度浮点型数据

data:短日期

datatime:长日期

clob:字符大对象,最多可以存储4G的字符串,比如:存储一篇文章,存储一个说明。超过255个字符的都要采用clob字符大对象来存储。

blob:二进制大对象。专门用来存储图片、声音、视频等流媒体数据。往blob类型的字段上插入数据的时候,例如插上一个图片、视频等。需要使用io流才行。

varchar:可变长度的字符串,比较智能,节省空间,根据实际长度动态分配空间

优点:节省空间

缺点:需要动态分配空间,速度慢

char:定长字符串,不管实际数据长度是多少,分配固定长度的空间去存储数据,使用不恰当的时候,可能会导致空间的浪费。

优点:不需要动态分配空间,速度快。

缺点:使用不当可能会导致空间的浪费。

.2.2 日期类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

TIMESTAMP类型有专有的自动更新特性

技术图片

 

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET

 

技术图片

 

 

 

CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。

有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。

1.2.3 默认值约束


default

 

CREATE TABLE student(
    Id int primary key,
    Name varchar(50) not null,
    Sex varchar(10) default ‘男‘
);
insert intostudent1 values(1,‘tom‘,‘女‘);
insert intostudent1 values(2,‘jerry‘,default);

  

1.3 引用完整性约束

(参

#成绩表(从表)
CREATE TABLE score(
       id INT,
       score INT,
       sid INT,
       CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student3(sid)
);
---	外键列的数据类型一定要与主键的类型一致

  

照完整性约束)

外键约束:foreing key

  实例:第一种添加外键方式。推荐

#学生表(主表)
CREATE TABLE student3(
       sid INT PRIMARY KEY,
       `name` VARCHAR(50) NOT NULL,
       sex VARCHAR(50) DEFAULT ‘男‘
);

  

数据完整性

标签:har   从表   推荐   完整   class   int   日期类   不重复   可变   

原文地址:https://www.cnblogs.com/fengjd/p/14806132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!