精华内容
下载资源
问答
  • sqlalchemy 常用数据类型有哪些

    万次阅读 2018-08-09 16:45:47
     sqlalchemy常用数据类型 数据类型 python数据类型 说明 Integer int 整形 String str 字符串 Float float 浮点型 DECIMAL decimal.Decimal 定...

     

                                                       sqlalchemy常用数据类型

    数据类型 python数据类型 说明
    Integer int 整形
    String str 字符串
    Float float 浮点型
    DECIMAL decimal.Decimal 定点型
    Boolean bool 布尔型
    Date datetime.date 日期
    DateTime datetime.datetime 日期和时间
    Time datetime.time 时间
    Enum str 枚举类型
    Text str 文本类型
    LongText str 长文本类型

    既然我们知道sqlalchemy常用数据类型有哪些,下面我们就来看看这些数据类型的用法。

    首先,打开我们py代码编辑神器(pycharm),因为之前跟大家讲了许多关于数据库基本配置及连接的文章,在这里我就不在阐述了。而是直接在此基础上讲解sqlalchemy数据类型的用法。

    from sqlalchemy import create_engine,Column,Integer
    from sqlalchemy.ext.declarative import declarative_base
    from sqlalchemy.orm.session import sessionmaker
    DIALCT = "mysql"
    DRIVER = "pymysql"
    USERNAME = "root"
    PASSWORD = "admin"
    HOST = "127.0.0.1"
    PORT = "3306"
    DATABASE = "test"
    DB_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALCT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
    engine = create_engine(DB_URI)
    Base = declarative_base(engine)
    session = sessionmaker(engine)()
    
    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
    
    
    Base.metadata.drop_all()
    Base.metadata.create_all()

    在讲解前,我们先测试下模型是否能够成功映射到数据库中,运行上述代码

    没有报错,我们在打开mysql命令行工具,输入以下命令

    嗯,person库表已成功映射到数据库中。

    OK,万事俱备。下面我们就逐一来讲类型的用法。

    第一种:Integer

    我们在Person模型中新增一个age字段

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        age = Column(Integer)

    然后向表中插入一条数据

    p = Person(age = 22)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为int类型

    第二种:String

    我们先将age字段注释掉,然后从sqlalchemy导入String类型(使用某种数据类型前,记得将该数据类型从sqlalchemy导入,由于篇幅太长,我们下方数据类型省略该步骤),再新增一个name字段(括号中的20表示该字符串最大长度为20)

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        name = Column(String(20))

    插入一条数据试试

    p = Person(name = "tom")
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为string类型(映射到数据库,对应varchar类型)

    第三种:Float

    什么情况下会用到Float类型?比如存储体重、价格等.....

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        price = Column(Float)

    插入测试数据

    p = Person(price = 123.456789)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为float类型

    嗯!!我明明写的是123.456789,但是存储到数据库中却变成了123.457,为什么会这样呢?原因我之前说过:float单精度类型,单精度数据类型存储到表中容易被丢失。既然我们知道了原因,哪如何解决呢??方法就是用接下来要讲的定点类型(DECIMAL)。

    第四种:DECIMAL

    DECIMAL可以防止数据jingd

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        price = Column(DECIMAL(7,3))

    DECIMAL有两个参数,第一个参数用于指定一共多少位数,第二个参数用于指定小数点后最多多少位数

    例如:DECIMAL(4,2)表示一共存储4位数字,小数点后最多有两位

    如果传入不符合规则数值时会报如下错误:

    所以我们在插入数据时一定要遵守参数规则

    p = Person(price = 1234.567)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中以及该字段是否为decimal类型

    第五种:Boolean

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        delete = Column(Boolean)

    插入数据试试。我们知道,1代表true,0代表false

    p = Person(delete = 1)
    session.add(p)
    session.commit()

    运行上述代码,然后输入下方命令检查数据是否插入到表中(存储到数据库中对应tinyint类型)

    第六种:Enum

    什么情况下会用到枚举类型呢?比如用户填写性别时,固定只能选男或者女,不可能不男不女,对吧!

    Enum()括号中为枚举列表,在这个里面可以罗列出可输入的值!

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        sex = Column(Enum("男","女"))

    我们先插入一条错误数据试试

    p = Person(sex="不男不女")
    session.add(p)
    session.commit()
    运行代码、结果报如下错误:
    

    我们再输入一条正确数据试试

    嗯,数据成功插入到表中,且数据类型为enum。

    第七种:Date

    Date只能存储指定的年月日,不能存储时分秒

    说到日期类型,相信大家都熟悉,比如某年某月某日生。嗯、下面咱们就谈谈这个Date类型。

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        create_time = Column(Date)

    然后从datetime导入datetime这个包,将数据添加至数据库

    from datetime import datetime
    p = Person(create_time = datetime(2018,8,8))
    session.add(p)
    session.commit()

    datetime()中的数值用于传递指定的年月日

    运行并查看数据结果如下:

    第八种:DateTime

    DateTime存储指定的年月日时分秒

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        create_time = Column(DateTime)

    添加测试数据

    p = Person(create_time = datetime(2018,8,8,16,11,50))
    session.add(p)
    session.commit()

    datetime()括号中传递指定的年月日时分秒

    运行并查看数据结果如下:

    第九种:Time

    Time只能存储时分秒,不能存储年月日

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        create_time = Column(Time)

    插入测试数据,time()后面传递关键字参数,用于指定时分秒

    from datetime import datetime,time
    p = Person(create_time=time(hour=12,minute=20,second=50))
    session.add(p)
    session.commit()

    运行并查看结果:

     

    第十中:Text

    这个没什么好讲的啊,当字符串长度比较长时就可以使用Text类型

    class Person(Base):
        __tablename__ = "person"
        id = Column(Integer , primary_key=True , autoincrement=True)
        # age = Column(Integer)
        # name = Column(String(20))
        # price = Column(Float)
        # price = Column(DECIMAL(7,3))
        # delete = Column(Boolean)
        # sex = Column(Enum("男","女"))
        # create_time = Column(Date)
        # create_time = Column(DateTime)
        # create_time = Column(Time)
        content = Column(Text)

    插入数据:

    p = Person(content = "人最需要的是学习")
    session.add(p)
    session.commit()

    运行并查看结果:

    第十一种:LongText

    由于Text的存储长度有限,我们就可以使用LongText来存储数据。

    由于LongText类型在mysql数据库才有,其它数据库没有该数据类型,在使用前,记得从mysql数据库导入该数据类型

    from sqlalchemy.dialects.mysql import LONGTEXT

    插入数据:

    p = Person(content = "我要给它做广告,让它在人群中最闪耀!")
    session.add(p)
    session.commit()

    运行上述代码并查看结果:

    文章篇幅有点长,由于时间关系,写的有点不太详细。文章若有不当之处,望大家指出!

     

    展开全文
  • Android常用存储类型与简介

    千次阅读 2015-08-10 16:51:32
    Android存储分为sharedpreference、文件存存储、数据库存储等、网络存储、ContentProvider存储。这篇文章只介绍前三种存储
    目录:
    一、Android存储类型
    二、分别介绍存储类型
    三、总结使用过程注意地方

    正文:
    一、Android存储类型
            Android存储分为sharedpreference、文件存存储、数据库存储等、网络存储、ContentProvider存储。这篇文章只介绍前三种存储。

    二、分别介绍存储类型
           sharedpreference存储。该存储在Android应用开发中经常使用到,这个是必须掌握,也很简单。就是获取sharedpreference对象,通过该对象获取edit对象,edit对象可以put一些简单类型数据。例如,整形、字符串等等常用类型数据。最后,进行提交就可以。类似数据库的事务提交一样。

        数据库存储。
            这个现在有很多常用的数据库开源库。人家已经把原生态数据库操作封装得很容易操作。。例如:我们欣赏的sqlite开源库就是greendao.这个数据库效率是目前所有开源库sqlite数据库中效率最高的。稍微有一点瑕疵就是使用起来稍微比其他开源库麻烦些。正是因为这样,它的效率才是最高的。


        文件存储
            Android文件存储分为内部存储和外部存储。很多人学习Android多年后,还是没弄清楚Android内部存储和外部存储是什么概念。Android手机分为内存和外存。其实他的内存存储和这个手机内存是有一个区别的。内部存储是Android系统给每一个应用都分配有一定的存储空间,这些存储空间是不被其他应用所能访问的。而外部存储其实就是现在手机所说的存储空间,例如。现在很多手机不是8G、16G、32G,甚至64G。这些存储空间其实就是外部存储。那么SD卡算不算外部存储呢?这肯定是外部存储。

       那么我们怎么获取内部存储和外部存储的路径呢?
           内部存储:直接通过上下文获取内部存储的路径。getCachDir()
           外部存储:直接通过上下文获取内部存储的路径。getExtentCachDir();  已经通过Environment类来获取,并且可以通过该类来进行外部存储是否可以判断。


    三、总结使用过程注意地方
            使用文件存储主要就进行外部存储是否可用判断。可以就用外部存储构造路径,否则,用内部存储路径进行缓存。



    关于作者【Bluesky】

    * 作者微信:huangrx1988

    * 博客:http://blog.csdn.net/hrx3627

    * Android交流QQ群 :367818514



    展开全文
  • 本文将主要讲解了数据库的一些基础知识,介绍了MySql的存储引擎,最后讲了MySql常用的数据类型

      林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

            本文将主要讲解了数据库的一些基础知识,介绍了MySql的存储引擎,最后讲了MySql常用的数据类型

    1、基础知识

    1.1、数据库概述

    • 简单地说:数据库(Database或DB)是存储、管理数据的容器;
    • 严格地说:数据库是“按照某种数据结构对数据进行组织、存储和管理的容器”。
    • 总结:数据永远是数据库的核心。
    1.2、关系数据库管理系统
    • 通过“数据库管理系统”,数据库用户可以轻松地实现数据库容器中各种数据库对象的访问(增、删、改、查等操作),并可以轻松地完成数据库的维护工作(备份、恢复、修复等操作)
    • 数据库用户无法直接通过操作系统获取数据库文件中的具体内容;
    • 数据库管理系统通过调用操作系统的进程管理、内存管理、设备管理以及文件管理等服务,为数据库用户提供管理、控制数据库容器中各种数据库对象、数据库文件的接口。


    1.3、关系数据库

            关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据,同时也是一个被组织成一组拥有正式描述性的表格,该形式的表格作用的实质是装载着数据项的特殊收集体,这些表格中的数据能以许多不同的方式被存取或重新召集而不需要重新组织数据库表格。关系数据库的定义造成元数据的一张表格或造成表格、列、范围和约束的正式描述。每个表格(有时被称为一个关系)包含用列表示的一个或更多的数据种类。 每行包含一个唯一的数据实体,这些数据是被列定义的种类。

    基本特征

    • 关系数据库

            在一个给定的应用领域中,所有实体及实体之间联系的集合构成一个关系数据库。

    • 关系数据库的型与值

            关系数据库的型称为关系数据库模式,是对关系数据库的描述,若干域的定义,在这些域上定义的若干关系模式。
    关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库。


    1.4、结构化查询语言SQL 

            结构化查询语言SQL(Structured Query Language)是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的功能极强的关系数据库标准语言。目前,SQL语言已被确定为关系数据库系统的国际标准,被绝大多数商品化关系数据库系统采用。在SQL语言中,指定要做什么而不是怎么做,不需要告诉SQL如何访问数据库,只要告诉SQL需要数据库做什么。可以在设计或运行时对数据控件使用SQL语句。

    1.5、SQL数据库的体系结构
    SQL数据库的体系结构基本上也是三级模式结构


            SQL术语与传统的关系模型术语不同。在SQL中,外模式对应于视图,模式对应于基本表,元组称为行,属性称为列。内模式对应于存储文件。SQL数据库的体系结构具有如下特征:

    • SQL模式(Schema)是表和约束的集合。
    • 表(Table)是行(Row)的集合,每行是列(Column)的序列,每列对应一个数据项。
    • 表可以是一个基本表,也可以是一个视图。基本表是实际存储在数据库中的表。视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。
    • 一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表,一个表可以带若干索引,索引也存放在存储文件中。每个存储文件与外部存储器上一个物理文件对应,存储文件的逻辑结构组成了关系数据库的内模式。
    • 用户可以用SQL语句对视图和基本表进行查询等操作。在用户看来,视图和基本表是一样的,都是关系(即表格)。
    •   SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有Fortran、Cobol、Pascal、PL/I、C和Ada等语言;SQL语言也能作为独立的用户接口,供交互环境下的终端用户使用。

    1.6、SQL的组成

    • 数据定义 这一部分也称为“SQL DDL”,用于定义SQL模式、基本表、视图和索引。
    • 数据操纵 这一部分也称为“SQL DML”。数据操纵分成数据查询和数据更新两类。其中数据更新又分成插入、删除和修改三种操作。
    • 数据控制 这一部分也称为“SQL DCL”。数据控制包括对基本表和视图的授权,完整性规则的描述,事务控制语句等。

    嵌入式SQL使用 这一部分内容涉及到SQL语句嵌入在宿主语言程序中的使用规则。


    2、存储引擎


            关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。
    在mysql客户端中,使用以下命令可以查看MySQL支持的引擎。
    show engines;


    可以看到MySQL有多种存储引擎:
    MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

    平时用得最多的是MyISAM和InnoDB,下面主要来介绍这两种。

    2.1、MyISAM

    MyISAM表是独立于操作系统的,这说明可以轻松地将其从Windows服务器移植到Linux服务器;每当我们建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,文件名就是表明。例如,我建立了一个MyISAM引擎的tb_Demo表,那么就会生成以下三个文件:

    1.tb_demo.frm,存储表定义;

    2.tb_demo.MYD,存储数据;

    3.tb_demo.MYI,存储索引。

    MyISAM表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM存储引擎。MyISAM存储引擎特别适合在以下几种情况下使用:

    1.选择密集型的表。MyISAM存储引擎在筛选大量数据时非常迅速,这是它最突出的优点。

    2.插入密集型的表。MyISAM的并发插入特性允许同时选择和插入数据。例如:MyISAM存储引擎很适合管理邮件或Web服务器日志数据。

    2.2、InnoDB

    InnoDB是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。InnoDB是作为默认的存储引擎。InnoDB还引入了行级锁定和外键约束,在以下场合下,使用InnoDB是最理想的选择:

    1.更新密集的表。InnoDB存储引擎特别适合处理多重并发的更新请求。

    2.事务。InnoDB存储引擎是支持事务的标准MySQL存储引擎。

    3.自动灾难恢复。与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。

    4.外键约束。MySQL支持外键的存储引擎只有InnoDB。

    5.支持自动增加列AUTO_INCREMENT属性。

    一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。

    2.3、MEMORY

    使用MySQL Memory存储引擎的出发点是速度。为得到最快的响应时间,采用的逻辑存储介质是系统内存。虽然在内存中存储表数据确实会提供很高的性能,但当mysqld守护进程崩溃时,所有的Memory数据都会丢失。获得速度的同时也带来了一些缺陷。它要求存储在Memory数据表里的数据使用的是长度不变的格式,这意味着不能使用BLOB和TEXT这样的长度可变的数据类型,VARCHAR是一种长度可变的类型,但因为它在MySQL内部当做长度固定不变的CHAR类型,所以可以使用。

    一般在以下几种情况下使用Memory存储引擎:

    1.目标数据较小,而且被非常频繁地访问。在内存中存放数据,所以会造成内存的使用,可以通过参数max_heap_table_size控制Memory表的大小,设置此参数,就可以限制Memory表的最大大小。

    2.如果数据是临时的,而且要求必须立即可用,那么就可以存放在内存表中。

    3.存储在Memory表中的数据如果突然丢失,不会对应用服务产生实质的负面影响。

    Memory同时支持散列索引和B树索引。B树索引的优于散列索引的是,可以使用部分查询和通配查询,也可以使用<、>和>=等操作符方便数据挖掘。散列索引进行“相等比较”非常快,但是对“范围比较”的速度就慢多了,因此散列索引值适合使用在=和<>的操作符中,不适合在<或>操作符中,也同样不适合用在order by子句中。

    可以在表创建时利用USING子句指定要使用的版本。例如:
    复制代码 代码如下:

    create table users(

    id smallint unsigned not null auto_increment,

    username varchar(15) not null,

    pwd varchar(15) not null,

    index using hash (username),

    primary key (id))engine=memory;

    上述代码创建了一个表,在username字段上使用了HASH散列索引。下面的代码就创建一个表,使用BTREE索引。
    复制代码 代码如下:

    create table users(

    id smallint unsigned not null auto_increment,

    username varchar(15) not null,

    pwd varchar(15) not null,

    index using btree (username),

    primary key (id))engine=memory;

    2.4、MERGE

    MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。Merge存储引擎的使用场景。

    对于服务器日志这种信息,一般常用的存储策略是将数据分成很多表,每个名称与特定的时间端相关。例如:可以用12个相同的表来存储服务器日志数据,每个表用对应各个月份的名字来命名。当有必要基于所有12个日志表的数据来生成报表,这意味着需要编写并更新多表查询,以反映这些表中的信息。与其编写这些可能出现错误的查询,不如将这些表合并起来使用一条查询,之后再删除Merge表,而不影响原来的数据,删除Merge表只是删除Merge表的定义,对内部的表没有任何影响。

    2.5、小结

    InnoDB存储引擎:用于事务处理应用程序,具有众多特性

    MyISAM存储引擎:主要用于管理费事务表,它提供高速存储和检索,以及全文搜索能力

    MEMORY存储引擎:提供“内存中”表,MEMORY存储引擎的所有数据都在内存中,数据的处理速度快,但安全性不高


    3、名词解释


    • 字段和数据类型

            虽然所有这些引擎都支持通用的数据类型,例如整型、实型和字符型等,但是,并不是所有的引擎都支持其它的字段类型,特别是BLOG(二进制大对象)或者TEXT文本类型。其它引擎也许仅支持有限的字符宽度和数据大小。
    这些局限性可能直接影响到你可以存储的数据,同时也可能会对你实施的搜索的类型或者你对那些信息创建的索引产生间接的影响。这些区别能够影响你的应用程序的性能和功能,因为你必须要根据你要存储的数据类型选择对需要的存储引擎的功能做出决策。

    • 锁定

            数据库引擎中的锁定功能决定了如何管理信息的访问和更新。当数据库中的一个对象为信息更新锁定了,在更新完成之前,其它处理不能修改这个数据(在某些情况下还不允许读这种数据)。
            锁定不仅影响许多不同的应用程序如何更新数据库中的信息,而且还影响对那个数据的查询。这是因为查询可能要访问正在被修改或者更新的数据。总的来说,这种延迟是很小的。大多数锁定机制主要是为了防止多个处理更新同一个数据。由于向数据中插入信息和更新信息这两种情况都需要锁定,你可以想象,多个应用程序使用同一个数据库可能会有很大的影响。
            不同的存储引擎在不同的对象级别支持锁定,而且这些级别将影响可以同时访问的信息。得到支持的级别有三种:表锁定、块锁定和行锁定。支持最多的是表锁定,这种锁定是在MyISAM中提供的。在数据更新时,它锁定了整个表。这就防止了许多应用程序同时更新一个具体的表。这对应用很多的多用户数据库有很大的影响,因为它延迟了更新的过程。
            页级锁定使用Berkeley DB引擎,并且根据上载的信息页(8KB)锁定数据。当在数据库的很多地方进行更新的时候,这种锁定不会出现什么问题。但是,由于增加几行信息就要锁定数据结构的最后8KB,当需要增加大量的行,也别是大量的小型数据,就会带来问题。
    行级锁定提供了最佳的并行访问功能,一个表中只有一行数据被锁定。这就意味着很多应用程序能够更新同一个表中的不同行的数据,而不会引起锁定的问题。只有InnoDB存储引擎支持行级锁定。

    • 建立索引

            建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能。不同的存储引擎提供不同的制作索引的技术。有些技术也许会更适合你存储的数据类型。
    有些存储引擎根本就不支持索引,其原因可能是它们使用基本表索引(如MERGE引擎)或者是因为数据存储的方式不允许索引(例如FEDERATED或者BLACKHOLE引擎)。

    • 事务处理

    事务处理功能通过提供在向表中更新和插入信息期间的可靠性。这种可靠性是通过如下方法实现的,它允许你更新表中的数据,但仅当应用的应用程序的所有相关操作完全完成后才接受你对表的更改。例如,在会计处理中每一笔会计分录处理将包括对借方科目和贷方科目数据的更改,你需要要使用事务处理功能保证对借方科目和贷方科目的数据更改都顺利完成,才接受所做的修改。如果任一项操作失败了,你都可以取消这个事务处理,这些修改就不存在了。如果这个事务处理过程完成了,我们可以通过允许这个修改来确认这个操作。

    4、数据类型

    • 字符串数据类型


    1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
    2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
    3.超过char和varchar的n设置后,字符串会被截断。
    4.char的上限为255字节,varchar的上限65535字节,text的上限为65535。
    5.char在存储的时候会截断尾部的空格,varchar和text不会。
    6.varchar会使用1-3个字节来存储长度,text不会。

    • 数值数据类型

    整型

     

    上面定义的都是有符号的,当然了,也可以加上unsigned关键字,定义成无符号的类型,那么对应的取值范围就要翻翻了,比如:

    tinyint unsigned的取值范围为0~255。

    浮点型

     
    • 二进制数据类型

            二进制类型可存储任何数据,如文字、图像、多媒体等。具体类型描述如下:

                                  
    • 数据类型的属性

      林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

    展开全文
  • Mysql常用数据类型存储大小及范围

    千次阅读 2019-08-27 17:24:37
    整数型数据类型 类型名称 说明 存储大小 取值范围 TINYINT 很小的正数(一般用于boolean存储) 1个字节 -128~127 unsigned:0~255 SMALLINT 小正数 2个字节 -32768~32767 ...
    整数型数据类型
    类型名称 说明 存储大小 取值范围
    TINYINT 很小的正数(一般用于boolean存储) 1个字节 -128~127
    unsigned:0~255
    SMALLINT 小正数 2个字节 -32768~32767
    unsigned:0~65535
    MEDIUMINT 中等大小的正数 3个字节 -2^23 ~2^23-1
    unsigned: 2^24 -1
    INT(INTEGER) 普通大小的正数 4个字节 -2^31 ~2^31-1
    unsigned: 2^32 -1
    BIGINT 大正数(一般用于主键) 8个字节 -2^63 ~2^63-1
    unsigned: 2^64 -1
    小数型数据类型
    FLOAT(M,N)  M表示总共位数,N表示小数位数(单精度浮点数) 4个字节 ±1.175494351E – 38
    DOUBLE(M,N) 双精度浮点数 8个字节 ±2.2250738585072014E – 308
    DECIMAL(M,D) 压缩的严格定点数 M+2个字节 可变;其值的范围依赖于M 和D
    字符串数据类型
    CHAR(N) 固定长度  N * C(字符存储大小见文末注释1) 0~255字符
    VARCHAR(N) 可变长度(与CHAR区别见文末注释2 实际存储大小 0~65535字节
    TEXT 文本 实际存储大小 0~65535字节
    LONGTEXT 长文本 实际存储大小 0~2^32-1字节
    日期数据类型
    DATE 存储日期值(yyyy-MM-dd) 3个字节 1000-01-01~9999-12-31 
    TIME 存储时分秒(HH:mm:ss) 3个字节 00:00:00~23:59:59 
    DATETIME 存储日期+时间(yyyy-MM-dd HH:mm:ss) 8个字节

    1000-01-01 00:00:00~

    9999-12-31 23:59:59

    TIMESTAMP 存储日期+时间,可作时间戳(yyyy-MM-dd HH:mm:ss) 4个字节 1970-01-01 00:00:01~ 2038-01-19 03:14:07

     注释1:

    UTF-8   : 一个英文/数字字符占1个字节,一个中文(含繁体)字符占3个字节。
    Unicode: 一个英文/数字字符占2个字节,一个中文(含繁体)字符占2个字节。
    符号      : 英文标点占1个字节,中文标点占2个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

    注释2:

    char:固定长度,最大长度是255字符。适合用在身份证号码、手机号码等定、等长的加密密码等。 
    varchar:可变长度,最大长度65535字节,其实最多只能存储65532个字节,还有3个字节用于存储长度。
          
    1)char的存取速度优于varchar
    2)char(20)表示这个字段最多存20个字符,如果只存了16个字符,那么也会占用20个字符的空间
       varchar(20)表示这个字段最多存20个字符,如果只存了16个字符,那么只占用16个字符的空间
    3)即使使用Varchar数据类型,也不能够太过于慷慨!比如你只使用到90个字符,VARCHAR(100)与VARCHAR(200),虽然他们用来存储90个字符的数据,其存储空间相同。但是对于内存的消耗是不同的。



     

             

    展开全文
  • 常用的数据库备份类型有哪些

    千次阅读 2019-11-05 18:38:49
    对数据库的备份是网站管理人员的必修课,那么常用的数据库备份方式有哪些呢?应如何选择? 数据库备份四种类型,分别应用于不同的场合,下面简要介绍一下。 1、完全备份 这是大多数人常用的方式,它可以备份...
  • 下载的矢量图资源会发现ai格式、cdr格式的、eps格式、icon格式,的能使用Photoshop打开而的不行。使用Photoshop保存矢量图时候选择什么格式保存都是经常遇到的问题。 常见问题及解决:PS打开ai格式的矢量图...
  • 三种存储类型和三种存储方式

    万次阅读 多人点赞 2019-01-22 17:07:39
    三种存储类型:块存储、文件存储、对象存储 块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-...
  • ... ... 存储类型 先从三种存储类型开始。...看了很多文章,感觉都无从下手,因为我还不了解为什么这么多的存储方式和存储类型,所以先不看这些概念的定义,先了解为什么会这些概念。 为什么会这么多存储
  • MySQL常用存储引擎详解

    千次阅读 2021-04-05 15:15:43
    MySQL常用存储引擎详解一、什么是存储引擎二、掌握存储引擎的重要性三、MySQL常用的存储引擎有哪些四、存储引擎的特性1、InnoDB2、MyISAM3、MEMORY4、ARCHIVE总结 一、什么是存储引擎 存储引擎是数据库的核心,对于...
  • 块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based Storage Device)简称OSD。  首先...
  • Redis数据库存储类型的介绍和选择

    千次阅读 2018-07-26 09:43:57
    ​ 字符串类型是 Redis 中最为基础的数据存储类型,它在 Redis 中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等。在Redis中字符串类型的Value最多可以容纳的数据...
  • 常用存储过程语法

    万次阅读 2008-09-19 18:30:00
    前面学过了基本的存储过程,见 存储过程入门 现在学一下常用存储过程的语法,只要花一点点时间学习下,就能用存储过程实现很复杂的功能,可以少写很多代码。 为了方便说明,数据库使用SQL Server的示例数据库,...
  • C#常用数据存储

    千次阅读 2017-10-31 21:01:03
    C#常用数据存储类型 1.List 类 表示可通过索引访问的对象的强类型列表。 提供用于对列表进行搜索、排序和操作的方法。 命名空间: System.Collections.Generic 程序集: mscorlib(在 mscorlib.dll 中)...
  • 常用的集合有哪些

    万次阅读 多人点赞 2018-09-07 15:56:11
    常用的三大类集合:Set、List、Map。 1 Set 1) Set 集合属于单列集合,不允许包含重复元素; 2) 判断元素是否重复的标准为对象的 equals 方法,存在时返回 false,不存在返回 true; 3) 元素的排序规则,由相应...
  • 常用存储过程语法收藏

    千次阅读 2010-03-17 16:03:00
    常用存储过程语法收藏 新一篇: 利用WatiN自动化网站功能测试 | 旧一篇: 代码自动生成工具MyGeneration之三 前面学过了基本的存储过程,见 存储过程入门 现在学一下常用的存储过程的语法,只要花一点点时间学习下,就...
  • NSUserDefaults 存储类型 及存储对象

    千次阅读 2015-10-30 11:59:51
    一、了解NSUserDefaults以及它可以直接存储类型  NSUserDefaults是一个单例,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前提,也是大家喜欢...
  • MySQL常用存储引擎

    千次阅读 2012-04-13 15:41:07
    MySQL常用存储引擎为MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整...
  • Redis数据存储类型(一)

    千次阅读 2016-02-02 19:16:22
      Redis支持存储的value类型相对更多...笔者总结了这五种数据存储类型常用命令。 一、String String 是Redis最简单的数据存储类型,以key-value的形式可对任何数据进行存储,包括图片或序列化对象。【k-k...
  • 数据库常用的锁有哪些

    万次阅读 2019-01-14 22:13:12
    mysql数据库存在多种数据引擎,MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。 二、表级锁 1.表级锁(表级锁一次会将整个表锁定,所可以很好的避免死锁问题) (1)锁定粒度...
  • Redis常用数据类型

    千次阅读 2015-07-25 23:46:28
    Redis常用数据类型 String Hash List Set Sorted set ...下面我们先来逐一的分析下这五种...应用场景:String是最常用的一种数据类型,普通的key/value存储都可以归为此类。 实现方式:String在redis内部存储默认就
  • 函数中的局部变量,如果不专门声明为static存储类型,都是动态分配存储空间的,数据存储在动态存储区。函数中的形参和函数中定义的变量都属于此类。在调用这些函数时,系统会给它们分配存储空间,在函数调用结束后就...
  • MySQL - 常用存储引擎区别总结(2020最新版)

    万次阅读 多人点赞 2020-07-11 17:07:33
    存储引擎是数据库的核心,在MySQL中,存储引擎是以插件的形式运行的。支持的引擎十几种之多,但我们实战常用到的,大概只有InnoDB、MyISAM 和 Memory 了。术业专攻,这三种引擎各特点和适用场景,也算是各自的...
  • 嵌入式中的常用存储设备简介

    千次阅读 2016-10-23 17:26:05
    嵌入式中的常用存储设备简介@(嵌入式Linux 计算机知识)==============================================ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统...
  • 常见的3种存储类型

    千次阅读 2019-07-06 07:52:31
    主机客户端直接和存储设备连接,存储也可放到机箱内部,(内部连接协议ATA也就是IDE,也使用SATA协议的),也会用到SCSI和FC协议 范围:范围有限,距离短,多少米的范围内,连接主机个数有限。 固态硬盘,速度...
  • Java引用类型有哪些

    万次阅读 2019-07-05 16:48:32
    其中,引用数据类型存储堆中对需要引用的对象进行引用,引用是Java面向对象的一个特点,在Java入门中,我们会接触到四种Java的引用类型,接下来就说说这四种Java引用类型有哪些吧: 1、Java中哪几种引用?...
  • 常见的浏览器端的存储技术有哪些

    千次阅读 2015-11-04 14:22:10
    目前常用以下几种方法: cookie cookie会随着每次HTTP请求头信息一起发送,无形中增加了网络流量,另外,cookie能存储的数据容量有限,根据浏览器类型不同而不同,IE6大约只能存储2K。 Flash ...
  • MySQL中常用的四种存储引擎分别是: MyISAM存储引擎、innoDB存储引擎、MEMORY存储引擎、ARCHIVE存储引擎。本文将对这四种存储引擎作出重点介绍,最后对这四种存储引擎进行比较。 MySQL中的存储引擎 一、存储引擎 1、...
  • 日常开发中我们常常要用到保存数据,Android中常用存储方式SQLite,sharedPreferences 等,当然也各自的应用场景,前者适用于保存较多数据的情形,后者责倾向于保存用户偏好设置比如某个checkbox的选择状态,...
  • Postgres常用数据类型

    千次阅读 2018-12-07 18:31:29
    目录 4.3 数据库支持的数据类型 4.3.1 numeric类型 4.3.2 二进制类型 4.3.3 日期/时间类型 ...4.3.8 常用类型 4.3 数据库支持的数据类型 4.3.1 numeric类型 字段名字 存储大小 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 706,571
精华内容 282,628
关键字:

常用的存储类型有哪些