关于关系型数据库的一些基本概念 您所在的位置:网站首页 关系数据库管理系统中的关系的每一列称为 关于关系型数据库的一些基本概念

关于关系型数据库的一些基本概念

2024-07-11 17:17| 来源: 网络整理| 查看: 265

一、数据库 1、数据库简介 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询(CURD)操作。 2、数据库管理系统 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表内的数据。管理数据库操作系统的程序员叫做数据库管理员DBA(database administrator) 3、常见数据库管理系统 MYSQL:开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。Oracle:收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。DB2:IBM公司的数据库产品,收费的。常应用在银行系统中.SQLServer:MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。SyBase:已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。SQLite: 嵌入式的小型数据库,应用在手机端。 4、表 关系数据库表:是对应于一个关系模型的所有的关系的集合。它是一种以关系模式DAO为基础存储数据以及用数字方法处理数据库组织的方法,是目前最为流行的一种数据组织形式。表:是指同一类记录的集合。字段:对应实体的属性,也称做数据项。元组:元组是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,在二维表里,元组也称为记录。相互关系:一个数据库可以包含若干张表;一张表有若干个字段;每张表又有若干条记录(元组),每条记录(元组)对应每个字段都有一个值。

表与类的对应关系:

数据库实体类表对象字段属性

其中,一条记录(元组)就是对应一个对象。

5、视图 视图是一张虚拟表表示一张表的部分数据或多张表的综合数据其结构和数据是建立在对表的查询基础上视图中不存放数据数据存放在视图所引用的原始表中一个原始表,根据不同用户的不同需求,可以创建不同的视图

视图的优点:

筛选表中的行防止未经许可的用户访问敏感数据降低数据库的复杂程度将多个物理数据库抽象为一个逻辑数据库 6、索引

索引是一种有效组合数据的方式,为快速查找到指定记录。索引技术就是为了让数据库更快的定位一条数据所采用的一种查询性能优化技术。

MySQL索引按存储类型分类:B-树索引、哈希索引。 在这里插入图片描述 MySQL索引分类:

索引说明普通索引基本索引类型,允许在定义索引的列中插入重复值和空值唯一索引索引列数据不重复,允许有空值主键索引主键列中的每个值都是非空、唯一的,一个主键将自动创建主键索引复合索引将多个列组合作为索引全文索引支持值的全文查找,允许重复值和空值空间索引对空间数据类型的列建立的索引 7、事务

事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败。

1、MySQL事务操作

sql语句描述start transaction;开启事务commit;提交事务rollback;回滚事务

2、事务特性:ACID

原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。一致性(Consistency):事务前后数据的完整性必须保持一致。隔离性(Isolation):事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

3、事务的并发访问问题 如果不考虑隔离性,事务存在3中并发访问问题。

脏读:一个事务读到了另一个事务未提交的数据。不可重复读:一个事务读到了另一个事务已经提交(update)的数据。引发另一个事务,在事务中的多次查询结果不一致。虚读 /幻读:一个事务读到了另一个事务已经提交(insert)的数据。导致另一个事务,在事务中多次查询的结果不一致。

4、事务并发问题的解决方案:隔离级别

read uncommitted:读未提交,一个事务读到另一个事务没有提交的数据。 a)存在:3个问题(脏读、不可重复读、虚读)。 b)解决:0个问题read committed:读已提交,一个事务读到另一个事务已经提交的数据。 a)存在:2个问题(不可重复读、虚读)。 b)解决:1个问题(脏读)repeatable read:可重复读,在一个事务中读到的数据始终保持一致,无论另一个事务是否提交。 a)存在:1个问题(虚读)。 b)解决:2个问题(脏读、不可重复读)serializable:串行化,同时只能执行一个事务,相当于事务中的单线程。 a)存在:0个问题。 b)解决:3个问题(脏读、不可重复读、虚读) 安全和性能对比 安全性:serializable > repeatable read > read committed > read uncommitted 性能: serializable < repeatable read < read committed < read uncommitted常见数据库的默认隔离级别: MySql:repeatable read 可重复读 Oracle:read committed 读已提交 二、SQL 1、SQL简介

结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。

2、SQL语句分类 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象(结构):数据库,表,列等。关键字:create,alter,drop等数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等。数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等。 3、SQL通用语法 SQL语句可以单行或多行书写,以分号结尾可使用空格和缩进来增强语句的可读性MySQL数据库的SQL语句不区分大小写,关键字建议使用大写同样可以使用/**/的方式完成注释,也可以用 – 的形式完成注释 4、MySQL的数据类型 分类类型名称说明整数类型tinyInt很小的整数smallint小的整数mediumint中等大小的整数int(integer)普通大小的整数小数类型float单精度浮点数double双精度浮点数decimal(m,d)压缩严格的定点数日期类型yearYYYY1901~2155timeHH:MM:SS-838:59:59~838:59:59dateYYYY-MM-DD 1000-01-01~9999-12-3datetimeYYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59timestampYYYY-MM-DD HH:MM:SS 19700101 00:00:01 UTC~2038-01-19 03:14:07UTC文本、二进制类型CHAR(M)M为0~255之间的整数VARCHAR(M)M为0~65535之间的整数TINYBLOB允许长度0~255字节BLOB允许长度0~65535字节MEDIUMBLOB允许长度0~167772150字节LONGBLOB允许长度0~4294967295字节TINYTEXT允许长度0~255字节TEXT允许长度0~65535字节MEDIUMTEXT允许长度0~167772150字节LONGTEXT允许长度0~4294967295字节VARBINARY(M)允许长度0~M个字节的变长字节字符串BINARY(M)允许长度0~M个字节的定长字节字符串 5、MySQL常用约束

约束就是对表或字段的限制,用来确保数据的完整性、唯一性。

1、主键约束(primary key) 主键约束列不允许重复,也不允许空值,相当于非空约束+唯一约束。每个表最多只能有一个主键。

-- 创建表时添加主键约束 create table person( pid int primary key, pname varchar(20) ); -- 创建表时添加联合主键(多个字段组合) create table grade( pid int, /* 学生id */ cid int, /* 课程id */ score double, primary key(pid, cid); /* 联合作为主键 */ ) -- 删除主键约束 alter table person drop primary key; -- 创建表后添加主键 alter table grade add primary key(id, name); -- 修改主键约束 alter table person modify pname varchar(20) primary key

2、外键约束(foreign key) 外键约束是保证表与表之间的参照完整性,外键是构建于主表和从表的两个字段之间的参照关系 格式:alter table 从表名 add [constraint 外键名] foreign key(字段名1[,字段名N]) reference 主表名(字段1[,字段N])

-- 基本外键 -- 主表 create table worker( wid int primary key, name varchar(20) ); -- 从表 create table salary( sid int primary key, smoney double, foreign key(sid) references worker(wid) ); -- 多列外键组合 -- 主表 create table student( sid int, sname varchar(32), primary key(sid, sname) ); -- 从表 create table grade( sid int, cid int, score double, foreign key(sid,cid) references student(sid,sname) ); -- 删除外键约束 alter table student drop foreign key fk_student_score; -- 增加外键约束 alter table grade add foreign key(sid, cid) reference student(sid, sname)

3、唯一约束(unique) 唯一约束是指定表的列或列组合不能重复,保证数据的唯一性。 唯一约束不允许出现重复的值,但是可以为多个null。 同一个表可以有多个唯一约束,多个列组合的约束。 在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。

-- 创建表时添加唯一约束 create table uuser( uid int not null, uname varchar(20), upassword varchar(20), unique(pname,ppassword) ); -- 创建表后添加唯一约束 alter table uuser add unique(uname,upassword) -- 修改唯一约束 alter table uuser modify uname varchar(32) unique; -- 删除唯一约束 alter table uuser drop index uname;

4、非空约束(not null) 非空约束用于确保当前列的值不为空值,强制列不接受null值,如果不向字段添加值,就无法插入新记录或者更新记录。

-- 创建表时添加为空约束 create table person( pid int not null, pname varchar(20) ); -- 增加非空约束 alter table person modify pname varchar(20) not null; -- 取消非空约束 alter table person modify pname varchar(20) null;

5、自增约束(auto_increment) 在每次插入新记录时,数据库自动生成字段的值。自增约束只能是整型值。

-- 创建表时添加自增约束 create table person( pid int auto_increment, pname varchar(32) ); -- 取消自增约束 alter table person modify pid int; -- 添加自增约束 alter table person modify pid int auto_crement; -- 默认auto_incremnt的开始值是1,修改初始值 alter table person auto_increment=100

6、默认值约束(default) 添加一条记录前设置默认值,再添加时可以不用填写该值

-- 创建表时添加默认约束 create table person( pid int primary key, pname varchar(32) default '默认值' ); -- 取消默认约束 alter table person alter column pname drop default; // 默认值独有方法,更快 alter table person modify pname varchar(32); -- 添加默认约束 alter table person alter column pname set default '默认值'; alter table person modify pname varchar(32) default '默认值';


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有