zoukankan      html  css  js  c++  java
  • 存储引擎 数据类型

    不同的数据应该有不同的处理机制 *****
            mysql存储引擎
                Innodb:5.1版本之后MySQL默认的存储引擎, 查询速度较myisam慢  但是更安全(支持事务,行锁和外键),建表时会创建表结构文件和存储数据文件。
                myisam:5.1版本之前mysql默认的存储引擎。建表时会创建表结构文件,索引文件(索引可以先理解为书的目录,能够快速查询数据)和存储数据文件。
                memory:内存引擎(数据全部存在内存中)。建表时会创建表结构文件。
                blackhole:无论存什么 都立马消失(黑洞)。建表时会创建表结构文件 。
           show engines;  查看所有存储引擎存取数据的特点

    数据类型
          整型, 浮点型, 字符类型, 日期类型, 枚举与集合类型

    约束
          not null, unique, default, primary key  ...

    创建表的完整语法
            create table 表名(
                字段名1 类型[(宽度) 约束条件],
                字段名2 类型[(宽度) 约束条件],
                字段名3 类型[(宽度) 约束条件]
                );

    注意:

      1.字段名和字段类型是必须的  中括号内的参数都是可选参数
            2.同一张表中字段名不能重复
            3.最后一个字段后面不能加逗号

    宽度:
            使用数据库的准则: 能尽量让它少干活就尽量少干活     
            对存储数据的限制  char(1)  只能存一个字符, 如果超了mysql会自动帮你截取
                1.插入的时候 mysql自动截取    # 没有安全模式的数据库版本
                2.会直接报错(mysql严格模式)   # 最新数据库版本直接报错提示无法存储
            alter table t5 modify name char not null;    not null该字段不能插空
    类型和中括号内的约束
            类型约束的是数据的存储类型 , 而约束是基于类型之上的额外限制

    字段类型
            整型: SMALLINT     TINYINT(1bytes)     INT (4bytes)     BIGINT      默认都带正负号
              TINYINT :默认是带有符号的(-128,127),超出限制会如何   超出之后只会存最大值或者最小值
            create table t6(id TINYINT);
            not null    不能为空, unsigned    无正负符号,  zerofill    用0填充多余的位数
          char后面的数字是用来限制存储数据的长度的
          特例:只有整型后面的数字不是用来限制存储数据的长度 而是用来控制展示的数据的位数,在定义整形字段的时候,不需要指定宽度,默认就是最大宽度。
         int(8)  够/超8位有几位存几位,但不能超过int最大范围,不够8位空格填充
          修改约束条件  不够8位的情况下 用0填充
          强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据,只要是整型 都不需要指定宽度 因为有默认的宽度 足够显示对应的数据。

    模糊匹配    like
                %匹配任意多个字符
                _匹配任意一个字符    
            set session  临时有效  只在你当前操作的窗口有效
            set global   全局有效  终生有效
            set global sql_mode = 'STRICT_TRANS_TABLES';
            设置完之后 你只需要重新退出客户端再次进入即可
    浮点型
            float(255,30)  总共255位 小数部分占30位
            double(255,30) 总共255位 小数部分占30位
            decimal(65,30) 总共65位 小数部分占30位     
              create table t12(id FLOAT(255,30));
              create table t13(id DOUBLE(255,30));
              create table t14(id DECIMAL(65,30));  
              insert into t12 values(1.111111111111111111111111111111);
              insert into t13 values(1.111111111111111111111111111111);
              insert into t14 values(1.111111111111111111111111111111);

      精确度: float < double < decimal

    字符类型
            char(4)        定长: 最大只能存四个字符 超出来会直接报错  如果少了 会自动用空格填充
            varchar(4)   可变长: 最大只能存四个字符 超出来会直接报错  如果少了 有几个存几个
              create table t15(name char(4));
              create table t16(name varchar(4));    
              char_length()   
            mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据,但是再取出来的那一瞬间 mysql会自动将填充的空格去除  
            可以通过严格模式 来修改该机制 让其不做自动去除处理       
     char与varchar的区别
          char定长:1.浪费空间    2.存取速度快    
          varchar变长:1.节省空间  2.存取速度慢(较于char比较慢)
                        存的时候 需要给数据讲一个记录长度的报头
                        取的时候 需要先读取报头才能读取真实数据   
           char(4) :取的时候方便 ,直接按固定的长度取即可

            varchar(4):取的时候比较繁琐了 无法知道数据到底多长

        日期类型
            date    datetime    year     time
        枚举与集合类型
            枚举(enum)  限制某个字段能够存储的数据内容(多选一)
            集合(set)   限制某个字段能够存储的数据内容(多选多但是也可以多选一)

      如果写的内容不在范围内会直接报错。
    约束条件
        not null  不能为空
        default   给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)
          create table t17(id int,name char(16) default 'jason');   
        往表中插入数据的时候  可以指定字段进行插入 不需要全部都插
          insert into t17(name,id) values('egon',2);
    unique 唯一  
        单列唯一   限制某一个字段是唯一的
        联合唯一(在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的)
            create table server(
                  id int,
                  ip char(16),
                  port int,
                  unique(ip,port)
                )  

    primary key  主键
            限制效果跟 not null + unique 组合效果一致   非空且唯一
              create table t18(id int primary key);     
            primary key也是innodb引擎查询必备的索引,索引你就把当成书的目录         
            innodb引擎在创建表的时候 必须要有一个主键, 当你没有指定主键的时候
                1.会将非空切唯一的字段自动升级成主键
                2.当你的表中没有任何的约束条件  innodb会采用自己的内部默认的一个主键字段,该主键字段你在查询时候是无法使用的,查询数据的速度就会很慢,类似于一页一页的翻书。             
                    create table t19(
                        id int,
                      name char(16),
                      age int not null unique,
                      addr char(16) not null unique
                    );
        通常每张表里面都应该有一个id字段,并且应该将id设置为表的主键字段   
        联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!!!
                !!!!!!!!!!!!!!!!!ps:innodb引擎中一张表有且只有一个主键!!!!!!!!!!!!!!!!!!!!!!!       
            create table t20(
                    ip char(16),
                  port int,
                  primary key(ip,port)
                );
                desc t20;  
           主键字段应该具备自动递增的特点,每次添加数据  不需要用户手动输入
           auto_increment  自动递增
              create table t21(id int primary key auto_increment,name varchar(16));   
              create table t22(id int primary key,name varchar(16));
        delete from  仅仅是删除数据   不会重置主键
        truncate   初始化表  会重置主键

    dayehui
  • 相关阅读:
    跳转指定页面
    如何解决项目中.a文件中的.o冲突
    地图根据起点和终点计算中心点角度来绘制弧线 iOS
    codePush常用
    ios原生push到RN界面后pop
    atomic,nonatomic的区别
    KVC
    jQuery绑定event事件的各种方法比较
    Git常用命令总结
    多个$(document).ready()的执行顺序问题
  • 原文地址:https://www.cnblogs.com/zrh-960906/p/11378940.html
Copyright © 2011-2022 走看看