关系数据模型由三部分组成,分为关系数据结构、关系操作、关系完整性约束。
一、关系数据结构
1、基本概念定义
域
域是一组具有相同数据类型的值的集合
关系
关系是多种域的笛卡尔积的子集,关系的每一行对应一个元组,每一列对应一个域。由于域可以相同,为了加以区分,每一列成为属性。n目关系有n个属性。
笛卡尔积
所谓笛卡尔积其实就是一个全排列,所有元组各种方式的组合。
主码
若一个关系有若干个候选码,则选择一个为主码,主码只能有一个。
候选码
若关系中的某一属性组的值能唯一地表示一个元组,而其子集不能,则称该属性组为候选码。
主属性
候选码中的属性均成为主属性。
非主属性
不包含在任何候选码中的属性成为非主属性。
全码
关系模式的所有属性都是这个关系模式的候选码,成为全码。
关系的基本类型
基本关系(基本表)、查询表、视图表
基本表
基本表是实际存在的表,它是实际存储数据的逻辑表示。
查询表
查询表是查询结果对应的表。
视图表
视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
根据上面的定义,如果有下表:
工号 | 姓名 | 住址 | 年龄 | 职位
假设工号、姓名和职位都可以唯一标识一个实体,说明都是候选码,那三者也应该都是主属性,三者根据实体完整性规则不可以取空值,余下是非主属性(还是说选定了工号作为主码以后,工号是主属性,其余是非主属性,工号不可以取空值)
2、基本关系的性质
(1)列是同质的,既每一列中的分量为同一类型的数据,来自同一个域。
(2)不同的列可出自同一个域,称其中的每列为一个属性,不同的属性的要给予不同的属性名。
(3)列的顺序无所谓,即列的次序可以任意交换。
(4)任意两个元组不能完全相同。
(5)行的顺序无所谓,即行的次序可以任意交换。
(6)分量必须取原子值,即每一个分量都必须是不可分的数据库。
二、关系的操作
关系的基本操作就是“增删改查”,即包括查询、插入、删除、修改。
关系操作的对象和结果都是集合。函数返回值的类型为集合,在某些情况下要调用操作函数返回值时需要注意转换类型。
下面的举例是在mysql+php环境中执行。
1、 创建库和表
Mysql创建数据库和表使用create命令。
CREATE DATABASE 数据库名;
create table 表名(
Sno INT UNSIGNED AUTO_INCREMENT,
Sname VARCHAR(100) NOT NULL,
Sdept VARCHAR(40) NOT NULL,
PRIMARY KEY ( Sno )
);
- 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
- AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
- PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。也可以在定义列的时候加上primary key;。
2、查询操作
MySQL 数据库使用SQL SELECT语句来查询数据。
select column_name,column_name from runoob_tbl;
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
where子句
- 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
SELECT * from tb1 WHERE Sname='庞先生'and Sage>'18';
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
查询操作分有单表查询和多表查询,具体文章可参考:
https://blog.csdn.net/weixin_39589033/article/details/104233889 基础查询
3、插入操作
MySQL 表中使用 INSERT INTO SQL语句来插入数据。
insert into tb1 (Sname,Ssex,Sdapt)values ('庞先生','男','计算机系');
- 含有自增字段的列不需要设置数据,它会自动添加。但是在无初始值时需要先插入初始值。
4、更改操作
- 如果我们需要修改或更新 MySQL 中表的数据,我们可以使用 SQL UPDATE 命令来操作。
UPDATE tbl SET Sdapt='C++' WHERE Sname='庞先生';
- 可以同时更新一个或多个字段。
- 可以在 WHERE 子句中指定任何条件。不使用将会更新全部数据。
- 可以在一个单独表中同时更新数据。
- 当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。
ALTER TABLE tbl ADD Sno int(10);//在tb1表中增添int类型的Sno字段;
ALTER TABLE tbl DROP Sno;//使用了 ALTER 命令及 DROP 子句来删除以上创建表的 Sno 字段;
5、删除操作
使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。
DELETE FROM tbl WHERE Sno=3;
- 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
- 你可以在 WHERE 子句中指定任何条件
- 可以在单个表中一次性删除记录。
三、数据类型
数据类型 | 含义 |
---|---|
char(n) | 长度为n的字符串 |
VARCHAR(n) | 最大长度为n的可变长度的字符串 |
INT(n) | 整数-2147483648 到 2147483647 常规 |
SMALLINT(n) | 小整数 -32768 到 32767 常规 |
BIGINT(n) | 大整数-9223372036854775808 到 9223372036854775807 常规 |
FLOAT(n) | 带有浮动小数点的小数字。 |
DOUBLE(n) | 带有浮动小数点的大数字。 |
DATE() | 日期。格式:YYYY-MM-DD |
四、表的操作
1、模式的定义
定义模式实际上是定义一个仓库空间,这个空间中可以包含基本表、视图、索引等,是关系数据库的逻辑体现。比如一个“S-T”模式中可以包含student表、course表、SC表等与之有关的对象。
create schema "S-T" authorization <管理员名>;//创建"S-T"模式
create table "S-T".student(
Sname char(40),
Sno int(10)
);//创建student表,它属于S-T模式
create table "S-T".Course(
Cname char(40),
Cno int(10)
);//创建course表,它属于S-T模式
2、创建基本表
create table student(
id int,
name varchar(32),
gender varchar(2),
class varchar(8)
);
3、查看表
desc tabName student;//查看表结构
show tables student;//查看当前数据库中所有表
show create table tabName;//查看当前数据库表建表语句
show table status student;//查看表的相关信息
4、修改基本表
(1)修改表名
rename table student to user;(可以通过DESC查询是否修改成功)
或者
alter table student rename to user;
(2)增加字段
alter table student add score varchar(32);
在表的第一个位置增加字段:
alter table student add score varchar(32) first;
在表的指定字段之后增加字段:
alter table student add score varchar(32) after name;
(3)修改字段
修改字段的数据类型:
alter table student MODIFY score int(32);
修改字段的名字:
alter table student CHANGE score Score varchar(32);
同时修改字段的名字和属性
alter table student CHANGE score Score int(32);
修改字段的顺序:
alter table student MODIFY 属性名1 数据类型 FIRST|AFTER 属性名2;
alter table student MODIFY score varchar(32) FIRST name varchar(40);
(4)删除字段
alter table student DROP score;
(5)删除表
drop table student;