三、数据库表的约束和表之间的关系(笔记)

目录

一、数据完整性

1.1数据库完整性

1.2实体完整性 

1.2.1 主键约束(primary key)

1.2.2唯一约束(unique)

1.2.3自动增长列(auto_increment)

1.3域完整性

1.3.1数据类型约束

1.3.2非空约束

1.3.3默认值约束

1.4引用完整性

二、多表查询

2.1多表关系

2.1.1一对多,多对一

2.1.2多对多

2.1.3一对一关系

2.2多表查询

2.2.1合并结果集

2.2.2连接查询

 2.2.2.1 内连接

2.2.2.2 外连接

2.2.2.3自然连接

2.2.3子查询

扩展:    

优化


一、数据完整性

1.1数据库完整性

 用来确保数据库中的数据有效,保证其有效性和准确性,通过添加约束来实现

完整性分类:

         - 实体完整性(行的完整性)

         - 域完整性(列完整性)

        - 引用完整性(关联表之间的完整性如学生表和成绩表):
                主键约束:primary key
                唯一约束:unique [key]
                非空约束:not null
                默认约束:default
                自动增长:auto_increment
                外键约束: foreign key

1.2实体完整性 

        实体:即表中的一行(一条记录)代表一个实体(entity)
        实体完整性的作用:标识每一行数据不重复。

        约束类型:
        主键约束(primary key)
        唯一约束(unique)
        自动增长列(auto_increment)

1.2.1 主键约束(primary key)

        注:每个表中要有一个主键,数据不允许为空
        特点:数据唯一,且不能为null

        第一种添加方式:(id设为了主键)直接在要设为主键的属性后添加primary key

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) );

        第三种添加方式:建表后用alter table添加主键

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

1.2.2唯一约束(unique)

        特点:数据不能重复,允许一次为空

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

1.2.3自动增长列(auto_increment)

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

         其他数据库中的名字:
                sqlserver数据库 (identity-标识列)
                oracle
数据库(sequence-序列)

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

1.3域完整性

        作用:限制此列的数据以确保数据正确

        如:性别只能是男女,可以添加约束确保域完整性

        域完整性约束:
                数值类型约束
                非空约束(not null)
                默认值约束(default)
                check
约束(mysql不支持)check(sex='' or sex='')

1.3.1数据类型约束

数值类型
类型
大小 范围(有符号) 范围(无符号) 用途
tinyint
1 字节
(-128 127)
(0 255)
小整数值
smallint
2 字节
(-32 768 32 767)
(0 65 535)
大整数值
mediumint
3 字节
(-8 388 608 8 388 607)
(0 16 777 215)
大整数值
INT
4 字节
(-2 147 483 648 2 147 483 647)
(0 4 294 967 295)
大整数值
bigint
8 字节
(-9 233 372 036 854 775 808 9 223 372 036 854 775 807)
(0 18 446 744
073 709 551 615)
极大整数值
float
4 字节
(-3.402 823 466 E+38 -1.175 494 351 E-38) 0 (1.175 494 351 E-38 3.402
823 466 351 E+38)
0 (1.175 494 351 E-38 3.402 823 466 E+38)
单精度浮点数值
double
8 字节
(-1.797 693 134 862 315 7 E+308 -2.225 073 858 507 201 4 E-308) 0
(2.225 073 858 507 201 4 E-308
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值