MYSQL之概念基础篇

Wesley13
• 阅读 567

1数据库概述

1.1 数据管理技术的产生和发展

数据库技术是应数据库管理任务的需要而产生的。20世纪50年代中期以前,计算机主要是用于科学计算。当时的硬件状况是,外存只有纸带、卡片、磁带,没有磁盘等可以直接存取的设备;软件状况是,没有操作系统,没有管理数据的专门软件;数据处理的方式通常是批处理。对数据的管理主要通过人力来完成,这一阶段我们称为数据的人工管理阶段。在这一阶段具有以下特点

  • 数据不保存 由于当时计算机主要用于科学计算,一般不需要将数据进行长期保存,只是在计算某一个题目时,将数据进行输入,用完便撤走。
  • 应用程序管理数据
    应用程序所需的数据都有程序设计者区去进行设计、说明、定义和管理,没有相应的软件系统去负责数据的管理工作。
  • 数据不共享
    数据是面向应用程序的,一组数据只能对应一个应用程序。当多个应用程序设计多个数据时必须各自相互定义,无法互相利用、互相参照。
  • 数据不具有独立性
    数据的物理结构和逻辑结构发生变化后,必须对应用程序作出修改,数据完全依赖于应用程序,数据缺乏独立性。

20世纪50年代后期到60年代中期,这时候硬件方面已有了磁盘、磁鼓等直接存取的设备;软件方面已经有了专门的数据管理软件,一般称为文件系统;处理方法上不仅有批处理,而且能够联机实现处理。这一阶段用文件管理系统管理软件具有以下特点:

  • 数据可以长期保存
    计算机大量用于数据处理,数据需要长期的留在外存进行增删改查操作。
  • 由文件系统长期保存数据
    使用文件系统进行管理解决了数据结构化的问题,但是仍然存在数据共享性差数据独立性差的缺点

20世纪60年代后期以来,计算机管理的对象规模越来越大,应用范围越来越广泛,数据量急剧增加,同时多种应用、多种语言相互覆盖地共享数据集合的要求越来越高。而同时硬件已经有了大容量磁盘,硬件价格下降,软件价格上升。基于以上背景数据库管理系统应运而生。
与人工管理阶段和文件系统相比,数据库的特点主要有以下几个方面:

  • 数据结构化
    数据库系统实现整体数据的结构化,这是数据库的主要特征也是数据库系统和文件系统的本质区别。
  • 数据共享性高冗余度低且易于扩充
  • 数据独立性高
  • 数据由数据库统一组织和管理

然后随着计算机技术的发展,人们需要存储和处理的数据规模越来越大,存储的对象关系和内部结构越来越复杂,传统面型对象的关系型数据库也逐渐表现出来了诸多不足如:

  • 面向机器的语法数据模型
    高度结构化、只能存储离散数据及有限的数据之间关系、语义表达能力弱、缺乏数据抽象。
  • 数据类型简单固定
    如:整数、浮点数、字符串、日期等;只支持固定的字符集,不能依据应用所需来扩展其类型集.
  • 数据操纵语言与程序语言失配
    SQL是描述性语言,而程序设计语言是指令性语言,不能直接使用关系数据结构。
  • 存储和管理的对象有限 缺乏表达和处理知识的能力 因此新一代数据技术逐渐出现,当然就现在而言新数据库技术发展并不完善但我们从现在一些发展趋势已经可以隐约猜测出未来新数据技术所具有的特点。
  • 应支持数据管理、对象管理和知识管理;必须支持OO数据模型。
  • 必须保持和继承第二代数据库系统的技术:即必须保持第二代数据库系统的非过程化数据存取方式和数据独立性。
  • 必须对其它系统开放. 数据库系统的开放性表现为:支持数据库语言标准;支持标准网络协议;系统具有良好的可移植性,可连接性,可扩展性和可互操作性。

纵观数据库的发展历史我们不难看出数据库的发展与应用领域和相关技术发展密不可分 MYSQL之概念基础篇

1.1.2 总结

MYSQL之概念基础篇

1.2 数据模型

数据库按照数据结构来组织、存储和管理数据,实际上,数据库一共有三种模型:层次模型网状模型关系模型层次模型 通过上下级层次结构来组织数据如 MYSQL之概念基础篇

网状模型 数据节点与数据节点直接相互连接,使得整体看起来像数据结构中的图 MYSQL之概念基础篇

关系模型 把所有数据看做一个二维表格所有的数目都可以通过行号和列号来进行确定 MYSQL之概念基础篇

1.2 数据类型

MYSQL之概念基础篇

1.3 SQL

SQL是结构化查询语言的缩写它由以下几个部分构成 DDL:DATA DEFINE LANGUAGE DDL允许用户定义数据,也就是创建表、删除表、修改表结构这些操作(即常见的增删改查操作) DML:Data Manipulation Language DML为用户提供添加、删除、更新数据的能力,这些是应用程序对数据库的日常操作。 DQL:Data Query Language DQL:允许用户查询数据,这也是通常最频繁的数据库日常操作。 DCL:Data Control Language DCL:数据控制语言 (Data Control Language) 在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、存储程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。

1.4 数据库演化趋势

MYSQL之概念基础篇

1.5 关系

表的每一行称为记录(Record),记录是一个逻辑意义上的数据。表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。 例如students表的两行记录:

MYSQL之概念基础篇 MYSQL之概念基础篇

1.5.1 主键

主键定义: 主键,又称主码(英语:primary keyunique key)。数据库表中对储存数据对象予以唯一和完整标识的数据属性的组合。一个数据表只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。 但是一般来唯一和完整标识的数据属性的组合可能不止一个,但是也不是说满足这个条件的属性的组合都可以设置为主键。在实际开发和生产的过程中它至少需要满足一个基本原则,即不使用和业务相关的字段作为主键。因为在实际开发和生产的过程中,业务逻辑可能需要频繁修改从而导致与业务逻辑相关的字段也可能需要频繁修改,如果一旦以业务相关字段作为主键,那么该字段的频繁修改会给表的维护和扩展带来极大的障碍,因此在开发过程中我们不使用任何业务相关的字段作为主键,一般情况下则是选择一个和业务逻辑无关的字段作为主键。我们常把这个字段命名为id常见的可作为id字段的类型有: 1.自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键; 2.全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。 MYSQL之概念基础篇 设置主键的操作:

ALTER TABLE students ADD PRIMARY KEY(id)

MYSQL之概念基础篇 当然在建表的过程中也可以设置主键,其最终效果与表建立之后再单独设置主键效果是一样的。 建表过程中同时设置主键

CREATE TABLE stdudents(
id INT PRIMARY KEY,
class_id INT,
name CHAR(5),
gender CHAR(1),
score DOUBLE
) ;

删除主键的操作:

ALTER TABLE students DROP PRIMARY KEY;

1.5.2外键

外键定义: 如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键设置外键:

ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

删除外键:

ALTER TABLE students
DROP FOREIGN KEY fk_class_id;

1.6索引

索引定义: 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构 增加单列索引:

ALTER TABLE students
ADD INDEX idx_score (score);

增加多列索引:

ALTER TABLE students
ADD INDEX idx_name_score (name, score);

创建唯一索引:

ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);

删除索引:

ALTER TABLE students
DROP INDEX idx_name_score (name, score);
或者
DROP INDEX idx_name_score ON students
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这