zoukankan      html  css  js  c++  java
  • 数据库初识

    1:什么是数据库?

    数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合

    2:为什么要有数据库?

    1: 数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。 数据库可以对数据进行分类保存,并且能够提供快速的查询。例如,我们平时使用百度搜索内容时,百度也是基于数据库和数据分类技术来达到快速搜索的目的。

    2: 数据库可以有效地保持数据信息的一致性、完整性、降低数据冗余。 可以很好地保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。

    3: 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。 例如,如果把所有员工信息和工资数据都放在磁盘文件上,则工资的保密性就无从谈起。如果把员工信息和工资数据放在数据库中,就可以只允许查询和修改员工信息,而工资信息只允许指定人(如财务人员)查看,从而保证数据的安全性。

    4: 数据库技术能够方便智能化地分析,产生新的有用信息。 例如,超市中把物品销售信息保存在数据库中,每个月销售情况的排名决定了下半月的进货数量。数据库查询的结果实际上产生了新的数据信息。 数据挖掘、联机分析等技术近年来发展非常快,其核心意义在于从一堆数据中分析出有用的信息。

    3:数据库发展史

    
    # 1960s
    计算机上的数据库系统始于20世纪60年代。
    在60年代至70年代这十年中,有两种流行的数据模型:称为CODASYL的网络模型和称为IMS的分层模型。
    其中最成功的数据库系统是SABRE系统,他是IBM用来帮助美国航空公司管理其预订数据的。
    
    # 1970 to 1972
    在这期间,E.F. Codd发表了一篇重要论文,其中他提到建议使用关系型数据库模型,他的这一观点改变了人们对数据库的看法。
    在这种模型中,数据库的模式或逻辑组织与物理信息的存储不再直接连接,这也成为了以后数据库系统的标准原则。
    自此关系型数据库系统开始成为主流。
    
    # 1970s
    1974年至1977年间出现了两个主要的关系型数据库系统原型,它们分别是UBC开发的Ingres和IBM创建的System R.
    Ingres使用了一种名为QUEL的查询语言, 在Ingres 基础上产生了很多数据库软件,如Ingres Corp., Microsoft SQL Server,Sybase,Wang's PACE和Britton-Lee等系统。
    System R使用的是SEQUEL查询语言,它促成了SQL/DS,DB2,Allbase,Oracle和Non-Stop SQL的开发。
    在这十年中,关系型数据库管理系统(RDBMS)也成为公认的术语。
    
    # 1976s
    在这一年P. Chen提出了一种名为Entity-Relationship(ER)的新数据库模型。
    该模型使人们可以专注于数据应用,而不是数据库的逻辑结构设计。
    
    # 1980s
    结构化查询语言(SQL)成为标准查询语言。
    计算机市场的快速增长也推动了数据库市场,随着关系型数据库取得商业上的成功,导致了网络和分层数据库的使用率大幅下降。DB2成为IBM的旗舰数据库产品,同时,IBM PC的推出导致了许多新数据库公司的建立以及PARADOX,RBASE 5000,RIM,Dbase III和IV,OS/2数据库管理器等产品的开发。
    
    # 1990s 早期
    在数据库行业震荡之后,大多数幸存的公司以高价销售复杂的数据库产品。大约在这个时候,出现了用于应用程序开发的新客户端工具,其中包括Oracle Developer,PowerBuilder,VB等。还出现了许多供个人使用的工具,例如ODBC和Excel/Access。对象数据库管理系统(ODBMS)的原型是在20世纪90年代初创建的。
    
    # 1990s 中期
    互联网的出现导致了数据库行业的指数级增长。普通桌面用户开始使用client-server数据库系统来访问包含旧有数据的计算机系统。
    
    # 1990s 后期
    互联网业务的不断扩大,导致了对远程数据库连接器的需求增加,例如Front Page,Active Server Pages,Java Servelets,Dream Weaver,ColdFusion,Enterprise Java Beans和Oracle Developer 2000。使用cgi,gcc,MySQL,Apache和其他系统为Internet带来了开源解决方案。随着POS机使用的增加,OLTP和在OLAP开始逐渐成熟。
    
    # 2000s
    虽然在21世纪初互联网行业泡沫的破灭导致了大量公司破产,但数据库应用仍在继续增长。目前,三大数据库公司分别是微软,IBM和Oracle。
    
    # 当前
    今天,数据库已广泛应用于我们的日常生活中。得益于数据库的发展,使得我们今天能够使用到很多服务,例如云存储、预测天气等。当前的关系型数据库包括Oracle,MySQL和SQL server等巨头,此外,也有许多公司为非关系数据库提供特定的解决方案,如Redis、mongoDB等。
    

    4:数据库本质

    数据库本质其实就是基于socket通信的c/s架构应用程序,其实每个人都可以开发一款数据库软件,因为它仅仅是一个基于网路通信的应用程序

    5:关系型数据和非关系型数据库

    关系型数据库
    	mysql, oracle, db2, access, sql server
    	特点
    		数据之间彼此有关系或者约束
    		存储数据的表现形式通常是以表格存储的
    		每个字段还会有存储类型的限制
    	作用:主要是帮我们存储数据,倾向于硬盘
    非关系型数据库
    	redis, mongodb, mencache
    	特点:
    		存储数据通常都是以k, v键值对的形式
    	作用:主要帮我们做缓存,减轻我们服务器的压力,倾向于内存
    

    6:数据库的几种重要的概念

    数据库服务器:安装有数据库管理系统的计算机
    数据库管理系统:一款软件
    数据库:文件夹
    表:文件
    表头:表格的开头部分,用于对一些问题性质归类
    字段:描述文献的某一特征,数据项
    数据:事实或观察的结果,是对于客观事物的逻辑归纳
    

    7:MySQL不同平台安装(windows,linux)

    忽略

    8:基本的SQL语句

    一:基本命令

    切换库(切换文件夹)

    use 数据库名称;
    use db;
    

    查看当前所在的库名(查看当前文件夹)

    select databases();
    

    查看当前登陆用户和登录主机

    select user();
    

    查看当前时间

    select now()
    
    二:数据库操作(文件夹操作)
    1. CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
          [create_option] ...
      
      create_option: {
          [DEFAULT] CHARACTER SET [=] charset_name
        | [DEFAULT] COLLATE [=] collation_name
      }
      
      create database 数据库名称(文件夹名);
      create database test;
      create database test1 default charset ='utf8';  # 创建数据库时指定编码
      create database test1 default charset gbk;
      
    2. show databases; # 查所有数据名
      show create database test; # 查看指定的数据库创建时的详细信息
      
    3. # 数据库只能修改字符集,不能改名
      alter database test charset 'gbk';
      alter database test charset='utf8'
      
    4. drop database test; #  删除指定的数据库
      
    5. 补充

      information_schem 放内存相关的一些信息

    三:表的操作(文件操作)

    提醒:在操作表(文件)的时候,需要指定所在的库(文件夹)

    1. 每一个字段都需要规定数据类型

      innnodb引擎,创建表会生成两个表[school.frm,school.ibd]

      create table test.school(id int,name char(10));
      create table school(id int,name char(10)); # id的作用是记录表有多少条数据(最好是自增id),不一定准确
      
    2. show tables; # 查看当前库(文件夹)下的表(文件)
      show create table school; # 查看创建school这个表的结构
      describe t1;
      dec t1;
      # 上面两查看表结构
      
      
    3. 基本以上表是不改的,除非设计时有问题

      alter table school add addr char(10); # 为当前库下的school这个表添加addr字段名,并指定char类型
      alter table school modify name char(12); # 为当前库下的school表修改name字段最大能写字符数为char(5)
      alter table school change name Name char(6) # 为当前库下t1的表修改name字段名为NAME, 并指定最大传字符数为chr(6)
      
    4. drop table test.school;
      drop table school;
      
    四:针对数据的增删改查
    1. into 可加,为了语义完整还是加into

      value和values都可以

      insert school values(1,'清华大学') # 为表school中的第一个字段,第二个字段写入数据,一个小括号就是一条记录
      insert into school value(2,'北大')
      insert into school value(3,'武大')
      insert into school value(4,'华中科大')
      
    2. ​ 查出来的结果以后也是一张表,这张表存在硬盘中,查出来是在内存中,表查出来的那一刻开始就已经没了,当前状态的查询没有任何保存手段

      select * from school;查看当前库中的school表中的所有数据(数据量大不能用)
      select name from school; # 当前库中school表属于字段name的数据
      select * from school where id=2; # 查看当前表中的属于id字段等于2的记录,id后面可以指定多种判断条件:=,>,>=,<=,!=
      select * from school where id > 2;
      select * from school where id >=2;
      select * from school where id !=2;
      
      
    3. update school set name = 'xx'  # 在当前数据库下的shchool表中name字段改成jj
      update school set name = 'DSB' where id = 2 ;当前路径将school表中id字段等于2对于的name字段的值修改为DSB.
      
    4. 删除

      delete from school where id=2 # 只是配合where条件来删除符合条件字段中的某几条记录的, 不要用delete清空表, 使用它清空表不能使AUTO_INCREMENT自动自增功能被还原,单纯的只能清楚表中的记录
      delete from t1;  # 将表所有的数据清空
      delete from t1 where id=4;
      truncate t2;  # 将表所有的数据清空(推荐)
      
    5:补充
    h  # 显示帮助信息. 或者输入`help;`
    c  # 清除当前输入语句
    s  # 从服务器获取状态信息。
    G  # 发送命令到mysql服务器,垂直显示结果
    
    

    9:三种类型的SQL语言

    1、DDL语句(data definition language)    数据定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
        # 补充: definition /ˌdefɪˈnɪʃn/ 定义
    
    2、DML语句(Data Manipulation Language)    数据操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
        # 补充:  Manipulation /məˌnɪpjuˈleɪʃn/ 操纵
    
    3、DCL语句(Data Control Language)    数据控制语言: 例如控制用户的访问权限GRANT、REVOKE
        # 补充: 
        GRANT  /ɡrɑːnt/ 授予 允许
        REVOKE /rɪˈvəʊk/ 撤销 吊销 废除
    
    

    10:权限补充# 数据库初识

    1:什么是数据库?

    数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合

    2:为什么要有数据库?

    1: 数据库可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。 数据库可以对数据进行分类保存,并且能够提供快速的查询。例如,我们平时使用百度搜索内容时,百度也是基于数据库和数据分类技术来达到快速搜索的目的。

    2: 数据库可以有效地保持数据信息的一致性、完整性、降低数据冗余。 可以很好地保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。

    3: 数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中在很多情况下也是出于安全的考虑。 例如,如果把所有员工信息和工资数据都放在磁盘文件上,则工资的保密性就无从谈起。如果把员工信息和工资数据放在数据库中,就可以只允许查询和修改员工信息,而工资信息只允许指定人(如财务人员)查看,从而保证数据的安全性。

    4: 数据库技术能够方便智能化地分析,产生新的有用信息。 例如,超市中把物品销售信息保存在数据库中,每个月销售情况的排名决定了下半月的进货数量。数据库查询的结果实际上产生了新的数据信息。 数据挖掘、联机分析等技术近年来发展非常快,其核心意义在于从一堆数据中分析出有用的信息。

    3:数据库发展史

    
    # 1960s
    计算机上的数据库系统始于20世纪60年代。
    在60年代至70年代这十年中,有两种流行的数据模型:称为CODASYL的网络模型和称为IMS的分层模型。
    其中最成功的数据库系统是SABRE系统,他是IBM用来帮助美国航空公司管理其预订数据的。
    
    # 1970 to 1972
    在这期间,E.F. Codd发表了一篇重要论文,其中他提到建议使用关系型数据库模型,他的这一观点改变了人们对数据库的看法。
    在这种模型中,数据库的模式或逻辑组织与物理信息的存储不再直接连接,这也成为了以后数据库系统的标准原则。
    自此关系型数据库系统开始成为主流。
    
    # 1970s
    1974年至1977年间出现了两个主要的关系型数据库系统原型,它们分别是UBC开发的Ingres和IBM创建的System R.
    Ingres使用了一种名为QUEL的查询语言, 在Ingres 基础上产生了很多数据库软件,如Ingres Corp., Microsoft SQL Server,Sybase,Wang's PACE和Britton-Lee等系统。
    System R使用的是SEQUEL查询语言,它促成了SQL/DS,DB2,Allbase,Oracle和Non-Stop SQL的开发。
    在这十年中,关系型数据库管理系统(RDBMS)也成为公认的术语。
    
    # 1976s
    在这一年P. Chen提出了一种名为Entity-Relationship(ER)的新数据库模型。
    该模型使人们可以专注于数据应用,而不是数据库的逻辑结构设计。
    
    # 1980s
    结构化查询语言(SQL)成为标准查询语言。
    计算机市场的快速增长也推动了数据库市场,随着关系型数据库取得商业上的成功,导致了网络和分层数据库的使用率大幅下降。DB2成为IBM的旗舰数据库产品,同时,IBM PC的推出导致了许多新数据库公司的建立以及PARADOX,RBASE 5000,RIM,Dbase III和IV,OS/2数据库管理器等产品的开发。
    
    # 1990s 早期
    在数据库行业震荡之后,大多数幸存的公司以高价销售复杂的数据库产品。大约在这个时候,出现了用于应用程序开发的新客户端工具,其中包括Oracle Developer,PowerBuilder,VB等。还出现了许多供个人使用的工具,例如ODBC和Excel/Access。对象数据库管理系统(ODBMS)的原型是在20世纪90年代初创建的。
    
    # 1990s 中期
    互联网的出现导致了数据库行业的指数级增长。普通桌面用户开始使用client-server数据库系统来访问包含旧有数据的计算机系统。
    
    # 1990s 后期
    互联网业务的不断扩大,导致了对远程数据库连接器的需求增加,例如Front Page,Active Server Pages,Java Servelets,Dream Weaver,ColdFusion,Enterprise Java Beans和Oracle Developer 2000。使用cgi,gcc,MySQL,Apache和其他系统为Internet带来了开源解决方案。随着POS机使用的增加,OLTP和在OLAP开始逐渐成熟。
    
    # 2000s
    虽然在21世纪初互联网行业泡沫的破灭导致了大量公司破产,但数据库应用仍在继续增长。目前,三大数据库公司分别是微软,IBM和Oracle。
    
    # 当前
    今天,数据库已广泛应用于我们的日常生活中。得益于数据库的发展,使得我们今天能够使用到很多服务,例如云存储、预测天气等。当前的关系型数据库包括Oracle,MySQL和SQL server等巨头,此外,也有许多公司为非关系数据库提供特定的解决方案,如Redis、mongoDB等。
    

    4:数据库本质

    数据库本质其实就是基于socket通信的c/s架构应用程序,其实每个人都可以开发一款数据库软件,因为它仅仅是一个基于网路通信的应用程序

    5:关系型数据和非关系型数据库

    关系型数据库
    	mysql, oracle, db2, access, sql server
    	特点
    		数据之间彼此有关系或者约束
    		存储数据的表现形式通常是以表格存储的
    		每个字段还会有存储类型的限制
    	作用:主要是帮我们存储数据,倾向于硬盘
    非关系型数据库
    	redis, mongodb, mencache
    	特点:
    		存储数据通常都是以k, v键值对的形式
    	作用:主要帮我们做缓存,减轻我们服务器的压力,倾向于内存
    

    6:数据库的几种重要的概念

    数据库服务器:安装有数据库管理系统的计算机
    数据库管理系统:一款软件
    数据库:文件夹
    表:文件
    表头:表格的开头部分,用于对一些问题性质归类
    字段:描述文献的某一特征,数据项
    数据:事实或观察的结果,是对于客观事物的逻辑归纳
    

    7:MySQL不同平台安装(windows,linux)

    忽略

    8:基本的SQL语句

    一:基本命令

    切换库(切换文件夹)

    use 数据库名称;
    use db;
    

    查看当前所在的库名(查看当前文件夹)

    select databases();
    

    查看当前登陆用户和登录主机

    select user();
    

    查看当前时间

    select now()
    
    二:数据库操作(文件夹操作)
    1. CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
          [create_option] ...
      
      create_option: {
          [DEFAULT] CHARACTER SET [=] charset_name
        | [DEFAULT] COLLATE [=] collation_name
      }
      
      create database 数据库名称(文件夹名);
      create database test;
      create database test1 default charset ='utf8';  # 创建数据库时指定编码
      create database test1 default charset gbk;
      
    2. show databases; # 查所有数据名
      show create database test; # 查看指定的数据库创建时的详细信息
      
    3. # 数据库只能修改字符集,不能改名
      alter database test charset 'gbk';
      alter database test charset='utf8'
      
    4. drop database test; #  删除指定的数据库
      
    5. 补充

      information_schem 放内存相关的一些信息

    三:表的操作(文件操作)

    提醒:在操作表(文件)的时候,需要指定所在的库(文件夹)

    1. 每一个字段都需要规定数据类型

      innnodb引擎,创建表会生成两个表[school.frm,school.ibd]

      create table test.school(id int,name char(10));
      create table school(id int,name char(10)); # id的作用是记录表有多少条数据(最好是自增id),不一定准确
      
    2. show tables; # 查看当前库(文件夹)下的表(文件)
      show create table school; # 查看创建school这个表的结构
      describe t1;
      dec t1;
      # 上面两查看表结构
      
      
    3. 基本以上表是不改的,除非设计时有问题

      alter table school add addr char(10); # 为当前库下的school这个表添加addr字段名,并指定char类型
      alter table school modify name char(12); # 为当前库下的school表修改name字段最大能写字符数为char(5)
      alter table school change name Name char(6) # 为当前库下t1的表修改name字段名为NAME, 并指定最大传字符数为chr(6)
      
    4. drop table test.school;
      drop table school;
      
    四:针对数据的增删改查
    1. into 可加,为了语义完整还是加into

      value和values都可以

      insert school values(1,'清华大学') # 为表school中的第一个字段,第二个字段写入数据,一个小括号就是一条记录
      insert into school value(2,'北大')
      insert into school value(3,'武大')
      insert into school value(4,'华中科大')
      
    2. ​ 查出来的结果以后也是一张表,这张表存在硬盘中,查出来是在内存中,表查出来的那一刻开始就已经没了,当前状态的查询没有任何保存手段

      select * from school;查看当前库中的school表中的所有数据(数据量大不能用)
      select name from school; # 当前库中school表属于字段name的数据
      select * from school where id=2; # 查看当前表中的属于id字段等于2的记录,id后面可以指定多种判断条件:=,>,>=,<=,!=
      select * from school where id > 2;
      select * from school where id >=2;
      select * from school where id !=2;
      
      
    3. update school set name = 'xx'  # 在当前数据库下的shchool表中name字段改成jj
      update school set name = 'DSB' where id = 2 ;当前路径将school表中id字段等于2对于的name字段的值修改为DSB.
      
    4. 删除

      delete from school where id=2 # 只是配合where条件来删除符合条件字段中的某几条记录的, 不要用delete清空表, 使用它清空表不能使AUTO_INCREMENT自动自增功能被还原,单纯的只能清楚表中的记录
      delete from t1;  # 将表所有的数据清空
      delete from t1 where id=4;
      truncate t2;  # 将表所有的数据清空(推荐)
      
    5:补充
    h  # 显示帮助信息. 或者输入`help;`
    c  # 清除当前输入语句
    s  # 从服务器获取状态信息。
    G  # 发送命令到mysql服务器,垂直显示结果
    
    

    9:三种类型的SQL语言

    1、DDL语句(data definition language)    数据定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
        # 补充: definition /ˌdefɪˈnɪʃn/ 定义
    
    2、DML语句(Data Manipulation Language)    数据操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
        # 补充:  Manipulation /məˌnɪpjuˈleɪʃn/ 操纵
    
    3、DCL语句(Data Control Language)    数据控制语言: 例如控制用户的访问权限GRANT、REVOKE
        # 补充: 
        GRANT  /ɡrɑːnt/ 授予 允许
        REVOKE /rɪˈvəʊk/ 撤销 吊销 废除
    
    

    10:权限补充

  • 相关阅读:
    30天敏捷结果(26): 如何解决问题
    30天敏捷结果(30):提升敏捷结果
    30天敏捷结果(27):做些有重要意义的事
    STM32笔记A
    嵌入式linux驱动开发入门总结
    2014年个人计划
    迄今为止见过最好的职业规划
    30天敏捷结果(28):撰写你的个人使命
    C语言深度解剖读书笔记
    基于 SQLite 数据库的 C# 实体模型的实现
  • 原文地址:https://www.cnblogs.com/wait59/p/13634270.html
Copyright © 2011-2022 走看看