精华内容
下载资源
问答
  • 当前数据库类型不支持此
    千次阅读
    2021-04-01 10:54:05

    前言

    在进行SQL注入之前,首先应该判断数据库的类型,不同的数据库在处理一些函数的时候会有一些微妙的差别,只有判断出是哪种数据库类型,这样才能根据数据库的类型选择合适的函数,更容易实现SQL注入。

    前端与数据库类型

    asp:SQL Server,Access
    .net:SQL Server
    php:MySQL,PostgreSQL
    java:Oracle,MySQL

    根据端口判断

    Oracle:默认端口1521
    SQL Server:默认端口1433
    MySQL:默认端口3306

    根据数据库特有函数来判断

    len和length

    len():SQL Server 、MySQL以及db2返回长度的函数。
    length():Oracle和INFORMIX返回长度的函数。

    version和@@version

    version():MySQL查询版本信息的函数
    @@version:MySQL和SQL Server查询版本信息的函数

    substring和substr

    MySQL两个函数都可以使用
    Oracle只可调用substr
    SQL Server只可调用substring

    根据特殊符号进行判断

    /*是MySQL数据库的注释符
    --是Oracle和SQL Server支持的注释符
    ;是子句查询标识符,Oracle不支持多行查询,若返回错误,则说明可能是Oracle数据库
    #是MySQL中的注释符,返回错误则说明可能不是MySQL,另外也支持--/**/

    根据数据库对字符串的处理方式判断

    1. MySQL
    http://127.0.0.1/test.php?id=1 and 'a'+'b'='ab' 
    http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab' 
    
    1. Oracle
    http://127.0.0.1/test.php?id=1 and 'a'||'b'='ab' 
    http://127.0.0.1/test.php?id=1 and CONCAT('a','b')='ab' 
    
    1. SQL Server
    http://127.0.0.1/test.php?id=1 and 'a'+'b'='ab' 
    

    根据数据库特有的数据表来判断

    1. MySQL(version>5.0)
    http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
    
    1. Oracle
     http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1
    
    1. SQL Server
     http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
    

    根据盲注特别函数判断

    1. MySQL
    BENCHMARK(1000000,ENCODE('QWE','ASD'))
    SLEEP(5)
    
    1. PostgreSQL
    PG_SLEEP(5)
    GENERATE_SERIES(1,1000000)
    
    1. SQL Server
    WAITFOR DELAY '0:0:5'
    
    更多相关内容
  • MySQL 数据类型 在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。 Text 类型: 数据类型 描述 CHAR(size) 保存固定长度的字符串(可包含字母、数字以及...

    MySQL 数据类型

    在 MySQL 中,有三种主要的类型:Text(文本)、Number(数字)和 Date/Time(日期/时间)类型。

    Text 类型:

    数据类型描述
    CHAR(size)保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。
    VARCHAR(size)保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。
    TINYTEXT存放最大长度为 255 个字符的字符串。
    TEXT存放最大长度为 65,535 个字符的字符串。
    BLOB用于 BLOBs(Binary Large OBjects)。存放最多 65,535 字节的数据。
    MEDIUMTEXT存放最大长度为 16,777,215 个字符的字符串。
    MEDIUMBLOB用于 BLOBs(Binary Large OBjects)。存放最多 16,777,215 字节的数据。
    LONGTEXT存放最大长度为 4,294,967,295 个字符的字符串。
    LONGBLOB用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
    ENUM(x,y,z,etc.)允许您输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

    注释:这些值是按照您输入的顺序排序的。

    可以按照此格式输入可能的值: ENUM('X','Y','Z')

    SET与 ENUM 类似,不同的是,SET 最多只能包含 64 个列表项且 SET 可存储一个以上的选择。

    Number 类型:

    数据类型描述
    TINYINT(size)带符号-128到127 ,无符号0到255。
    SMALLINT(size)带符号范围-32768到32767,无符号0到65535, size 默认为 6。
    MEDIUMINT(size)带符号范围-8388608到8388607,无符号的范围是0到16777215。 size 默认为9
    INT(size)带符号范围-2147483648到2147483647,无符号的范围是0到4294967295。 size 默认为 11
    BIGINT(size)带符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。size 默认为 20
    FLOAT(size,d)带有浮动小数点的小数字。在 size 参数中规定显示最大位数。在 d 参数中规定小数点右侧的最大位数。
    DOUBLE(size,d)带有浮动小数点的大数字。在 size 参数中规显示定最大位数。在 d 参数中规定小数点右侧的最大位数。
    DECIMAL(size,d)作为字符串存储的 DOUBLE 类型,允许固定的小数点。在 size 参数中规定显示最大位数。在 d 参数中规定小数点右侧的最大位数。

    Date 类型:

    数据类型描述
    DATE()日期。格式:YYYY-MM-DD

    注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'

    DATETIME()*日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS

    注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'

    TIMESTAMP()*时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的秒数来存储。格式:YYYY-MM-DD HH:MM:SS

    注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

    TIME()时间。格式:HH:MM:SS

    注释:支持的范围是从 '-838:59:59' 到 '838:59:59'

    YEAR()2 位或 4 位格式的年。

    注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

    Hive数据类型

    类型名称大小备注
    TINYINT1字节整数45Y
    SMALLINT2字节整数12S
    INT4字节整数10
    BIGINT8字节整数244L
    FLOAT4字节单精度浮点数1.0
    DOUBLE8字节双精度浮点数1.0
    DECIMAL任意精度带符号小数DECIMAL(4, 2)范围:-99.99到99.99
    BOOLEANtrue/falseTRUE
    STRING字符串,长度不定“a”, ‘b’
    VARCHAR字符串,长度不定,有上限0.12.0版本引入
    CHAR字符串,固定长度“a”, ‘b’
    BINARY存储变长的二进制数据 
    TIMESTAMP时间戳,纳秒精度122327493795
    DATE日期‘2016-07-03’

      复杂类型:

     

    类型名称

    大小示例
    ARRAY存储同类型数据ARRAY< data_type>
    MAPkey-value,key必须为原始类型,value可以是任意类型MAP< primitive_type, data_type>
    STRUCT类型可以不同STRUCT< col_name : data_type [COMMENT col_comment], …>
    UNION在有限取值范围内的一个值UNIONTYPE< data_type, data_type, …>

    Oracle数据类型

    数据类型参数描述
    char(n)n=1 to 2000字节定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
    varchar2(n)n=1 to 4000字节可变长的字符串,具体定义时指明最大长度n,
    这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的所有符号。
    如果数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
    如果你的数据前后有空格,Oracle 8i会自动将其删去。VARCHAR2是最常用的数据类型。
    可做索引的最大长度3209。
    number(m,n)m=1 to 38
    n=-84 to 127
    可变长的数值列,允许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
    如:number(5,2),则这个字段的最大值是99,999,如果数值超出了位数限制就会被截取多余的位数。
    如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
    如:number(3,0),输入575.316,真正保存的数据是575。
    date从公元前4712年1月1日到公元4712年12月31日的所有合法日期,
    Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
    缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
    long可变长字符列,最大长度限制是2GB,用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
    long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    raw(n)n=1 to 2000可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
    raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    long raw可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
    在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    blob
    clob
    nclob
    三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
    LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
    可以执行读取、存储、写入等特殊操作。
    bfile

    在数据库外部保存的大型二进制对象文件,最大长度是4GB。
    这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
    Oracle 8i可以读取、查询BFILE,但是不能写入。
    大小由操作系统决定。‘

    MongoDB数据类型

    数据类型描述
    String字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean布尔值。用于存储布尔值(真/假)。
    Double双精度浮点值。用于存储浮点值。
    Min/Max keys将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Array用于将数组或列表或多个值存储为一个键。
    Timestamp时间戳。记录文档修改或添加的具体时间。
    Object用于内嵌文档。
    Null用于创建空值。
    Symbol符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID对象 ID。用于创建文档的 ID。  (每个文档都有)
    Binary Data二进制数据。用于存储二进制数据。
    Code代码类型。用于在文档中存储 JavaScript 代码。

    Redis数据类型

     

    数据类型数据类型存储的值说 明
    STRING(字符串)可以是保存字符串、整数和浮点数可以对字符串进行操作,比如增加字符或者求子串:如果是整数或者浮点数,可以实现计算,比如自增等
    LIST(列表)它是一个链表,它的每一个节点都包含一个字符串Redis 支持从链表的两端插入或者弹出节点,或者通过偏移对它进行裁剪;还可以读取一个或者多个节点,根据条件删除或者查找节点等
    SET(集合)它是一个收集器,但是是无序的,在它里而每一个元素都是一个字符串,而且是独一无二,各不相同的可以新增、读取、删除单个元素:检测一个元素是否在集合中;计算它和其他集合的交集、并集和差集等;随机从集合中读取元素
    HASH(哈希散列表) 
    它类似于 Java 语言中的 Map,是一个键值对应的无序列表
    可以増、删、査、改单个键值对,也可以获取所有的键值对
    ZSET(有序集合)它是一个有序的集合,可以包含字符 串、整数、浮点数、分值(score),元素 的排序是依据分值的大小来决定的可以增、删、査、改元素,根据分值的范围或者成员 來获取对应的元索
    HyperLogLog(基数)它的作用是计算重复的值,以确定存储的数量只提供基数的运算,不提供返回的功能
    展开全文
  • 数据库的简介与类型

    万次阅读 多人点赞 2018-03-23 10:04:26
    1.1 什么是数据库? 简单的说,数据库(英文Database)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法...

    1.1 什么是数据库?

     

              简单的说,数据库(英文Database)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更简单的形象理解,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。

    1.2 数据库的种类

              早期比较流行的数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。而在当今的互联网中,最常用的数据库模型主要是两种,即关系型数据库和非关系型数据库

    1.3 关系型数据库介绍

    (1)关系型数据库由来

              网络数据库和层次数据库很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户对这两种数据库进行存取时,依然需要明确数据的存储结构,支出存储路径。而关系数据库就可以较好地解决这些问题 

     

    (2)关系型数据库介绍

    关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。 
              Oracle 在数据库领域里上升到了霸主地位,形成每年高达数百亿美元的庞大市场,而MySQL也是不容忽视的数据库,以至于被Oracle重金收购 

    MySQL 互联网市场 
    Oracle 传统企业 

    (3)关系型数据库举例

    表格

    1.4 什么是关系型数据库

    二维表格 

    1. Mysql和Oracle数据库,互联网运维最常用的是MySQL 
    2. 通过SQL结构化查询语句存储数据 
    3. 保持数据一致性方面很强,ACID理论

    1.5 非关系型数据库介绍

    1.6 非关系型数据库诞生背景

    非关系型数据库也被成为NoSQL数据库,NOSQL的本意是“Not Olnly SQL” 
        指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定非关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。 

           随着互联网Web2.0网站的星期,传统的关系型数据库在应付web2,0网站,特别是对于规模日益扩大的海量数据,超大规模和高并发的微博、微信、SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题。 

             例如:传统的关系型数据库IO瓶颈、性能瓶颈都难以有效突破,于是出现了大批针对特定场景,以高性能和使用便利为目的功能特异化的数据库产品。NOSQL(非关系型)类的数据就是在这样的情景下诞生并得到了非常迅速的发展 

    高性能、高并发、对数据一致性要求不高 
            开源的NoSQL体系,如Facebook的Cassandra,Apache的HBase,也得到了广泛认同,Redis,mongb也逐渐越来越受到各类大中小型公司的欢迎和追捧 

    NOSQL非关系型数据库小结: 
    1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 
    2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能 
    3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库) 

    1.7 非关系型数据库种类

    (1)键值(Key-Value)存储数据库

    k1—>数据 
    k2—>数据 
          键值数据库就类似传统语言中使用哈希表,可以通过key来添加、查询或删除数据,因为使用key主键访问,所以会获得很高的性能及扩展性 

            键值(Key-Value)数据库主要是使用一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署、高并发 

    典型产品:Memcached、Redis、MemcacheDB、BerkeleyDB 

    (2)列存储(Column-oriedted)数据库 ======>了解即可,一般公司用不到

       列存储数据库将数据库存储在列族(column family)中,一个列族存储经常被一起查询的相关数据。举个例子,如果我们有一个Person类,我们通常会一起查询他们的姓名和年龄而不是薪资。这种情况下,姓名和年龄就会被放入一个列族中,而薪资则在另一个列族中。
    

    这部分数据库通常用来分布式存储的海量数据,键仍然存在,但是他们的特点是指向了多个列。 
    典型产品:Cassandra,HBase 

    (3)面向文档(Document-Oriented)数据库

            面向文档数据库会将以文档的形式存储。每个文档都是自包含的数据单元,是一系列数据项的集合。每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串、数字和日期等;也可以是复杂的类型,如有序列表和关系对象。数据存储的最小单位是文档,同一个表中存储的文档属性可以是不同的,数据可以使用XML、JSON或者JSONB等多种形式存储 

    典型产品:MorgoDB、CouchDB 
    (4)图形(Graph)数据库

    1.8 常用关系型数据库产品介绍

    1.8.1 oracle数据库

    Oracle前身叫SDL、由Larry Ellison和两个变成任意在1977创办,他们开发了主机的拳头产品,在市场上大量销售。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二 
    Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商 
    主要应用范围:传统大企业、大公司、政府、金融、证券等。 
    版本升级:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c

    关系型数据库分类

    1.8.2 MySQL

     
    MySQL被广泛的应用在Internet上的大中小型网站中。由于体积小速度快总体拥有成本低,开放源代码

    1.8.3 MariaDB数据库

     
        MAriaDB数据库管理系统是MySQL数据库的一个分支,主要由开元社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的潜在风险,因此MySQL开元社区采用分支的方式来避开这个风险。 

    MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎,它使用了PerconaXtraDB(InnoDB的变体)这个版本还包括了PrimeBase XT (PBXT)和Federated X存储引擎。

    1.8.4 SQL Server数据库

          Microsoft SQL Server是微软公司开发的大型关系数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Winodws操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构。SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行

    1.8.5 Access数据库

    Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业只用 
    Access不是数据库语言,只是一个数据库程序,目前最新版本为Office 2007,其特点主要如下: 
    (1)完善地管理各种数据库对象,具有强大的数据组织,用户管理、安全检查等功能 
    (2)强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户管理系统具有传统的XSASE(DBASE、FoxBASE的统称)数据库系统所无法实现的客户服务器(Ckient/Server)结构和响应的数据库安全机制,Access具备了许多先进的大型数据管理管理系统所具备的特征。 
    (3)可以方便地生成各种数据对象,利用存储的数据建立窗体和报表 
    (4)作为Office套件的一部分,可以与Office集成,实现无缝连接 
    (5)能够利用Web检索和发布数据,实现与Internet的连接,Access主要适用于中小企业应用系统,或作为客户机/服务器系统中的客户端数据库。

    1.9 其他不常用关系型数据库

    DB2,PostgreSQL,Informix,Sybase等。这些关系型数据库逐步的淡化了普通运维的实现,特别是互联网公司几乎见不到

     

    常用非关系型数据库产品介绍 

    1.9.1 memcached(key-value)

     
      Memcaced是一个开源的高性能的具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用,最初版本由LiveJoumal 的Brad Fitzpatrick在2003年开发完成。目前全球有非常多的用户都在使用它来架构主机的大负载网站或提升主机的高访问网站的响应速度。注意:Memcache 是这个项目的名称,而Memcached是服务端的主程序文件名。 
    缓存一般用来保存一些进程被存取的对象或数据,通过缓存来存取对象或数据要比在磁盘上存取块很多,前者是内存,后者是磁盘、Memcached是一种纯内存缓存系统,把经常存取的对象或数据缓存在memcached的内存中,这些被缓存的数据被程序通过API的方式被读取,memcached里面的数据就像一张巨大的hash表,数据以key-value对的方式存在。Memcached通过缓存经常被存取的对象或数据,从而减轻频繁读取数据库的压力,提高网站的响应速度,构建出快速更快的可扩展的Web应用。 
    官网:http://memcached.org/ 
    由于memcached为纯内存缓存软件,一旦重启所有数据都会丢失,因此,新浪网基于Memcached开发了一个开源项目Memcachedb。通过为Memcached增加Berkeley DB的特久化存储机制和异步主复制机制,使Memcached具备了事务恢复能力、持久化数据能力和分布式复制能力,memcached非常适合需要超高性能读写速度、持久化保存的应用场景,但是最近几年逐渐被其他的持久化产品替代如Redis

    Memcached小结: 
    1、key-value行数据库 
    2、纯内存数据库 
    3、持久化memcachedb(sina)

    1.9.2 Redis(key-value)

     
            和Memcached类似,redis也是一个key-value型存储系统。但redis支持的存储value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)等。这些数据类型都支持push/pop、add/remove及取交集、并集和差集及更丰富的操作,而且这些操作都是原子性的。为了保证效率,redis的数据都是缓存在内存中。区别是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在基础上实现了master-slave(主从)同步。 

    redis是一个高性能的key-value数据库。redis的出现、很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python、Ruby、Erlang、PHP客户端,使用方便。 
    官方:http://www.redis.io/documentation 
    redis特点: 
    1)支持内存缓存,这个功能相当于memcached 
    2)支持持久化存储,这个功能相当于memcachedb,ttserver 
    3)数据库类型更丰富。比其他key-value库功能更强 
    4)支持主从集群、分布式 
    5)支持队列等特殊功能 
    应用:缓存从存取memcached更改存取redis

    1.9.3 MongoDB(Document-oriented)

     
        MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。他支持的数据库结构非常松散,类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongodb最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 

    特点: 
    高性能、易部署、易使用、存储数据非常方便 
    主要功能特性: 

    1. 面向集合存储,易存储对象类型的数据 
    2. “面向集合”(Collenction-Orented)意思是数据库被分组存储在数据集中,被称为一个集合(Collenction)每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档,集合的概念类似关系型数据库(RDBMS)里的表(table)不同的是它不需要定义任何模式(schema) 
    3. 模式自由 
    4. 模式自由(schema-free)意为着存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。 
    5. 支持动态查询 
    6. 支持完全索引,包含内部对象 
    7. 支持查询 
    8. 支持复制和故障恢复 
    9. 使用高效的二进制数据存储,包括大型对象 
    10. 自动处理碎片、以支持云计算层次的扩展性

    1.9.4 Cassandra(Column-oriented)

      Apache Cassndra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。 
    主要特点: 

    1. 分布式 
    2. 基于column的结构化 
    3. 高伸展性 
    4. Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成一个分布式网络服务,对Cassandra的一个写操作,会被复制到其他节点上去,对Cassandra的读操作。也会被路由到某个节点上面去读取。 

    Cassandir是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomie(分布式的key-value存储系统)更丰富,Cassandra最初由Facebook开发,后转变成了开源项目。

    1.9.5 其他不常用非关系型数据库

    HBase、MemcacheDB、BerkeleyDB、Tokyo Cabinet\Tokyo Tyrant(ttserver) 
    ttserver 持久化输出,缺点存储2千万条 性能下降(由日本人发明)

    2.1 Mysql数据库介绍

    2.2 Mysql数据库介绍

          MySQL是互联网领域里一款最要的,深受广大用户欢迎的开源关系型数据库软件之一、由瑞典MySQL AB公司开发与维护。2006年。MySQL AB公司被SUN公司收购,2008年,SUN公司又被传统数据数据库领域大佬甲骨文(oracle)公司收购,因此,MySQL数据库软件目前属于Oracle公司,成为传统数据库领域老大的又一个数据库产品,甲骨文公司收购MySQL后,使得自身在商业数据库与开源软件领域市场占有份额都跃居第一的位置,这样的格局,引起了很多人的担忧,这种担忧直接导致后来的Mysql分支数据库MariaDB的诞生于发展。 

          MySQL是一种关系型数据库管理系统,关系型数据库的特点是将数据保存在不同的表中,在将这些表放入不同的数据库中,而不是将所有数据统一放在一个大仓库里,这样的设计增加了MySQL的读取速度,灵活性和可管理型也得到了很大提高,访问以及管理MySQL数据库的最常用标准化语言为SQL结构化查询语句

    2.3 为什么选择MySQL数据库

    原因可能有以下几点: 
    (1) MySQL性能卓越、服务稳定,很少出现异常宕机 
    (2) MySQL开放源代码且无版权制约,自主性及使用成本低 
    (3) MySQL历史悠久,社区及用户活跃,遇到问题可以解决 
    (4) MySQL软件体积小,安装使用简单,并且易于文虎,安装及维护成本低 
    (5) MySQL品牌口碑效应,使得企业无需考虑就直接用,LAMP、LEMP流行架构 
    (6) MySQL支持多用操作系统,提供多种API接口,支持多用开发语言,特别对流行的PHP语言有很好的支持

    2.4 MySQL数据库分类与版本升级

    MySQL数据库的官方网站为http://www.mysql.com,其发布的MySQL版本采用双授权政策,和大多数开源产品的路线一样,分为社区版和商业版,而这两个版本又各自分四个版本依次发布,这四个版本为:Alpha版、Beta版、RC版和GA版本

     

    MySQL数据库商业版与社区办区别 

    MySQL商业版与社区办之间的区别在于: 
    1、商业版本组织管理与测试环节控制更严格,稳定性方面,会比社区版本更稳定 
    2、MySQL是成熟产品,商业版与社区办之间性能方面相差不大 
    3、商业版不遵守GPL协议,社区版遵守GPL协议可以免费试用 
    4、使用商业版后可以购买相关的服务,享受7*24小时技术支持以及及时打补丁等服务,但是用户必须为此支持服务费用 
    5、社区版本的维护服务只能靠社区提供,无法像商业版本获得故障及补丁解决服务了,但是社区版是完全免费的方式,社区版的服务质量与时效性等方面就无法与MySQL AB公司提供的服务相比了

    2.5 MySQL数据库四种发布版本介绍

    (1)Alpha版 
    Alpha版一般只在开发的公司内部运行,不对外公开 
    (2)Beta版 
    Beta版一般是完成功能的开发与所有的测试工作之后的产品,不会存在较大的功能或性能BUG,并且邀请或提供给用户体验与测试,以便更全面地测试软件的问题。 
    (3)RC版 
    RC版属于生产环境发布之前的一个小版本或称候选版,是根据Beta版本测试结果,收集到的BUG或缺陷之处等收集到的信息,进行修复和完善之后的一版产品 
    (4)GA版 
    GA版是软件产品正式发布的版本,也称生产版本的产品

    2.6 MySQL产品路线

        为了提高MySQL产品的竞争优势,以及提高性能,降低开发维护成本等原因。同时方便企业用户更精准的选择适合的版本用于主机的企业生产环境中, 

    MySQL在发展到5.1版本系列之后,重新规划为三条产品线

    第一条-5.0.xx到5.1.xx产品线系列介绍 
    MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布:没有增加会影响稳定性的新功能。 MySQL 5.1:Previous stable(production-quality)release MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布:没有增加会影响该系列的重要功能。 

    MySQL 5.0:Older stable release nearing the end of the product lifecycle

    第二条-5.4.xx开始-到了5.7.xx产品线系列介绍 
    为了更好地整合MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法等,从而更好地支持SMP架构,提高性能而做了大量的代码重构,版本编号从5.4.xx开始,目前发展到了5.6.x MySQL 5.5:LatestGeneral Availability(Production)release 
    主流:互联网公司用MySQL.5.5

    第三条-6.0.xx到7.1.xx产品线系列介绍 
    为了更好地推广MySQL Cluster版本,以及提高MySQL Cluster的性能和稳定性,以及功能改进和增加,以及改动MySQL基础功能,使其对Cluster存储引擎提供更有效的支持与优化。版本号为6.0.xx开发。目前发展到7.1.xx 
    http://dev.mysql.com/downloads/mysql 
    官方地址提供数据库下载版本: 
    http://mysql.ntu.edu.tw/Downloads 
    现在国内的镜像站也支持下载: 
    http://mirrors.sohu.com/mysql/ 

    2.7 MySQL数据库软件命名介绍

       MySQL数据库软件的名字是由3个数字和一个后缀组成的版本号。
    

     

    例如,像mysql-5.0.56.tar.gz的版本号解释: 

    (1) 第1个数字(5)是主版本号,描述了文件格式。所有版本5发行都有相同文件格式 
    (2) 第2个数字(0)是发行级别。主版本号和发行级别组合到一起便构成了发型序列号。 
    (3) 第3个数字(56)是在此系列的版本号,随每个新分发递增,通常你需要已经选择的发行(release)的最新版本 
    (4) 后缀显示发行的稳定级别,通过一系列后缀显示如何改进稳定性,可能的后缀有:*alpha版

    2.8 MySQL版本选择最终建议

    企业生产场景选择MySQL数据库建议: 
    1) 稳定版:选择开源的社区版的稳定版GA版本 
    2) 产品线:可以选择5.1或5.5 互联网公司主流5.5,其次是5.1和5.6 
    3) 选择MySQL数据库GA版发布后6个月以上的GA版本。 
    4)要选择前后几个月没有大的BUG修复的版本,而不是大量修复BUG的集中版本 
    5)最好向后较长时间没有更新发布的版本 
    6)要考虑开发人员开发程序使用的版本是否兼容你选的版本 
    7)作为内部开发人员开发测试数据库环境,跑大概3-6个月的事件 
    8)优先企业非核心业务采用新版本的数据库GA版本软件 
    9)向DBA高手请教,或者在及技术氛围好的群里和大家一起交流,使用真正的高手们用过的好用的GA版本产品
    10)若是没有重要的功能BUG或性能瓶颈,则可以开始考虑作为任何任务数据服务的后端数据库软件

    <

    p style=”margin-top: 10px; font-size: 15px; font-family: Helvetica, ‘Hiragino Sans GB’, 微软雅黑, ‘Microsoft YaHei UI’, SimSun, SimHei, arial, sans-serif; line-height: 24px;”>yum/rpm安装适合对数据库要求不太高的场合,例如并发布大,公司内部,企业内部的一些应用场景。大的门户把源码根据企业需求制作成rpm,搭建rpm仓库。

    展开全文
  • 有朋友可能会说,数据库定义一个datetime或timestamp类型的字段,然后在Java代码中获取当前时间并存入数据库不就可以了吗? Date now = new Date(); // 调用insert或update方法创建或更新日期字段。 最近设计新系统...

    日期和时间是每个系统,每个数据库设计必不可少的部分。也是容易被大家忽视的部分。很多开发者可能根本不了解以不同类型存储日期和时间意味着什么。

    有朋友可能会说,数据库定义一个datetime或timestamp类型的字段,然后在Java代码中获取当前时间并存入数据库不就可以了吗?

    Date now = new Date();
    // 调用insert或update方法创建或更新日期字段。
    

    最近设计新系统的数据库,涉及到跨时区的问题,于是专门调研了不同日期时间类型的利弊,也咨询了不少同行使用的情况。这里分享给大家。

    常见的日期时间使用情况有如下几种:字符串、Datetime、Timestamp、Unix timestamp。如果将日期和时间具体拆分细化又可包含DATE、TIME、YEAR,这部分我们这里暂且不过多讨论。

    字符串存储日期

    把日期和时间当做一个字符串进行存储,进而将日期和时间拆分成两个字段,一个字段记录日期(如yyyy-MM-dd),另外一个字段存储时间(如:HH:mm:ss)的形式。

    此种方式就不多说,除非极个别的场景,不建议使用。当使用此种方式进行处理日期,不仅性能有问题,比较、处理、取范围等都是麻烦事。

    之所以提出这种方式,也是提醒大家,如果你的数据库日期字段还在用字符串存储,需要慎重考虑一下了。

    DateTime类型

    DateTime类型存储的值既有日期又有时间。我们直观看到的格式为:yyyy-MM-dd HH:mm:ss。它支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。

    但DateTime中并未存储时区信息,只存储了本地时间。也就是说:如果你将服务器的时区进行修改,数据库中记录的日期和时间并不会对应的变化。

    那么,读出的数据与新存储的数据便是不一致的,也可以说是错误的。

    通常,针对此种情况,如果涉及到跨时区问题,可考虑单独用一个字段来存储时区。

    Timestamp类型

    Timestamp类型:也是既有日期又有时间的数据。存储和显示的格式跟Datetime一样。支持的时间范围是“1970-01-01 00:00:01”到“2038-01-19 03:14:07”。

    Timestamp类型不仅存储了日期和时间,还存储了时区信息。如果以Timestamp类型存储,各数据库的实现会有所不相同,有的进行了内部时区自动转换。

    如果应用服务器的时区和数据库服务器的时区不一致,你无法确定数据库驱动程序会不会自动帮你转换。

    同时,时间范围是Timestamp硬伤。

    Unix timestamp

    由于时区问题,地球上不同地方的人看到太阳升起的时间是不一样的。比如欧洲和北京时差有6-7个小时,当早上8点在北京看到太阳时,欧洲还处于凌晨1-2点。

    除了上面所说的通过Timestamp类型存储包含时区的日期和时间外,还可以通过“绝对时间”来进行计算,单位为秒。

    在计算机中,当前时间是指从一个基准时间(1970-1-1 00:00:00 +0:00)到现在的秒数,用一个整数表示。

    在Java编程语言中我们可以通过如下两种方式(这里单位为毫秒)获取:

    System.currentTimeMillis();
    
    // 需要JDK8以上版本
    Instant.now().toEpochMilli()
    

    那么,我们只需要将表示绝对时间的时间戳通过Long类型或float类型保存到数据库中,当不同时区使用时直接格式化成对应的字符串就可以了。对应数据库类型为Bigint或float。

    关于使用绝对时间戳的好处有以下几项:

    1、数据存储的时区问题不存在了,只是一个绝对的数值。

    2、比较时也很简单,只用比较两个数值的大小或范围即可,范围可采用between(?, ?)形式的SQL。

    3、显示问题也很容易处理,各个展示端,只需要根据所在时区对数值进行转换即可,即便是JavaScript也能正常处理。

    有朋友可能会说,数据库的可读性太差。在调研时我也遇到类似的疑问,后来咨询了架构师的朋友,他说mysql提供了丰富的函数,可以进行转换。

    image

    上图中,数据库存储的是毫秒数,通过FROM_UNIXTIME函数,在查询时将其转换成指定格式即可。如果你的数据库存储的单位为秒,则在SQL中无需除以1000。

    关于日期时间的其他事项

    为了调研数据库日期和时间的设置,也参考了阿里的开发手册,令人疑惑的是阿里使用的竟然是datetime类型。

    image

    后来跟PayPal的朋友沟通之后,便豁然开朗了。他说:阿里的开发手册在我们公司只做参考。

    的确如此,毕竟每个公司的业务范围不同,使用场景也不同。优秀的理念可以参考,但不能照搬。就好比本篇文章,介绍了不同类型的日期和时间存储,而根据你的业务场景选择最适合的那便是最好的。

    我这里最终决定用绝对时间戳来进行处理。

    原文链接:《数据库的几种日期时间类型,你真的会用吗?

    精品SpringBoot 2.x视频教程

    《Spring Boot 2.x 视频教程全家桶》,精品Spring Boot 2.x视频教程,打造一套最全的Spring Boot 2.x视频教程。


    程序新视界

    公众号“ 程序新视界”,一个让你软实力、硬技术同步提升的平台

    微信公众号:程序新视界

    展开全文
  • django数据库字段类型

    千次阅读 2022-04-14 18:52:43
    django模型中常见字段类型
  • SpringBoot+druid同时连接不同类型数据库及PageHelper支持类型库查询分页功能 例子及场景:最近使用SpringBoot+durid需要连接多个数据源:同时支持MySQL、Oracle,遇到问题及处理方法总结如下: 一、...
  • Mysql数据库字段数据类型、长度详解

    千次阅读 2021-01-19 13:21:06
    一、数值类型类型需要的存储量TINYINT1 字节SMALLINT2 个字节MEDIUMINT3 个字节INT4 个字节INTEGER4 个字节BIGINT8 个字节FLOAT(X)4 如果 X < = 24 或 8 如果 25 < = X < = 53FLOAT4 个字节DOUBLE8 个...
  • 2022年数据库类型的发展趋势

    千次阅读 2022-01-21 16:41:21
    一、数据库发展现状 企业中的数据存在多样性:从数据模型划分,结构化、非结构化数据大量并存;从性能角度上看,不同的场景在用户总数并发访问需求、响应时间、数据规模、和安全性等方面的要求都显著不同。随着企业...
  • 数据库类型之时间戳

    千次阅读 2020-06-15 16:30:14
    timestamp数据类型是一个比较特殊的数据类型,他可以自动在你使用程序更新情况下只要你更新了记录timestamp会自动更新时间. 通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项。MySQL也有...
  • 判断jdbc连接的数据库类型

    千次阅读 2018-08-15 10:23:34
    jeeplus框架中,对sqlserver数据库的分页不支持。 需要进行分页工具类的修改,所以需要对数据库类型进行判断 https://blog.csdn.net/yu452148611/article/details/46314699...
  • MySQL数据库中存储引擎和数据类型

    千次阅读 2021-11-17 22:26:18
    在MySQL数据库软件中,虽然通过存储引擎决定数据库对象表的类型,但是如果想创建表,还需要了解数据类型,因为其决定了表中可以存储数据的类型。 存储引擎是MySQL数据库管理系统的一个重要特征,在具体开发时,为了...
  • 易语言支持以ODBC方式和ADO方式操作外部数据库。 一、ODBC与ADO(1)ODBC简介 ODBC(Open Database Connectivity,开放式数据库互联),是目前国际上通用的数据库访问标准,是微软公司开放服务结构中的组成部分,...
  • mybatis支持多种数据库

    千次阅读 2019-03-27 17:29:41
    场景1:一个项目中需要对多个数据库进行连接和操作,并且它们属于不同类型数据库。 解决方案:spring boot yml配置不同的数据库连接,使用不同的驱动包;数据配置类中指定不同的mapper路径,不同mapper下的xml会...
  • 数据库简介及类型

    万次阅读 2018-11-14 16:24:50
    简单的说,数据库(英文Dtabase)就是一个存放数据的仓库,这个仓库是按照一定的数据结果(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据更...
  • 各种数据库的数据类型和使用范围详解介绍

    千次阅读 多人点赞 2020-10-14 11:34:14
    大家都知道数据库中存储的数据有很多中不同的类型。 下面介绍一下几种不同的数据库之间的数据类型。 在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。 Text 类型: 数据类型 描述 CHAR...
  • django系列3—数据库字段类型

    千次阅读 2020-06-15 22:05:08
    字段类型指使用Django ORM创建数据库支持的数据字段类型。 常用字段 (1) AutoField 自增的整型字段,必填参数primary_key=True,则成为数据库的主键,无该字段时,django会自动创建主键id字段。 (2) BigAutoField ...
  • EndNote有个恢复数据库功能「Recover Library」,当EndNote的数据库Library受损或者打开时,利用Recover Library可能是最后的一颗救命稻草。但是EndNote的Recover Library恢复数据库功能并不是所有人都知道,本文...
  • MySQL数据库的基本操作以及数据类型

    千次阅读 多人点赞 2022-03-09 23:58:38
    本篇文章介绍MySQL(数据库)基本的操作和数据类型,如显示服务端的数据库,创建数据库,认识MySQL基本的数据类型
  • 如果当前使用的数据库是PostgreSQL 9.1+,那就无需使用template_postgis之类的模版数据库来创建空间数据库,使用一条扩展命令SQL即可令数据库支持,在pgAdmin中打开SQL视图,输入并执行: CREATE EXTENSION postgis;...
  • 常用数据库的字段类型及大小

    万次阅读 多人点赞 2017-09-10 21:27:07
    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小     ORACLE的数据类型  常用的数据库字段类型如下:  字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes `  VARCHAR2 ...
  • DbGate:一款免费的智能数据库管理工具

    千次阅读 多人点赞 2021-04-23 21:49:21
    DbGate 是一个免费开源的数据库管理工具,提供了多种数据库支持,目前包括 MySQL、PostgreSQL、SQL Server 以及 MongoDB。DbGate 支持不同的平台,包括 Windows、Linux、MacOS 以及 Web 浏览器。DbGate 基于宽松的 ...
  • MySQL数据库面试题(2020最新版)

    万次阅读 多人点赞 2020-03-10 17:20:40
    数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)............
  • 文章目录前言数据库简介优点MySql时间查询MySql查询当前时间MySql查询上一年、上一个月、上一个星期...MySql查询本年、本月、本周... 前言 数据库简介 SqlServser:Microsoft产品,通过良好的ODBC接口可以将Access、...
  • NOSQL数据库习题

    千次阅读 多人点赞 2021-11-14 17:42:24
    第一章、初识NoSQL 一、填空题 1.大数据时代对数据存储的挑战包括高并发读写需求、__高效率存储和访问需求_______、高扩展性。...5.NoSQL数据库主要有四大类型,_键值对存储数据库__、文档存储数据库、__列式存储
  • 内存数据库究竟是如何发挥内存优势的?

    万次阅读 多人点赞 2022-05-09 12:55:57
    内存数据库
  • 【MySQL 数据库】MySQL 的对库的操作及其数据类型

    千次阅读 多人点赞 2021-11-15 03:59:53
    MySQL 中的数据类型2.1 数值类型2.2 字符串类型2.3 日期类型 1. 数据库的操作 注意: SQL 语句区分大小写,以下将以小写的语句来演示 每个 SQL 语句后面都要加英文的分号(个别语句不用加分号,但是推荐无脑全...
  • 常用的数据库的字段类型及大小

    万次阅读 多人点赞 2018-08-28 08:30:15
    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小     ORACLE的数据类型  常用的数据库字段类型如下:  字段类型 中文说明 限制条件 其它说明  CHAR 固定长度字符串 最大长度2000 bytes `  VARCHAR2 可...
  • 神通大型通用数据库

    千次阅读 2020-12-30 15:01:53
    (一)标准SQL· 表提供创建表、修改表名称、字段名称与类型、添加/删除字段等表结构定义操作。单表数据存储量为32T以上。数据表单表最大列数大于1500列。...·多种数据类型提供丰富的数据类型支持,...
  • 数据库(DataBase)简介和类型

    千次阅读 2019-06-14 23:44:33
    什么是数据库数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。 简单来说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(即数据的组织...
  • 关于Qt数据库相关开发的一些经验总结

    千次阅读 多人点赞 2021-07-23 08:40:55
    一、数据库开发经验总结 在数据库相关的应用中,如果仅仅是单机版本,没有特别的需要(比如领导指定,或者需要远程存放数据),强烈建议使用sqlite数据库,这是本人经过无数次的对比测试和N个商业项目应用得出的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 550,723
精华内容 220,289
关键字:

当前数据库类型不支持此