精华内容
下载资源
问答
  • mysql数据库事务类型

    千次阅读 2017-09-25 16:36:01
    数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别。 隔离性分为四个级别: 1读未提交:(Read Uncommitted) 2读已提交(Read Committed) 大多数数据库默认的隔离...

     

    数据库事务有不同的隔离级别,不同的隔离级别对锁的使用是不同的,锁的应用最终导致不同事务的隔离级别。

    隔离性分为四个级别:

     1读未提交:(Read Uncommitted)

     2读已提交(Read Committed) 大多数数据库默认的隔离级别

     3可重复读(Repeatable-Read) mysql数据库所默认的级别

     4序列化(serializable


    四个级别的具体实现和不同的请下面细读:

     首先程序是可以并发执行的,同样,在MySQL中,一个表可以由两个或多个进程同时来读写数据,这是没有问题的。

     比如,此时有两个进程来读数据,这也没什么问题,允许。但是如果一个进程在读某一行的数据的过程中,另一个在进程又往这一行里面写数据(改、删),那结果会是如何?同样,如果两个进程都同时对某一行数据进行更改,以谁的更改为准?那结果又会怎样,不敢想象,是不是数据就被破坏掉了。所以此时是冲突的。

     既然会冲突就要想办法解决,靠谁来解决,这时候就是靠锁机制来维护了。怎么使用锁来使他们不冲突?

     在事务开始的时候可以给要准备写操作的这一行数据加一个排它锁,如果是读操作,就给该行数据一个读锁。这样之后,在修改该行数据的时候,不让其他进程对该行数据有任何操作。而读该行数据的时候,其他进程不能更改,但可以读。读或写完成时,释放锁,最后commit提交。这时候读写就分离开了,写和写也就分离开了。

     注意:此时加锁和释放锁的过程由mysql数据库自身来维护,不需要我们人为干涉。mysql开发者给这个解决冲突的方案起了一个名字叫做:读未提交:(Read Uncommitted)。这也就是事务的第一个隔离性。


    但是这个程度的隔离性仅仅是不够的。看下面的测试结果:

     1A修改事务级别为:未提交读。并开始事务,对user表做一次查询

     

     2)B事务更新一条记录

     

     3)此时B事务还未提交,A在事务内做一次查询,发现查询结果已经改变

     

      4B进行事务回滚

     

      5A再做一次查询,查询结果又变回去了

     

     由试验得知:在一个进程的事务当中,我更改了其中的一行数据,但是我修改完之后就释放了锁,这时候另一个进程读取了该数据,此时先前的事务是还未提交的,直到我回滚了数据,另一个进程读的数据就变成了无用的或者是错误的数据。我们通常把这种数据叫做脏数据,这种情况读出来的数据叫做賍读。

     怎么办?依然是靠锁机制。无非是锁的位置不同而已,之前是只要操作完该数据就立马释放掉锁,现在是把释放锁的位置调整到事务提交之后,此时在事务提交前,其他进程是无法对该行数据进行读取的,包括任何操作。那么数据库为此种状态的数据库操作规则又给了一个名字叫做:读已提交(Read Committed),或者也可以叫不可重复读。这也就是事务的第二个隔离性。

     在某些情况下,不可重复读并不是问题,比如我们多次查询某个数据当然以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,例如对于同一个数据AB依次查询就可能不同,AB就可能打起来了……

    继续看下面的测试结果:

     1)把隔离性调为READ-COMMITTED(读取提交内容)设置A的事务隔离级别,并进入事务做一次查询

     

     2B开始事务,并对记录进行修改


     3A再对user表进行查询,发现记录没有受到影响

     

     4B提交事务


     5A再对user表查询,发现记录被修改

     

     试验进行到这里,你会发现,在同一个事务中如果两次读取相同的数据时,最后的结果却不一致。这里我们把这种现象称为:不可重复读。因为在第一个事务读取了数据之后,此时另一个事务把该数据给修改了,这时候事务提交,那么另一个事务在第二次读取的时候,结果就不一样,一个修改前的,一个是修改后的。

     但是细心的你会发现,既然你说此种隔离性是在事务提交后才释放锁,那么在试验过程中,在该数据未提交前,另一个事务为什么也是仍然可以读取的呀。是我说错了吗?不是的,在这里mysql使用了一个并发版本控制机制,他们把它叫做MVCC,通俗的也就是说:mysql为了提高系统的并发量,在事务未提交前,虽然事务内操作的数据是锁定状态,但是另一个事务仍然可以读取,大多数数据库默认的就是这个级别的隔离性。但mysql不是。

     而且不只是在更新数据时出现这个问题,在插入数据时仍然会造成类似的这样一种现象:mysql虽然锁住了正在操作的数据行,但它仍然不会阻止另一个事务往表插入新行新的数据。比如:一个事务读取或更新了表里的所有行,接者又有另一个事务往该表里插入一个新行,在事务提交后。原来读取或更改过数据的事务又第二次读取了相同的数据,这时候这个事务中两次读取的结果集行数就不一样。原来更新了所有行,而现在读出来发现竟然还有一行没有更新。这就是所谓的幻读。

    为了防止同事务中两次读取数据不一致,(包括不可重读和幻读),接下来该如何继续做呢?!

     mysql依然采取的是MVCC并发版本控制来解决这个问题。具体是:如果事务中存在多次读取同样的数据,MySQL第一次读的时候仍然会保持选择读最新提交事务的数据,当第一次之后,之后再读时,mysql会取第一次读取的数据作为结果。这样就保证了同一个事务多次读取数据时数据的一致性。这时候,mysql把这种解决方案叫做:可重复度(Repeatable-Read),也就是上述所写的第三个隔离性,也是mysql默认的隔离级别。

    注意:幻读和不可重复读(Read Committed)都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体(比如数据的个数)。


    说到这里,真的就完事了吗?到这里其实mysql并未完全解决数据的一致性问题。只是在读取上做了手脚,解决了传统意义上的幻读和不可重复读。

    例子:1 A事务开启,B事务开启。

      2 B事务往表里面插入了一条数据,但还并未提交。

      3 A事务开始查询了,并没有发现B事务这次插入的数据。然后此时B事务提交了数据。

      4 于是乎,A事务就以为没有这条数据,就开始添加这条数据,但是却发现,发生了数据 重复冲突。

     最后这个时候,该我们的最后一种隔离级别也是最高的隔离级:别序列化(serializable)登场了。

     该隔离级别会自动在锁住你要操作的整个表的数据,如果另一个进程事务想要操作表里的任何数据就需要等待获得锁的进程操作完成释放锁。可避免脏读、不可重复读、幻读的发生。当然性能会下降很多,会导致很多的进程相互排队竞争锁。

     后记:以上所说的四种隔离性的锁机制应用是数据库自动完成的,不需要人为干预。隔离级别的设置只对当前链接有效。对于使用MySQL命令窗口而言,一个窗口就相当于一个链接,当前窗口设置的隔离级别只对当前窗口中的事务有效




    展开全文
  • 常用数据库的字段类型及大小

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

    Oracle/MSSQL/Mysql 常用数据库的字段类型及大小

    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述 
    这里写图片描述

    这里写图片描述

    ORACLE的数据类型 
    常用的数据库字段类型如下: 
    字段类型 中文说明 限制条件 其它说明 
    CHAR 固定长度字符串 最大长度2000 bytes ` 
    VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749 
    NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes 
    NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes 
    DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题 
    LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作 
    RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 
    LONG RAW 可变长度的二进制数据 最大长度2G 同上 
    BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G 
    NCLOB 根据字符集而定的字符数据 最大长度4G 
    BFILE 存放在数据库外的二进制数据 最大长度4G 
    ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1 
    NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes 
    NUMBER(P,S) 数字类型 P为整数位,S为小数位 
    DECIMAL(P,S) 数字类型 P为整数位,S为小数位 
    INTEGER 整数类型 小的整数 FLOAT 浮点数类型 
    NUMBER(38),双精度 
    REAL 实数类型

    NUMBER(63),精度更高

    Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。 
    字符数据类型 
    CHAR CHAR数据类型存储固定长度的子符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度,它的默认长度则设置为1.如果对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。 
    VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字符。 
    因为VARCHAR2数据类型只存储为该列所赋的字符(不加空格),所以VARCHAR2需要的存储空间比CHAR数据类型要小。 
    Oracle推荐使用VARCHAR2 
    NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指 定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集(National Language Set,简称NLS)]。NCHAR和NVARCHAR2类型的列使用辅助字符集。 
    在Oracle9i中,可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。 
    LONG LONG数据类型可以存放2GB的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。 
    CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。 
    数字数据类型 
    Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。 
    NUMBER数据类型可以有两个限定符,如: 
    column NUMBER ( precision, scale) 
    precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。 
    scale表示数字小数点右边的位数,scale默认设置为0.  如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。 
    日期数据类型 
    Oracle标准日期格式为:DD-MON-YY HH:MI:SS 
    通过修改实例的参数NLS_DATE_FORMAT,可以改变实例中插入日期的格式。在一个会话期间,可以通过ALTER SESSION SQL命令来修改日期,或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。 
    其它的数据类型 
    RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象,如位图。 RAW数据类型可占用2KB的空间,而LONG RAW数据类型则可以占用2GB大小。 
    ROWID ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。 
    ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。 
    列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID. 
    LOB 
    LOB(大型对象)数据类型,可以保存4GB的信息。LOB有以下3种类型: 
    。CLOB,只能存储字符数据 
    。NCLOB,保存本地语言字符集数据 
    。BLOB,以二进制信息保存数据 
    可以指定将一个LOB数据保存在Oracle数据库内,还是指向一个包含次数据的外部文件。 
    LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。 
    为了便于将LONG数据类型转换成LOB,Oracle9i包含许多同时支持LOB和LONG的函数,还包括一个ALTER TABLE语句的的新选择,它允许将LONG数据类型自动转换成LOB. 
    BFILE 
    BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。 
    XMLType 
    作为对XML支持的一部分,Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点,还可以在XMLType文档中对任何节点创建索引。 
    用户自定义数据 
    从Oracle8以后,用户可以定义自己的复杂数据类型,它们由Oracle基本数据类型组合而成。 
    AnyType、AnyData和AnyDataSet 
    Oracle包括3个新的数据类型,用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义,以便让Oracle9i知道如何处理这些类型的特定实现。 
    类型转换 
    Oracle会自动将某些数据类型转换成其他的数据类型,转换取决于包括该值的SQL语句。 
    数据转换还可以通过Oracle的类型转换函数显示地进行。 
    连接与比较 
    在大多数平台上Oracle SQL中的连接操作符用两条竖线(||)表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。 
    NULL 
    NULL值是关系数据库的重要特征之一。实际上,NULL不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。 
    任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及两者都不是。 
    因为NULL值不等于0或其他任何值,所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。 
    NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用NULL值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。

    SQL SERVER 数据类型详解 
    数据类型类型描述 
    1)二进制数据类型 
      二进制数据包括 Binary、Varbinary 和 Image 
      Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。 
      Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。 
      Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。 
      在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。 
    (2)字符数据类型 
      字符数据的类型包括 Char,Varchar 和 Text 
      字符数据是由任何字母、符号和数字任意组合而成的数据。 
      Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。 
    (3)Unicode 数据类型 
      Unicode 数据类型包括 Nchar,Nvarchar 和Ntext 
      在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。 
      在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。 
    (4)日期和时间数据类型 
      日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型 
      日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。 
      日期的格式可以设定。设置日期格式的命令如下: 
      Set DateFormat {format | @format _var| 
      其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。 
      例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式 
    (5)数字数据类型 
      数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数 
      整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是 
    Int,Smallint和 Tinyint。 
    Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。 
      精确小娄数据在 SQL Server 中的数据类型是Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。 
      在SQL Server 中,近似小数数据的数据类型是Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。 
    (6)货币数据表示正的或者负的货币数量 。 
      在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。 
    (7)特殊数据类型 
      特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即   Timestamp、Bit 和 Uniqueidentifier。 
      Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。 
      Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。 
      Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 2.用户定义的数据类型 
      用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。 
      当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。 
    (1)创建用户定义的数据类型 
      创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下: 
      sp_addtype {type},[,system_data_bype][,’null_type’] 
      其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。 
      例子: 
      Use cust 
      Exec sp_addtype ssn,’Varchar(11)’,”Not Null’ 
      创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。 
      例子: 
      Use cust 
      Exec sp_addtype birthday,datetime,’Null’ 
      创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。 
      例子: 
      Use master 
      Exec sp_addtype telephone,’varchar(24),’Not Null’ 
      Eexc sp_addtype fax,’varchar(24)’,’Null’ 
      创建两个数据类型,即 telephone 和 fax 
    (2)删除用户定义的数据类型 
      当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {‘type’}。 
      例子: 
      Use master 
      Exec sp_droptype ‘ssn’ 
      注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。 
    SQL SERVER的字段类型说明 
      以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。 
    字段类型描述 
    bit 0或1的整型数字 
    int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字 
    smallint 从-2^15(-32,768)到2^15(32,767)的整型数字 
    tinyint 从0到255的整型数字 
    decimal 从-10^38到10^38-1的定精度与有效位数的数字 
    numeric decimal的同义词 
    money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十 
    smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十 
    float 从-1.79E+308到1.79E+308可变精度的数字 
    real 从-3.04E+38到3.04E+38可变精度的数字 
    datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒 
    smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟 
    timestamp 时间戳,一个数据库宽度的唯一数字 
    uniqueidentifier 全球唯一标识符GUID 
    char 定长非Unicode的字符型数据,最大长度为8000 
    varchar 变长非Unicode的字符型数据,最大长度为8000 
    text 变长非Unicode的字符型数据,最大长度为2^31-1(2G) 
    nchar 定长Unicode的字符型数据,最大长度为8000 
    nvarchar 变长Unicode的字符型数据,最大长度为8000 
    ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G) 
    binary 定长二进制数据,最大长度为8000 
    varbinary 变长二进制数据,最大长度为8000 
    image 变长二进制数据,最大长度为2^31-1(2G) 
    段类型说明请参考SQL SERVER提供的说明。

    这里写图片描述 
    这里写图片描述 
    SYBASE的字段类型如下: 
    字段类型描述字段长度及其缺省值 
    Char(Size) 
    用于保存定长(Size)字节的字符串数据。

    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varchar(Size) 
    用于保存变长的字符串数据。其中最大字节长度由(Size)指定。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Nchar(Size) 
    多字节字符串。 
      
    每行定长(不足部分补为空格)。 长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Nvarchar(Size) 
    可变长,多字节字符串。 
    每行变长。长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。 
    Binary(Size) 
    固定长度的二进制字符串。 
    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。 
    Varbinary(Size) 
    可变长度的长度的二进制字符串。 
    每行长度可变,最大长度为255字节。数据长度缺省为1 
    Timestamp 
    用于改变管理的二进制值。 
    字节数为16 
    Datetime 
    保存定长的日期时间数据,范围为1753年1月1日到公元9999年12月21日,精度为3微秒间隔。 
    每行固定为8字节长度。 
    Smalldatetime 
    保存定长的日期时间数据,范围为1990年1月1日到公元2079年6月6日,精度为分钟间隔。 
    每行固定为4字节长度。 
    Int 
    保存整型数据,范围为-2147483647到+2147483647。 
    最大长度为4字节32 - 1字节或4G。 
    Smallint 
    保存整型数据,范围为-32767到+32767 
    最大长度为2字节32 - 1字节或4G。 
    Tinyint 
    保存整型数据,范围为0到255。 
    最大长度为1字节。 
    Float 
    保存浮点数据类型,范围为-2.23E-308到+2.23E-308。 
    最大长度为8字节。 
    Real 
    保存浮点数据类型,范围为-1.18E-38到+1.18E-38。 
    最大长度为4字节。 
    Numeric(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Decimal(P,S) 
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P) 
    最大长度为2~17字节。 
    Money 
    保存货币值数据类型,范围为-922337203685477.5808到+922337203685477.5808 
    最大长度为8字节。 
    Smallmoney 
    保存货币值数据类型,范围为-214748.3647到+214748.3647 
    最大长度为4字节。 
    Text 
    保存大于255字节的栏或大于2KB页长度的文本数据。 
    最大长度为2G。 
    Image 
    保存大于255字节的栏或大于2KB页长度的二进制数据。 
    最大长度为2G。

    char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

    展开全文
  • 常用数据库的字段类型及大小

    万次阅读 2016-05-21 12:01:06
    racle/MSSQL/Mysql 常用数据库的字段类型及大小 ORACLE的数据类型 常用数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 bytes ` VARCHAR2 可变长度的字符串...

    racle/MSSQL/Mysql 常用数据库的字段类型及大小

    这里写图片描述

    这里写图片描述
    这里写图片描述

    这里写图片描述
    这里写图片描述

    这里写图片描述

    ORACLE的数据类型
    常用的数据库字段类型如下:
    字段类型 中文说明 限制条件 其它说明
    CHAR 固定长度字符串 最大长度2000 bytes `
    VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749
    NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
    NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
    DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 经过严格测试,无千虫问题
    LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著作
    RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等
    LONG RAW 可变长度的二进制数据 最大长度2G 同上
    BLOB 二进制数据 最大长度4G CLOB 字符数据 最大长度4G
    NCLOB 根据字符集而定的字符数据 最大长度4G
    BFILE 存放在数据库外的二进制数据 最大长度4G
    ROWID 数据表中记录的唯一行号 10 bytes **.*.*格式,*为0或1
    NROWID 二进制数据表中记录的唯一行号 最大长度4000 bytes
    NUMBER(P,S) 数字类型 P为整数位,S为小数位
    DECIMAL(P,S) 数字类型 P为整数位,S为小数位
    INTEGER 整数类型 小的整数 FLOAT 浮点数类型
    NUMBER(38),双精度
    REAL 实数类型

    NUMBER(63),精度更高

    Oracle支持的数据类型可以分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。
    字符数据类型
    CHAR CHAR数据类型存储固定长度的子符值。一个CHAR数据类型可以包括1到2000个字符。如果对CHAR没有明确地说明长度,它的默认长度则设置为1.如果对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。
    VARCHAR2存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,但是这个长度是指对该变量赋值的的最大长度而非实际赋值长度。不需要用空格填充。最多可设置为4000个字符。
    因为VARCHAR2数据类型只存储为该列所赋的字符(不加空格),所以VARCHAR2需要的存储空间比CHAR数据类型要小。
    Oracle推荐使用VARCHAR2
    NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符数据,但是它们使用的是和数据库其他类型不同的字符集。在创建数据库时,需要指 定所使用的字符集,以便对数据库中数据进行编码。还可以指定一个辅助的字符集[即本地语言集(National Language Set,简称NLS)]。NCHAR和NVARCHAR2类型的列使用辅助字符集。
    在Oracle9i中,可以以字符而不是字节为单位来表示NCHAR和NVARCHAR2列的长度。
    LONG LONG数据类型可以存放2GB的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。
    CLOB和NCLOB CLOB和NCLOB数据类型可以存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。
    数字数据类型
    Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。
    NUMBER数据类型可以有两个限定符,如:
    column NUMBER ( precision, scale)
    precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。
    scale表示数字小数点右边的位数,scale默认设置为0.  如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。
    日期数据类型
    Oracle标准日期格式为:DD-MON-YY HH:MI:SS
    通过修改实例的参数NLS_DATE_FORMAT,可以改变实例中插入日期的格式。在一个会话期间,可以通过ALTER SESSION SQL命令来修改日期,或者通过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。
    其它的数据类型
    RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型一般用于存储有特定格式的对象,如位图。 RAW数据类型可占用2KB的空间,而LONG RAW数据类型则可以占用2GB大小。
    ROWID ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。
    ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。
    列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID.
    LOB
    LOB(大型对象)数据类型,可以保存4GB的信息。LOB有以下3种类型:
    。CLOB,只能存储字符数据
    。NCLOB,保存本地语言字符集数据
    。BLOB,以二进制信息保存数据
    可以指定将一个LOB数据保存在Oracle数据库内,还是指向一个包含次数据的外部文件。
    LOB可以参与事务。管理LOB中的数据必须通过DBMS_LOB PL/SQL内置软件包或者OCI接口。
    为了便于将LONG数据类型转换成LOB,Oracle9i包含许多同时支持LOB和LONG的函数,还包括一个ALTER TABLE语句的的新选择,它允许将LONG数据类型自动转换成LOB.
    BFILE
    BFILE数据类型用做指向存储在Oracle数据库以外的文件的指针。
    XMLType
    作为对XML支持的一部分,Oracle9i包含了一个新的数据类型XMLType.定义为XMLType的列将存储一个在字符LOB列中的XML文档。有许多内置的功能可以使你从文当中抽取单个节点,还可以在XMLType文档中对任何节点创建索引。
    用户自定义数据
    从Oracle8以后,用户可以定义自己的复杂数据类型,它们由Oracle基本数据类型组合而成。
    AnyType、AnyData和AnyDataSet
    Oracle包括3个新的数据类型,用于定义在现有数据类型之外的数据结构。其中每种数据类型必须用程序单元来定义,以便让Oracle9i知道如何处理这些类型的特定实现。
    类型转换
    Oracle会自动将某些数据类型转换成其他的数据类型,转换取决于包括该值的SQL语句。
    数据转换还可以通过Oracle的类型转换函数显示地进行。
    连接与比较
    在大多数平台上Oracle SQL中的连接操作符用两条竖线(||)表示。连接是将两个字符值连接。Oracle的自动类型转换功能使得两个数字值也可以进行连接。
    NULL
    NULL值是关系数据库的重要特征之一。实际上,NULL不代表任何值,它表示没有值。如果要创建表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。
    任何数据类型都可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。如果比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及两者都不是。
    因为NULL值不等于0或其他任何值,所以测试某个数据是否为NULL值只能通过关系运算符IS NULL来进行。
    NULL值特别适合以下情况:当一个列还未赋值时。如果选择不使用NULL值,那么必须对行的所有列都要赋值。这实际上也取消了某列不需要值的可能性,同时对它赋的值也很容易产生误解。这种情况则可能误导终端用户,并且导致累计操作的错误结果。

    SQL SERVER 数据类型详解
    数据类型类型描述
    1)二进制数据类型
      二进制数据包括 Binary、Varbinary 和 Image
      Binary 数据类型既可以是固定长度的(Binary),也可以是变长度的。
      Binary[(n)] 是 n 位固定的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4 个字节。
      Varbinary[(n)] 是 n 位变长度的二进制数据。其中,n 的取值范围是从 1 到 8000。其存储窨的大小是 n + 4个字节,不是n 个字节。
      在 Image 数据类型中存储的数据是以位字符串存储的,不是由 SQL Server 解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、GIF 和 JPEG 格式把数据存储在 Image 数据类型中。
    (2)字符数据类型
      字符数据的类型包括 Char,Varchar 和 Text
      字符数据是由任何字母、符号和数字任意组合而成的数据。
      Varchar 是变长字符数据,其长度不超过 8KB。Char 是定长字符数据,其长度最多为 8KB。超过 8KB 的ASCII 数据可以使用Text数据类型存储。例如,因为 Html 文档全部都是 ASCII 字符,并且在一般情况下长度超过 8KB,所以这些文档可以 Text 数据类型存储在SQL Server 中。
    (3)Unicode 数据类型
      Unicode 数据类型包括 Nchar,Nvarchar 和Ntext
      在 Microsoft SQL Server 中,传统的非 Unicode 数据类型允许使用由特定字符集定义的字符。在 SQL Server安装过程中,允许选择一种字符集。使用 Unicode 数据类型,列中可以存储任何由Unicode 标准定义的字符。在 Unicode 标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,所战胜的窨是使用非 Unicode 数据类型所占用的窨大小的两倍。
      在 SQL Server 中,Unicode 数据以 Nchar、Nvarchar 和 Ntext 数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度变化时,应该使用Nvarchar 字符类型,这时最多可以存储 4000 个字符。当列的长度固定不变时,应该使用 Nchar 字符类型,同样,这时最多可以存储4000 个字符。当使用 Ntext 数据类型时,该列可以存储多于 4000 个字符。
    (4)日期和时间数据类型
      日期和时间数据类型包括 Datetime 和 Smalldatetime两种类型
      日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/98 12:15:00:00:00 PM”和“1:28:29:15:01AM 8/17/98”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在 Microsoft SQL Server中,日期和时间数据类型包括Datetime 和 Smalldatetime 两种类型时,所存储的日期范围是从 1753 年 1 月 1 日开始,到9999 年12 月 31 日结束(每一个值要求 8 个存储字节)。使用 Smalldatetime 数据类型时,所存储的日期范围是 1900年 1 月 1日 开始,到 2079 年 12 月 31 日结束(每一个值要求 4 个存储字节)。
      日期的格式可以设定。设置日期格式的命令如下:
      Set DateFormat {format | @format _var|
      其中,format | @format_var 是日期的顺序。有效的参数包括 MDY、DMY、YMD、YDM、MYD 和 DYM。在默认情况下,日期格式为MDY。
      例如,当执行 Set DateFormat YMD 之后,日期的格式为年 月 日 形式;当执行 Set DateFormat DMY 之后,日期的格式为日 月有年 形式
    (5)数字数据类型
      数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数
      整数由正整数和负整数组成,例如 39、25、0-2 和 33967。在 Micrsoft SQL Server 中,整数存储的数据类型是
    Int,Smallint和 Tinyint。
    Int 数据类型存储数据的范围大于 Smallint 数据类型存储数据的范围,而 Smallint 据类型存储数据的范围大于Tinyint 数据类型存储数据的范围。使用 Int 数据狗昔存储数据的范围是从 -2 147 483 648 到 2 147 483 647(每一个值要求4个字节存储空间)。使用 Smallint 数据类型时,存储数据的范围从 -32 768 到 32 767(每一个值要求2个字节存储空间)。使用Tinyint 数据类型时,存储数据的范围是从0 到255(每一个值要求1个字节存储空间)。
      精确小娄数据在 SQL Server 中的数据类型是Decimal 和 Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
      在SQL Server 中,近似小数数据的数据类型是Float 和 Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,从系统中检索到的数据可能与存储在该列中数据不完全一样。
    (6)货币数据表示正的或者负的货币数量 。
      在 Microsoft SQL Server 中,货币数据的数据类型是Money 和 Smallmoney  Money数据类型要求 8 个存储字节,Smallmoney 数据类型要求 4 个存储字节。
    (7)特殊数据类型
      特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即   Timestamp、Bit 和 Uniqueidentifier。
      Timestamp 用于表示SQL Server 活动的先后顺序,以二进投影的格式表示。Timestamp 数据与插入数据或者日期和时间没有关系。
      Bit 由 1 或者 0 组成。当表示真或者假、ON 或者 OFF 时,使用 Bit 数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列中。
      Uniqueidentifier 由 16 字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使用这种数据类型可以区别不同的客户。 2.用户定义的数据类型
      用户定义的数据类型基于在 Microsoft SQL Server 中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为   postal_code 的数据类型,它基于 Char 数据类型。
      当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
    (1)创建用户定义的数据类型
      创建用户定义的数据类型可以使用 Transact-SQL 语句。系统存储过程 sp_addtype 可以来创建用户定义的数据类型。其语法形式如下:
      sp_addtype {type},[,system_data_bype][,’null_type’]
      其中,type 是用户定义的数据类型的名称。system_data_type 是系统提供的数据类型,例如 Decimal、Int、Char   等等。 null_type 表示该数据类型是如何处理空值的,必须使用单引号引起来,例如’NULL’、’NOT NULL’或者’NONULL’。
      例子:
      Use cust
      Exec sp_addtype ssn,’Varchar(11)’,”Not Null’
      创建一个用户定义的数据类型 ssn,其基于的系统数据类型是变长为11 的字符,不允许空。
      例子:
      Use cust
      Exec sp_addtype birthday,datetime,’Null’
      创建一个用户定义的数据类型 birthday,其基于的系统数据类型是 DateTime,允许空。
      例子:
      Use master
      Exec sp_addtype telephone,’varchar(24),’Not Null’
      Eexc sp_addtype fax,’varchar(24)’,’Null’
      创建两个数据类型,即 telephone 和 fax
    (2)删除用户定义的数据类型
      当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是 sp_droptype {‘type’}。
      例子:
      Use master
      Exec sp_droptype ‘ssn’
      注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。
    SQL SERVER的字段类型说明
      以下为SQL SERVER7.0以上版本的字段类型说明。SQL SERVER6.5的字段类型说明请参考SQL SERVER提供的说明。
    字段类型描述
    bit 0或1的整型数字
    int 从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
    smallint 从-2^15(-32,768)到2^15(32,767)的整型数字
    tinyint 从0到255的整型数字
    decimal 从-10^38到10^38-1的定精度与有效位数的数字
    numeric decimal的同义词
    money 从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
    smallmoney 从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
    float 从-1.79E+308到1.79E+308可变精度的数字
    real 从-3.04E+38到3.04E+38可变精度的数字
    datetime 从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
    smalldatetime 从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
    timestamp 时间戳,一个数据库宽度的唯一数字
    uniqueidentifier 全球唯一标识符GUID
    char 定长非Unicode的字符型数据,最大长度为8000
    varchar 变长非Unicode的字符型数据,最大长度为8000
    text 变长非Unicode的字符型数据,最大长度为2^31-1(2G)
    nchar 定长Unicode的字符型数据,最大长度为8000
    nvarchar 变长Unicode的字符型数据,最大长度为8000
    ntext 变长Unicode的字符型数据,最大长度为2^31-1(2G)
    binary 定长二进制数据,最大长度为8000
    varbinary 变长二进制数据,最大长度为8000
    image 变长二进制数据,最大长度为2^31-1(2G)
    段类型说明请参考SQL SERVER提供的说明。

    这里写图片描述
    这里写图片描述
    SYBASE的字段类型如下:
    字段类型描述字段长度及其缺省值
    Char(Size)
    用于保存定长(Size)字节的字符串数据。

    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。
    Varchar(Size)
    用于保存变长的字符串数据。其中最大字节长度由(Size)指定。
    每行长度可变,最大长度为255字节。数据长度缺省为1
    Nchar(Size)
    多字节字符串。
     
    每行定长(不足部分补为空格)。 长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。
    Nvarchar(Size)
    可变长,多字节字符串。
    每行变长。长度(Size)是指字符的个数,最大字节数为Size*A@@Nchar Size。
    Binary(Size)
    固定长度的二进制字符串。
    每行定长(不足部分补为空格);最大长度为255字节,缺省值为每行1字节。
    Varbinary(Size)
    可变长度的长度的二进制字符串。
    每行长度可变,最大长度为255字节。数据长度缺省为1
    Timestamp
    用于改变管理的二进制值。
    字节数为16
    Datetime
    保存定长的日期时间数据,范围为1753年1月1日到公元9999年12月21日,精度为3微秒间隔。
    每行固定为8字节长度。
    Smalldatetime
    保存定长的日期时间数据,范围为1990年1月1日到公元2079年6月6日,精度为分钟间隔。
    每行固定为4字节长度。
    Int
    保存整型数据,范围为-2147483647到+2147483647。
    最大长度为4字节32 - 1字节或4G。
    Smallint
    保存整型数据,范围为-32767到+32767
    最大长度为2字节32 - 1字节或4G。
    Tinyint
    保存整型数据,范围为0到255。
    最大长度为1字节。
    Float
    保存浮点数据类型,范围为-2.23E-308到+2.23E-308。
    最大长度为8字节。
    Real
    保存浮点数据类型,范围为-1.18E-38到+1.18E-38。
    最大长度为4字节。
    Numeric(P,S)
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P)
    最大长度为2~17字节。
    Decimal(P,S)
    保存精确数值数据类型,范围为-10E-38到+10E-38,P是精度,总小数位数(1~38),S是小数位(小数位小于等于P)
    最大长度为2~17字节。
    Money
    保存货币值数据类型,范围为-922337203685477.5808到+922337203685477.5808
    最大长度为8字节。
    Smallmoney
    保存货币值数据类型,范围为-214748.3647到+214748.3647
    最大长度为4字节。
    Text
    保存大于255字节的栏或大于2KB页长度的文本数据。
    最大长度为2G。
    Image
    保存大于255字节的栏或大于2KB页长度的二进制数据。
    最大长度为2G。

    展开全文
  • 数据库的应用类型OLTP和OLAP

    千次阅读 2020-02-26 08:10:55
    文章目录数据库的应用类型一、OLTP二...一般来说,可将数据库的应用类型分为OLTP(OnLine Transaction Processing,联机事务处理)和OLAP(OnLine Analysis Processing,联机分析处理)两种。 OLTP是传统关系型数据...

    数据库的应用类型

    对于SQL开发人员来说,必须先要了解进行SQL编程的对象类型,即要开发的数据库应用是哪种类型。一般来说,可将数据库的应用类型分为OLTP(OnLine Transaction Processing,联机事务处理)和OLAP(OnLine Analysis Processing,联机分析处理)两种。

    OLTP是传统关系型数据库的主要应用,其主要面向基本的、日常的事务处理,例如银行交易。

    OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

    一、OLTP

    OLTP也被称为面向交易的处理系统,其基本特征是可以立即将顾客的原始数据传送到计算中心进行处理,并在很短的时间内给出处理结果,这个过程的最大优点是可以即时地处理输入的数据、及时地回答,因此OLTP又被称为实时系统(Real Time System)。衡量OLTP系统的一个重要性能指标是系统性能,具体体现为实时响应时间(Response Time),即从用户在终端输入数据到计算机对这个请求做出回复所需的时间。OLTP数据库旨在使事务应用程序仅完成对所需数据的写入,以便尽快处理单个事务。

    OLTP数据库通常具有以下特征:

    • 支持大量并发用户定期添加和修改数据。
    • 反映随时变化的单位状态,但不保存其历史记录。
    • 包含大量数据,其中包括用于验证事务的大量数据。
    • 具有复杂的结构。
    • 可以进行优化以对事务活动做出响应。
    • 提供用于支持单位日常运营的技术基础结构。
    • 个别事务能够很快地完成,并且只需要访问相对较少的数据。OLTP系统旨在处理同时输入的成百上千的事务。

    二、OLAP

    OLAP的概念最早是由关系数据库之父E.F.Codd博士于1993年提出的,是一种用于组织大型商务数据库和支持商务智能的技术。OLAP数据库分为一个或多个多维数据集,每个多维数据集都由多维数据集管理员组织和设计,以适应用户检索和分析数据的方式,从而更易于创建和使用所需的数据透视表和数据透视图。

    OLAP是共享多维信息的、针对特定问题的联机数据访问和分析的快速软件技术。它通过对信息的多种可能的观察形式进行快速、稳定一致和交互性的存取,允许管理决策人员对数据进行深入观察。决策数据是多维数据,是决策的主要内容。OLAP专门用于支持复杂的分析操作,侧重对决策人员和高层管理人员的决策支持,可以根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以一种直观易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业(公司)的经营状况、了解对象的需求、制定正确的方案。

    OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对基于大量复杂数据的分析变得轻松而高效,利于用户迅速做出正确判断。OLAP可用于证实人们提出的复杂假设,是以图形或表格的形式来表示的对信息的总结。OLAP并不将异常信息标记出来,采取的是一种知识证实的方法。

    OLAP的主要特点是直接仿照用户的多角度思考模式,预先为用户组建多维的数据模型。在这里,维指的是用户的分析角度,例如对销售数据的分析,时间周期是一个维度,产品类别、分销渠道、地理分布、客户群类也分别是不同的维度。一旦多维数据模型建立完成,用户可以快速地从各个分析角度获取数据,也能动态地在各个角度之间切换数据或者进行多角度综合分析,具有极大的分析灵活性。这也是OLAP在近年来被广泛关注的根本原因。OLAP从设计理念和真正实现上都与旧有的管理信息系统有着本质的区别。

    下面介绍一下OLAP的基本概念:

    • 维(Dimension):是用户观察数据的特定角度,是问题的一类属性,属性集合构成一个维(时间维、地理维等)。
    • 维的层次(Level):用户观察数据的某个特定角度(即某个维)还可能存在细节程度不同的各个描述方面(时间维包括日期、月份、季度、年)。
    • 维的成员(Member):即维的一个取值,是数据项在某个维中位置的描述,如“某年某月某日”是在时间维上的位置描述。
    • 度量(Measure):多维数组的取值。

    OLAP的基本多维分析操作有钻取(Drill-up和Drill-down)、切片(Slice)和切块(Dice)以及旋转(Pivot)等。

    • 钻取:改变维的层次,变换分析的粒度。它包括向下钻取(Drill-down)和向上钻取(Drill-up)/上滚(Roll-up)。向上钻取是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而向下钻取则相反,从汇总数据深入到细节数据进行观察或增加新维。
    • 切片和切块:在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个或以上,则是切块。
    • 旋转:变换维的方向,即在表格中重新安排维的放置(如行列互换)。

    三、比较

    OLTP与OLAP的比较

    OLTP主要执行基本的、日常的事务处理,比如在银行存取一笔款,就是一个事务交易。OLTP的特点一般有:

    • 实时性要求高。
    • 查询的数据量不是很大。
    • 交易一般是确定的,所以OLTP是对确定性的数据进行存取。
    • 并发性要求高,并且严格要求事务的完整性、安全性。

    OLAP是数据仓库系统的主要应用,其典型的应用就是复杂的动态报表系统。OLAP的特点一般有:

    • 实时性要求不是很高,很多应用最多每天更新一次数据。
    • 数据量大。因为OLAP支持的是动态查询,用户要通过对很多数据的统计才能得到想要知道的信息,如时间序列分析等,所以处理的数据量很大。

    因为重点在于决策支持,所以查询一般是动态的,也就是说允许用户随时提出查询的要求。因此,在OLAP中通过一个重要概念“维”来搭建一个动态查询的平台(或技术),供用户自己决定需要知道的信息。

    OLAP和OLTP的主要区别如表所示。
    在这里插入图片描述

    展开全文
  • 数据库并发事务详解

    千次阅读 多人点赞 2018-07-17 12:18:57
    本章将从数据库事务的基本要素、并发事务带来的问题、数据库事务的隔离级别、封锁技术方面来进行详细解读。  一、数据库事务正确执行的四个基本要素(事务的四个属性)  当事务处理系统创建事务时,将确保事务有...
  • 数据库面试

    千次阅读 多人点赞 2019-02-13 09:03:42
    一、数据库问答题 1. SQL语言包括哪些类型? 数据定义DDL:Create Table,Alter Table,Drop Table, Create/Drop Index等 数据操纵DML:Select ,insert,update,delete, 数据控制DCL:grant,revoke 2. 内联接,外联接...
  • 数据库学习】数据库总结

    万次阅读 多人点赞 2018-07-26 13:26:41
    1,数据库 1)概念 数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。 常见数据库管理系统有:Access、mysql、sql server 2)特点 ①数据库数据特点 永久存储、有组织...
  • 数据库事务管理

    千次阅读 2018-04-09 23:15:49
    事务的概念 事务是访问并可能更新各种数据项的一个程序执行单元。事务有四个基本性质: 1、原子性:事务中的全部操作要么全部做...3、一致性:在没有其他事务并发执行的情况下,保持数据库的一致性 4、持久性:一...
  • 数据库简介及类型

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

    万次阅读 2017-09-05 20:24:36
    spring 事务回滚 1、遇到的问题  当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误。伪代码如下: ? 1 2 3 4 5 6 7 public ...
  • MySQL数据库事务处理

    万次阅读 多人点赞 2017-03-16 15:43:33
    事务处理用于有效记录某机构感兴趣的业务活动(称为事务)的数据处理(例如销售、供货的定购或货币传输)。...本文对数据库事务处理相关的存储引擎、事务处理的概念、分离水平、以及死锁进行简单介绍。
  • 什么是数据库事务?

    千次阅读 2018-08-02 09:24:38
    事务 事务是作为单个工作单元而执行的一系列操作,如查询和修改数据,甚至是修改数据的定义。 定义数据边界的方式有显式和隐式两种。显式事务的定义需要以BEGIN TRAN语句作为开始。如果想提交事务,则应该以COMMIT...
  • 数据库操作四大类型

    千次阅读 2020-06-18 19:27:54
    数据库操作四大类型 1数据 查询(DQL) 语言 基本构成 SELECT FROM WHERE 这些语句构成 2数据 操纵(DML) 语言 基本构成 INSERT UPDATE DELETE 3数据 定义(DDL) 语言 基本构成 CREATE TABLE VIEW 表的...
  • 常用数据库备份类型有哪些?

    千次阅读 2019-11-05 18:38:49
    数据库备份有四种类型,分别应用于不同的场合,下面简要介绍一下。 1、完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多...
  • 数据库事务处理

    千次阅读 2019-03-31 18:21:04
    数据库事务处理 数据库中ACID 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration) 原子性:事务的原子性是指事务必须是一个原子的操作序列单元。...
  • 数据库面试题

    千次阅读 多人点赞 2018-05-24 10:46:20
    数据库面试题 1.什么是存储过程?用什么来调用? 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯...
  • (MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理。) 导致在项目测试中发现异常后,事务无回滚动作。 解决办法: 1. 在Spring data jpa中的配置中添加database-platform: org....
  • 数据库事务&存储过程

    千次阅读 2019-02-28 15:58:24
    一、【事务概念】 事务(Transaction)是指构成单一逻辑...2,同时,该事务数据库或者其他事务的执行无影响,所有的事务都好像在独立的运行。 二、【事务举例】 用一个常用的“A 账户向 B 账户汇钱”的例子来说...
  • 数据库事务与锁详解

    万次阅读 多人点赞 2016-09-07 16:31:12
    什么是事务(Transaction)?是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源...事务数据库
  • 目录SQLyog工具数据库的一些基本操作命令结构化查询语句数据值和列类型类型数据字段属性数据表类型数据表的存储位置 : SQLyog工具     一款可视化操作数据库的工具,简洁,易用,图形化,可是基本...
  • Mysql数据库常用的词汇,新手必备

    千次阅读 2019-04-22 08:47:22
    database数据库 database sysytem数据库系统 database management system 数据库管理...type类型 relationship联系 model模型 primary key主键 foreign key外键 rule规则 select查询 project投影 join连...
  • 数据库原理》— 数据库系统概论第五版习题解析

    万次阅读 多人点赞 2017-05-29 14:57:48
    数据库系统概论前七章习题解析 第1章绪论 1.试述数据、数据库数据库系统、数据库管理系统的概念。答: (l)数据(Data):描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。...
  • 数据库的简介与类型

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

    万次阅读 多人点赞 2018-08-18 23:16:11
    目录 一、事务的四大特性(ACID) 1、原子性(Atomicity) 2、一致性(Consistency) ...MySQL数据库的四种事务隔离级别 Read Uncommitted(读取未提交内容) Read Committed(读取提交内容) Repeatable...
  • 数据库原理及应用教程 第4版 微课版 陈志泊主编 习题参考答案
  • 前言 Spring事务部分之前一直理解的模棱两可,在实际开发中这些都由架构师完成,底层程序员更多的只是编写...在spring数据库事务中,可以使用编程式事务和声明式事务,但是编程式事务需要手动编写事务的提交和回滚...
  • 【MySQL】数据库事务处理---MySQL

    千次阅读 2018-07-01 23:45:50
    事务处理用于有效记录某机构感兴趣的业务活动(称为事务)的数据处理(例如销售、供货的定购或货币传输)。通常,联机事务处理 (OLTP) 系统执行大量的相对较小的事务----百度百科。事务处理是将多个操作或者命令一起...
  • 高级数据库三:浅谈数据库事务(transaction)

    万次阅读 多人点赞 2017-09-11 00:22:32
    事务(txn)是一系列在共享数据库上执行的行为,以达到更高层次更复杂逻辑的功能。事务是DBMS中最基础的单位,事务不可分割。 ACID ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四...
  • MySql数据库常用命令总结(全)

    千次阅读 多人点赞 2016-12-15 09:22:10
    一、数据库级命令1. 数据库连接命令:mysql -h主机地址 -u用户名 -p用户密码  1、找到安装目录bin, 进入该工作目录,键入该命令mysql -u root -p,提示输入密码,用户名前可以有空格也可以没有空格,但是密码前...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 420,657
精华内容 168,262
关键字:

数据库常用的事务类型