数据的完整性

数据的完整性

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

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

数据的完整性是指数据的可靠性和准确性,数据完整性类型一般分三种: 
1.实体完整性:通过唯一约束,主键约束或标识列属性来实现,如:PRIMARY KEY(主键约束)、UNIQUE 唯一值约束,自动增长列(auto_increment)。 
2.域完整性:通过数据类型(如数值类型、日期类型、字符串类型等限制类型)、非空约束(NOT NULL)、默认值定义(DEFAULT)、CHECK检查(MySQL不支持check约束)来实现。 
3.引用完整性:又叫做参照完整性,通过外键约束(FOREIGN KEY)来实现。引用完整性保证键值在所有表中一致,不能引用不存在的值。

1.实体完整性

实体:即表中的一行(一条记录)代表一个实体(entity)。

实体完整性包含主键约束和唯一值约束,作用:标识每一行数据不重复。

1.1 主键约束 (PRIMARY KEY)

  • 每个表中都要有一个主键
  • 特点:数据唯一,且不能为null

示例:

第一种添加方式:

CREATE TABLE student(
id int primary key,
name varchar(50)
);

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

CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);

 一张表只能设置一个主键,值必须唯一,不允许为空,可以设置一列,也可以设置多列为复合主键(那么就是多列组合唯一,且都不为空),主键就是索引。

CREATE TABLE student(
classid int,
stuid int,
name varchar(50),
primary key(classid?stuid)
);

第三种添加方式:

CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student ADD PRIMARY KEY (id);

1.2 唯一值约束(unique)

一张表一列添加唯一值约束,保证数据值不重复,也可以有多个列添加唯一值约束,只允许一条记录为空值。

CREATE TABLE student(
Id int primary key,
Name varchar(50) unique
);

注意: 
    如果表中现有记录是重复的,该列不允许添加唯一性约束。

1.3 自动增长列(auto_increment)

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

CREATE TABLE student(
Id int primary key auto_increment,
Name varchar(50)
);
INSERT INTO student(name) values(‘tom’);

2.域完整性

    域完整性的作用:限制此单元格数据正确,不对照此列的其他单元格比较域代表当前单元格

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

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

  • 2.1 数据类型:(数值类型、日期类型、字符串类型)
  • 2.2 非空约束:NOT NULL    确保当前列的值不为空。
  • 2.3 默认值约束:default
CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10)
);
INSERT INTO student values(1,’tom’,null);

注意: 
NULL表示所有的类型的值都可以是NULL,但是空字符串是不等于NULL的,0也不等于NULL,“ ”空格字符更不等于NULL。

 默认值约束:default  插入新的记录时,如果该字段没有赋值,就使用默认值。

CREATE TABLE student(
Id int pirmary key,
Name varchar(50) not null,
Sex varchar(10) default ‘?’
);
insert intostudent1 values(1,'tom','?');
insert intostudent1 values(2,'jerry',default);
CREATE TABLE student(
Id INT pirmary KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT ‘男’
);

INSERT INTO student1 VALUES(1,'tom','女');
INSERT INTO student1 VALUES(2,'jerry',DEFAULT);
#给表中一列添加默认值约束:
ALTER TABLE student MODIFY COLUMN name VARCHAR(50) DEFAULT '张三';
#删除表中一列的默认值约束:
ALTER TABLE student MODIFY COLUMN name VARCHAR(50) DEFAULT NULL;

3. 引用完整性(参照完整性)

外键约束:FOREIGN KEY 
例:

CREATE TABLE student(
sid INT pirmary KEY,
name VARCHAR(50) NOT NULL,
sex VARCHAR(10) DEFAULT ‘男’
);

CREATE TABLE score(
    id INT,
    score INT,
    sid INT , -- 外键列的数据类型一定要与主键的类型一致
    CONSTRAINT fk_score_sid FOREIGN KEY (sid) REFERENCES student(sid)
);
#删除外键
ALTER TABLE score DROP FOREIGN KEY fk_score_sid;

第二种添加外键方式:

ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid) REFERENCES stu(sid);
  • 注意: 

外键所引用表的列必须是主键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值