day05_MySQL学习笔记_02
Posted haha
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day05_MySQL学习笔记_02相关的知识,希望对你有一定的参考价值。
五、数据的完整性
作用:保证用户输入的数据保存到数据库中是正确的。
确保数据的完整性 = 在创建表时给表中添加约束
完整性的分类:
> 实体完整性
> 域完整性
> 引用完整性
1、实体完整性(行级约束)
实体:即表中的一行(一条记录)代表一个实体(entity)。
实体完整性的作用:标识每一行数据不重复。
如何保证数据的完整性呢?答:创建表时给表添加约束。
约束类型:
主键约束(primary key)
唯一约束(unique)
自动增长列约束(auto_increment)
1.1 主键约束(primary key)
注:每个表中至少要有一个主键。 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
特点:主键的数据唯一,且不能为null。
示例:
CREATE DATABASE day05;
USE day05;
第一种添加方式:一个一个的添加
CREATE TABLE student(
id int primary key,
name varchar(50)
);
第二种添加方式:此种方式优势在于,可以创建联合主键。
CREATE TABLE student(
id int,
name varchar(50),
primary key(id)
);
创建联合主键
CREATE TABLE student(
id int,
name varchar(50),
primary key(id,name)
);
第三种添加方式:
CREATE TABLE student(
id int,
name varchar(50)
);
ALTER TABLE student ADD CONSTRAINT pk_id PRIMARY KEY(id); 或者
ALTER TABLE student ADD PRIMARY KEY(id);
CONSTRAINT(constraint:约束)
1.2 唯一约束(unique)
特点:唯一的数据不能重复,但可以为null。
但是理论上不能有多个null。因为多个null不也是数据相同了吗!
注意:MySQL在唯一约束下可以允许有多个null值,Oracle、SQL Server 在唯一约束下不可以有多个null值。
示例:
CREATE TABLE student(
id int primary key,
name varchar(50) unique
);
1.3 自动增长列约束(auto_increment)
给主键添加自动增长的数值,列只能是整数类型,但是如果删除数据之前增长的序号,后面再添加数据的时候序号不会重新开始,而是会接着被删除的那一列的序号开始。
SQL Server数据库软件(identity:身份、特性)
Oracle数据库软件(sequence:序列)
mysql数据库软件(auto_increment:自动递增)
示例:
CREATE TABLE student(
id int primary key auto_increment,
name varchar(50)
);
INSERT INTO student(name) values(\'tom\'); -- 不用写id了,id会自增
INSERT INTO student(name) values(\'bruce\'); -- 不用写id了,id会自增
2、域完整性(列级约束)
域完整性的作用:限制此单元格的数据正确,不对照此列的其它单元格比较。
域代表当前单元格。
域完整性约束:
数据类型约束
非空约束(not null)
默认值约束(default)
check约束(MysSQL不支持check检查约束,例如:check(sex=\'男\' or sex=\'女\'); Oracle中支持)
2.1 数据类型约束(数值类型、日期类型、字符串类型)
2.2 非空约束(not null)
CREATE TABLE student(
id int pirmary key,
name varchar(50) not null,
sex varchar(10)
);
INSERT INTO student values(1,\'null\',男);
2.3 默认值约束(default)
CREATE TABLE student(
id int pirmary key,
name varchar(50) not null,
sex varchar(10) default \'男\'
);
-- 批量插入(MySQL中的方式,别的数据库软件不好使哦)
INSERT INTO student1 values(1,\'jerry\',\'女\');
INSERT INTO student1 values(2,\'tom\',default); -- sex插入的是默认值
INSERT INTO student1 values(3,\'bruce\',null); -- sex插入的是null值
3、引用完整性(参照完整性)
要有外键必须先有主键,外键关联/引用/参照主键,主键和外键的数据类型必须一致。
外键约束:foreign key
例:
-- 学生表(主表)
CREATE TABLE student(
stuid VARCHAR(10) primary key,
stuname VARCHAR(50) not null
);
第一种添加外键约束的方式:在创建表格的时候同时添加外键约束。
-- 分数表(次表/子表)
CREATE TABLE score(
stuid VARCHAR(10), --外键列的数据类型一定要与主键列的数据类型一致
score INT,
courseid INT,
CONSTRAINT fk_stuid FOREIGN KEY(stuid) REFERENCES student(stuid)
);
CONSTRAINT(constraint:约束) FOREIGN KEY(foreign key:外键) REFERENCES(references:引用/参照/关联)
第二种添加外键约束的方式:在表格创建时没有添加外键约束,之后通过修改表格添加外键约束。
-- 分数表(次表/子表)
CREATE TABLE score(
stuid VARCHAR(10), -- 外键列的数据类型一定要与主键列的数据类型一致
score INT,
courseid INT,
);
ALTER TABLE score ADD CONSTRAINT fk_student_score_stuid FOREIGN KEY(stuid) REFERENCES stu(stuid);
select * from student;
insert into student values(\'1001\',\'张三丰\');
insert into student values(\'1002\',\'张无忌\');
insert into student values(\'1003\',\'王尼玛\');
insert into student values(\'1004\',\'王老五\');
select * from score;
insert into score values(\'1001\',\'98\',1);
insert into score values(\'1002\',\'95\',1);
insert into score values(\'1002\',\'67\',2);
insert into score values(\'1003\',\'83\',2);
insert into score values(\'1003\',\'57\',3);
SQL中 PK、UK、DF、CK、FK 的意思:
--主键约束 PK
在表外修改:alter table xxx add constraint PK_字段 primary key(字段);
在表中修改:constraint PK_字段 primary key(字段),
在表中修改:字段 字段类型 primary key,
以上是关于day05_MySQL学习笔记_02的主要内容,如果未能解决你的问题,请参考以下文章