zoukankan      html  css  js  c++  java
  • mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件

     引擎

    show engines : 查看引擎
    
    innodb(默认引擎):支持事务,行级锁,外键
    myisam:查询效率由于innodb,不需要支持事务,行级锁,外键,可以选用myisam来优化数据库
    
    mysql> create table t1(id int)engine=innodb;
    mysql> create table t2(id int)engine=myisam;
    mysql> create table t3(id int)engine=blackhole;
    mysql> create table t4(id int)engine=memory;


    eg:
      create table t1(name char,id int) engine=innodb
      insert into t1 values(1)

    一个完整的建表语句

    create table 表名 (
      字段名1 类型[(宽度)约束条件],
      字段名2 类型[(宽度)约束条件],
      字段名3 类型[(宽度)约束条件],
    )engine=innodb charset="utf8";
    #engine 指引擎,charset指字符编码集

    数据库模式:

     严格模式:超出范围报错      非严格模式:超出范围不报错

    show variables like "%sql_mode%"  查看当前数据库模式,% 代表模糊查找
    set global sql_mode="strict_trans_tables";     设置数据库模式
    
    no_engine_substitution:非安全性,默认
    strict_trans_tables:安全模式(严格模式)

    mysql数据类型

    规定数据存放的哪些数据
    整形 浮点型 字符型 时间类型 枚举类型 集合类型

     整形:(长度默认是11)

    整形: 不同类型所占字节数不一样,决定所占空间及存放数据大小限制
    tinyint:1字节
    -128 到 127 smallint:2字节 mediumint:3字节 int:4字节 bigint:8字节

    形式  tinyint    smallint   mediumint   int    bigint

    字节  1(255)        2          3         4       8

    宽度:

    1.不能决定整形存放数据的宽度,超过宽度可以存放,最终由数据类型所占字节决定

    2.如果没有超过宽度,且有zerofill限制,会用0填充前置位的不足为

    3.没有必要规定整形的宽度,默认设置的宽度就为最大宽度

     整形的限制:不是容量限制,而是显示宽度

       create table t1(id int(5) zerofill)  当查看的数是小于长度5,用0补上

     浮点型

       float   double     decimal
    字节  4       8     (自定义)

    float:4字节 精度最低,最常用 double:8字节 精度高,占位多 decimal:自定义字节
    字符串存,全精度
    float(M,D) M为总位数,D为小数位
    根据总位数可以算出整数位的位数 float(
    6,3)

    字符集

    char:定长    一定按规定存放数据,以规定宽度读取数据
    varchar:不定长    首先根据数据长度计算宽度,并在数据开始以数据头方式将宽度信息保存起来,计算耗时
    宽度: char(
    4):以四个字符长度存储,超出报错浪费空间,以空间换取时间效率,减少IO
    varchar(4):数据长度决定字符长度,但也不能超出长度,节省空间

    总结:数据长度相近的数据提倡用char来存取数据,数据需要高速存取,异空间换时间


    char(3)  在硬盘保存为3 字符长度
        yxx exx lxx zxx char(3)
    如果是char类型 ,数据不足,空格补全
    smysql自动去除空格 select *from t1 where name='yh'
    
    

    char 存取效率高/ 浪费存储空间

    varchar 存取效率低于char/节省存储空间

    字符串现出原形:

    char_length(x)  字符的个数
    我们可以设置sql模式 来让它现出原形
    set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
    设置完成后重启msyql 再次查询长度

    时间类型

    year:年  yyyy(1901/2155)
    date:年-月-日  yyyy-MM-dd
    time:时分秒   HH:mm:ss
    datetime:年月日时分秒 yyyy-MM-dd HH-mm-ss    可以为空,不依赖时区
    timestamp:年月日时分秒 yyyy-MM-dd HH-mm-ss   不能为空,默认位当前时间,依赖时区

    共同点: 时间存取通过字符串类型 都可以使用now()函数来插入当前时间

    create table student(

        id int primary key auto_increment,

        name char(16),

        born_year year,

        birth date,

        class_time time,

        reg_time datetime

    );

    insert into student value(2,'zxx',2000,2018-11-11,now(),now());

    枚举与集合

    枚举 enum:单选
    集合 set:多选
    性别:单选
    爱好:多选 create table t1 (   sex enum(
    'male',"female","wasai") not null default "wasai"", #枚举   hobbies set("play","read","music") #集合 ); insert into t1(sex,hobbit) values("male","play,read");

    约束条件

    foreign ket:外键(联合索引)
    
    主键: 表默认都有主键
    primary key:主键(不为空,唯一性)
    单例主键:
    create table t1(id int primary key)
    联合主键:
    create table t1(ip char(16),port int,primary key(ip,port))
    
    
    唯一性:
    unique key: 唯一性约束,联合唯一
    单列唯一(单个字段不能重复)
    create table t1(id int unique)
    
    联合唯一(指联合的字段不能同时重复)
    create table t1(
      ip char(16),
      port int,
      unique(ip,port)
    )
    
    
    自增:
    auto_increment:自增,只能跟key字段连用
    create table t1(id int primary key auto_increment )
    
    not null:不能为空
    default:默认值
    
    unsigned : 无符号
    zerofill : 0填充
  • 相关阅读:
    BFS(广度优先搜索)
    有源点最短路径--Dijkstra算法
    DFS(深度优先搜索)
    循环双链表基本操作
    有向图的邻接表
    无向网的邻接矩阵
    双链表的基本运算
    项目环境搭建【Docker+k8s】十 || kubernetes资源配置运行容器
    项目环境搭建【Docker+k8s】九 || kubernetes创建容器
    项目环境搭建【Docker+k8s】八 || kubernetes集群部署
  • 原文地址:https://www.cnblogs.com/liu--huan/p/9637309.html
Copyright © 2011-2022 走看看