zoukankan      html  css  js  c++  java
  • MySQL--存储引擎、数据类型、约束条件

    一、存储引擎

      引子:不同数据类型应该有不同处理机制

        show engine(查看存储引擎)

      MySQL存储引擎engine

        1.lnnodb:默认的存储引擎,查询速度较myisam慢,但是更安全

          创建表后文件有两个: .frm文件(表结构)、.ibd文件(真实数据)

        2.myisam:mysql老版本的存储引擎

          创建表后文件有三个: .frm文件(表结构)、.myd文件(真实数据)、myi文件(id索引)

        3.memory:内存引擎(数据全部存储在内存中)

          创建表后有一个文件: .frm文件(表结构)

        4.blackhole:无论存什么,都立马消失(黑洞)

          创建表后有一个文件: .frm文件(表结构)

    二、创建表的完整语法:

      create table 表名(

        字段名1 类型[(宽度) 约束条件]

        字段名2 类型[(宽度) 约束条件],

        字段名3 类型[(宽度) 约束条件],

        );

      注意:

        1.字段名和字段类型是必须的,中括号内的参数都是可选参数

        2.同一张表中字段名不能重复

        3.最后一个字段后面不能加逗号

      宽度:

        对存储数据的限制(使用数据库的准则,能尽量让它少干活就尽量少干)

          char(1)  只能存一个字符。

            如果超了 mysql会自动帮忙截取

            1.插入的时候,mysql自动截取

            2.会直接报错(mysql严格模式下)

      类型与中括号内的约束

        类型约束的是数据的存储类型

        而约束的是基于类型之上的额外限制

    三、数据类型:

      建表的时候,字段都有对应的数据类型

      1.整形

        TINYINT、SMALLINT 、MEDIUMINT、 INT或INTEGER 、BIGINT 

      对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

      ps:查格式

        show variable like %mode%

        设置严格模式
          set session 临时有效 只在你当前操作的窗口有效
          set global 全局有效 终生有效
          set global sql_mode = 'STRICT_TRANS_TABLES';
        设置完之后 你只需要重新退出客户端再次进入即可

    '''    
    模糊匹配
        like 
        %匹配任意多个字符
        _匹配任意一个字符
            
    1. 百分号(%):示任意个或多个字符,可匹配任意类型和长度的字符。
    
    示例1:SELECT * FROM character WHERE name LIKE ‘%孙%';即匹配e姓名为“孙行者”,“行者孙,“行者孙”三行数据
    
    示例2:SELECT * FROM character WHERE name LIke '%孙%' and name like '%行%'; 即匹配姓名为“孙行者”,“行者孙,“行者孙”三行数据
    
    示例3:SELECT * FROM character WHERE name LIke '%孙%行%‘;只能匹配姓名为“孙行者”一行数据
    注意示例2和示例3的区别
    
    2.下划线(_):表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:(可以代表一个中文字符)
    
    示例1:SELECT * FROM character WHERE name LIKE ‘_三_';即把姓名为“唐三藏”的一行数据
    
    示例2:SELECT * FROM character WHERE name LIKE ‘_三';即把姓名为“唐三”一行数据
    模糊匹配

      2.浮点型

        FLOAT、DOUBLE、DECIMAL (精准度依次增大)

        字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数

    # 存储限制
    float(255,30)
    double(255,30)
    decimal(255,30)
    
    # 精确度验证
    create table t9(x float(255,30));
    create table t10(x double(255,30));
    create table t11(x decimal(65,30));
    
    insert into t9 values(1.111111111111111111111111111111);
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);
    三者最大整数位和小数位对比:

    cmd输出

    类型表

      3.字符类型(char与varchar)

         char(4)  #最大只能存放四个字符,炒出来会直接报错,如果少了,用空格填充

         varchar(4)  #最大只能存四个字符,超出来会直接报错,不够4个,实事求是存

      区别 空间 存取速度 取值
    char 定长 浪费空间 存取速度快 方便取,按固定长度即取可
    varchar 边长 节省空间 存/取都需要先记录/解读报头 取得时候繁琐,无法知道数据长度

      

      4.日期类型

        datatime   年月日时分秒

        data  年月日

        year  年

        time  时分秒

    create table student(
        id int,
      name char(16),
      born_year year,
      birth date,
      study_time time,
      reg_time datetime
    );
    View Code

      5.枚举与集合

         枚举(enum,多选一)  限制某个字段能够存储的数据内容

        集合(set,多选多)    限制某个字段能够存储的数据内容

    create table user(
        id int,
      name char(16),
      gender enum('male','female','others')
    );
    insert into user values(1,'jason','xxx')  # 报错
    insert into user values(2,'egon','female')  # 正确!
    
    
    create table teacher(
        id int,
      name char(16),
      gender enum('male','female','others'),
      hobby set('read','sleep','sanna','dbj')
    );
    insert into teacher values(1,'egon','male','read,sleep,dbj')  # 集合也可以只存一个
    View Code

    四、约束条件

      1.not null 不能为空

      2.default 给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)

        create table t17(id int,name char(16) default 'jason');

      3.unique 唯一(分单列和联合 ip+port 唯一)

      4.primary key 主键  (not null + unique 组合效果一致   非空且唯一)

        是innodb引擎查询必备的索引

      5.primary key + auto_increment(自动递增)

        1.一张表中必须有且只有一个主键,未设置,从上到下搜索遇到非空且唯一的字段自动将其设置为主键

        2.如果表里面没有任何的可以设置字段,默认隐藏字段作为主键(查不到,无用)

        3.一张表中通常都应该有一个ID字段,并且通常将改id字段为主键

        unique key

        default 给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值)

        not null 不能为空

       ps:delete from 仅仅是产出数据,不会重置主键

        truncate 初始化表,会重置主键

  • 相关阅读:
    NUMBER BASE CONVERSION(进制转换)
    2776 寻找代表元(匈牙利算法)
    最长严格上子序列(二分优化)
    c++ bitset类的使用和简介
    笨小猴 2008年NOIP全国联赛提高组
    三国游戏 2010年NOIP全国联赛普及组
    全国信息学奥林匹克联赛(NOIP2014)复赛 模拟题Day2 长乐一中
    codevs 1704 卡片游戏
    热浪
    全国信息学奥林匹克联赛 ( NOIP2014) 复赛 模拟题 Day1 长乐一中
  • 原文地址:https://www.cnblogs.com/xiaowangba9494/p/11378824.html
Copyright © 2011-2022 走看看