zoukankan      html  css  js  c++  java
  • 14.8.1 Creating InnoDB Tables 创建InnoDB 表

    14.8.1 Creating InnoDB Tables  创建InnoDB 表
    
    
    创建一个InnoDB表,使用CREATE TABLE 语句,你不需要指定ENGINE=InnoDB 子句 
    
    如果InnoDB 是定义为默认的存储引擎,在MySQL 5.5是默认为InnoDB.
    
    
    你仍旧可以使用 ENGINE=InnoDB clause 如果你计划使用mysqldump或者复制 来重现CREATE TABLE 在一个server上
    
    那个server 默认不是InnoDB 存储引擎
    
    -- Default storage engine = InnoDB.
    CREATE TABLE t1 (a INT, b CHAR (20), PRIMARY KEY (a));
    
    -- Backward-compatible with older MySQL.
    CREATE TABLE t2 (a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB;
    
    
    
    在一个InnoDB 表和他的索引可以创建在系统表空间或者一个 file-per-table tablespace. 
    
    
    当 innodb_file_per_table  启用时,一个InnoDB 表时隐式的创建在一个单独的 file-per-table tablespace. 
    
    
    相反,当innodb_file_per_table is disabled,  一个InnoDB 表时隐式的创建在系统表空间。
    
    
    当你创建一个InnoDB 表,MySQL 创建一个 .frm file 在一个数据库目录在MySQL data directory.目录下。
    
    
    一个.ibd文件也会被创建  一个表创建在 system tablespace 是创建在存在的system tablespace ibdata files.
    
    
    在内部, InnoDB 增加一个条目对于每个表到InnoDB 的数据字典。
    
    条目包含数据库名字 比如,如果表t1是创建在test数据库下,
    
    数据目录条目是'test/t1'.
    
    这意味着你能创建相同的名字的表在不同的数据库,表名字在InnoDB内部不冲突
    
    
    mysql> SHOW TABLE STATUS FROM test LIKE 't%' G;
    *************************** 1. row ***************************
               Name: t1
             Engine: InnoDB
            Version: 10
         Row_format: Compact
               Rows: 0
     Avg_row_length: 0
        Data_length: 16384
    Max_data_length: 0
       Index_length: 0
          Data_free: 0
     Auto_increment: NULL
        Create_time: 2015-03-16 16:26:52
        Update_time: NULL
         Check_time: NULL
          Collation: latin1_swedish_ci
           Checksum: NULL
     Create_options:
            Comment:
    1 row in set (0.00 sec)
    
    
    在这个状态输出,你可以看到 表t1的hang格式属性是 Compact
    
    
    尽管设置是好的对于基本的实验,使用动态或者压缩行格式来利用InnoDB的功能 
    
    比如表压缩和off-page storage  用于long列的值  使用那些行格式需要innodb_file_per_table 启用
    
    mysql> SHOW TABLE STATUS FROM zjzc like 'Client'G;
    *************************** 1. row ***************************
               Name: Client
             Engine: InnoDB
            Version: 10
         Row_format: Compact
               Rows: 13244
     Avg_row_length: 436
        Data_length: 5783552
    Max_data_length: 0
       Index_length: 3620864
          Data_free: 3145728
     Auto_increment: 13778
        Create_time: 2016-10-28 09:46:59
        Update_time: NULL
         Check_time: NULL
          Collation: utf8_general_ci
           Checksum: NULL
     Create_options: 
            Comment: 用户表
    
    1 row in set (0.00 sec)
    
    ERROR: 
    No query specified
    
    
    SET GLOBAL innodb_file_per_table=1;
    SET GLOBAL innodb_file_format=barracuda;
    CREATE TABLE t3 (a INT, b CHAR (20), PRIMARY KEY (a)) ROW_FORMAT=DYNAMIC;
    CREATE TABLE t4 (a INT, b CHAR (20), PRIMARY KEY (a)) ROW_FORMAT=COMPRESSED;
    
    
    Defining a Primary Key for InnoDB Tables  定义一个主键在InnoDB 表上
    
    
    1.总是设置一个主键对于每个InnoDB表,指定列或者多列
    
    
    2. 被用于最重要的查询
    
    3.永远不会是空的
    
    4.不会有重复值
    
    5.很少改动一旦插入后
    
    
    例如, 在一个表包含信息关于people, 你不能创建一个主键在(firstname, lastname)
    
    因为不止一个人有相同的名字, 有些人last name是空白的,有些人会改变它们的名字。
    
    有这么多的约束, 没有一个明显的列来使用作为主键。
    
    
    因此你可以创建一个数据列ID 来作为主键,你可以定义一个自增列

  • 相关阅读:
    gameunity 3.0 (supersocket + lidgren + unity )
    lidgren 介绍和使用 (四)------ p2p
    lidgren 介绍和使用 (三)------ 异步获取信息
    lidgren 介绍和使用 (二)------集成unity测试
    lidgren 介绍和使用 (一)

    单调队列
    树状数组
    Win7 远程 Ubuntu 桌面 mate desktop,并实现中文输入法
    Ubuntu安装sougou输入法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350060.html
Copyright © 2011-2022 走看看