1.详细的建表语句 *****
    create table 表名( 字段名 数据类型[(长度) 约束条件] );
    []代表可选的
    为什么需要给数据分类?
        189  一八九
    1.描述数据更加准确
    2.节省内存空间
 
2.数据类型 *****
    整数类型
    默认有符号的
    设置为无符号
        1.create table t2(age tinyint unsigned);
        2.建表后用alter修改
  !!!!! 对于整数类型而言长度不是数据所占的字节数 是显示数据时的宽度(字符数)
  默认情况下 存储的数值的十进制位数  小于所设置的显示宽度时  不会填充 没有任何效果
  加上zerofill 指定当存储的数值的十进制位数  小于所设置的显示宽度时 用0来填充
  当数据的十进制位长度 大于显示宽度 可以正常显示
  主要记住  整型后面的长度的含义 有字符是不同的
    tinyint
    smallint
    mediumint
    int  *****
    bigint
总结:除了存储范围没啥区别
     都是整型
     默认有符号
     对于显示宽度 原理是相同的
    长度参数如果不指定 会有默认值
严格模式
    什么是严格模式  对插入的数据严格要求 不再范围内直接报错  例如往tinyint中插入大于255的值将报错
    什么是非严格模式 不 对插入的数据严格要求 不再范围内也可以保存 保存的当前类型最大支持的值
    5.6默认是非严格模式
    5.7以后默认严格模式
    查看SQL模式
        select @@sql_mode;
        show variables like "sql_mode";
    修改SQL模式
        set @@sql_mode = "值";
    正常情况不需要改
    浮点类型
        float   4字节
        double  8字节
        decimal 不固定
        create table t9(num float(m,d))
        m 表示总长度  d 表示小数部分的长度
        长度表示不是数据存储范围 而是字符长度
        10.12 总长为4  小数部分为2
        各个类型的最大长度
        float (255,30) *****
        double (255,30)
        decimal (65,30)
   
  区别:
            float与double的精度不同  都是不准确的小数
            decimal 准确的小数  不会丢失精度
         具体使用哪种类型得根据使用场景判断
         float满足大部分使用场景
         decimal适合银行系统 科学研究等
            括号中m和d的值 可以限制数据存储范围 与整型不同
       
      重点:记住m和d的含义
    
  字符串类型
        常用两种
        char  定长字符串
        char
        varchar  可变长度字符串
        注意字符串中 长度指定的是数据的字符长度  与字节没关系
        create table t13(c1 char,c2 varchar(10));
        在创建时 varchar必须指定长度  char有默认值
       
   不同点:
            a char(3) b char(3)
            A  |B   |
            char类型在取数据时 就根据长度来获取 不关心真实数据长度
            无论的数据有多长 占用的空间是固定的 造成了一定空间浪费
            a varchar(30) b varchar(30)
            (1)A(1)B
            varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据  关心真实数据长度
            先存储长度需要一个字节 再存储真实数据  不会浪费空间
            但是 由于需要计算数据的长度 所以存取速度会比定长慢
       
   相同点:
            括号中的数字 都是表示存储最大字符长度
             char使用频率更高
        mysql会在存储数据时自动将数据末尾的空格去掉
        如果必须要存空格 需要修改sql_mode  增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据
        由于自动去除空格这个机制 在使用等于符号 和like时有区别
            select *from t1 where name = "yh     "; 会自动去除空格
            select *from t1 where name like "yh     "; 不会自动去除空格
            like 用于模糊匹配   使用%表示0或任意个任意字符 使用_表示一个任意字符
  
  日期和时间
        year
        time
        date
        datetime  *****
        timestamp *****
        timestamp特点是:可以给null 自动输入当前时间  当这条记录被修改了会自动更新当前时间
  
  枚举
        enum  可以指定一堆字符串的值  在插入数据时  数据必须这堆字符串中的其中一个 ("男的","女的")  多选一
       集合
        set  可以指定一堆字符串的值  在插入数据时  数据必须这堆字符串中的其中一个或多个 ("男的","女的")  多选多
     共同点:数据都是字符串类型
 
3.约束****
    是一种对数据限制
        已经学习过的 数据类型 unsigned无符号 字符串长度 浮点的长度
    约束的作用是?
        为了保证数据的正确性,完整性
    例如要存储密码   char(20)   只限制了类型和长度,   无法保证数据的正确性
    额外的约束
   
 语法:
        创建时指定约束
        create table 表名称(字段名 类型(长度) 约束名称1 约束名称n,....)
        后期修改的方式添加 约束
        alter table 表名称 modify 字段名 类型(长度) 约束名称1 约束名称n,....
   
 NOT NULL 非空约束  限制该字段的值不能为空
    UNIQUE 唯一性约束  限制该字段的值是唯一的不能出现重复
    DEFAULT 默认值约束 如果插入数据时没有指定该字段的值则使用默认值
    PRIMARY KEY 主键约束 限制该字段 不能为空 并且是唯一的   可以唯一标识一条数据 *****
    FOREIGN KEY 外键约束 用来指向另一个表的主键
    每一个表都应该有一个主键 需要唯一标识 否则可以可能出现完全相同的两个数据 无法区分
    UNIQUE 不能重复  但是可以为空 这样也不能唯一标识
    UNIQUE NOT NULL 不能为空且唯一  可以唯一标识一条数据  书写顺序无所谓
    UNIQUE NOT NULL 与 主键的区别
        UNIQUE NOT NULL 不能被其他表引用 (不能作为其它表的外键)
        UNIQUE NOT NULL 约束一个表中可以有多个   但是主键只能有一个
    索引:用于加速查询
    InnoDB 中 索引是树形结构
        为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键
        如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段  但是无法提升查询效率
        只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段
        InnoDB阻止数据时 首先使用主键  如果没有主键 找一个非空且唯一  如果也没有 建一个隐藏字段
    多字段联合主键: 不常用
        学生表  stu_id course_id 做为联合主键
        1 1 已有数据
        1 2 可以插入
        2 1 可以插入
        1 1 不能插入
    
  只有当两个字段都重复才算重复
    当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键
    管理主键的值挺麻烦的  你得记录上一次的主键值
    mysql可以帮你自动管理主键  auto_increment 自动增长
    auto_increment 只能用于整型字段 并且该字段必须具备索引
    所以 通常 主键都会加上auto_increment
    手动修改自动增长计数
    alter table 表名 auto_increment  新的值;
    注意:如果新的值小于当前的最大值 是无效的
    通常建一个表就要建一个主键  主键的类型通常是整型
 
    insert 语句
        insert into 表名 values(值1,值n,....)
        要求值得顺序 个数 必须与表字段完全对应
    另一种写法
        insert into 表名(字段名1,字段名n,....) values(值1,值n,....)
        可以选择性得插入某些字段 要求值得顺序 必须与表名后面声明得字段一致
 
 
 
 
存储引擎
    发动机
        汽油机
        柴油机 柴油价格便宜 动力还强  噪音大  不完全燃烧
        电机 加速快  噪音小  续航问题
    一个产品或服务的核心部分称之为引擎
        mysql的核心功能存取数据
        mysql存储引擎就是负责存取数据那一段代码

mysql数据库:数据类型、存储引擎、约束、的更多相关文章

  1. MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析

    文/何登成 导读:   来自网易研究院的MySQL内核技术研究人何登成,把MySQL数据库InnoDB存储引擎的多版本控制(简称:MVCC)实现原理,做了深入的研究与详细的文字图表分析,方便大家理解I ...

  2. MySQL数据库InnoDB存储引擎中的锁机制

    MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能 ...

  3. MySQL数据库InnoDB存储引擎

    MySQL数据库InnoDB存储引擎Log漫游  http://blog.163.com/zihuan_xuan/blog/static/1287942432012366293667/

  4. 查看和改动MySQL数据库表存储引擎

            要做一名合格的程序猿,除了把代码写的美丽外,熟知数据库方面的知识也是不可或缺的.以下总结一下怎样查看和改动MySQL数据库表存储引擎:        1.查看数据库所能支持的存储引擎: ...

  5. MySQL数据库MyISAM存储引擎转为Innodb

    MySQL数据库MyISAM存储引擎转为Innodb  之前公司的数据库存储引擎全部为MyISAM,数据量和访问量都不是很大,所以一直都没什么问题.但是最近出现了MySQL数据表经常被锁的情况,直接导 ...

  6. 百万年薪python之路 -- MySQL数据库之 存储引擎

    MySQL之存储引擎 一. 存储引擎概述 定义: 存储引擎是mysql数据库独有的存储数据.为数据建立索引.更新数据.查询数据等技术的实现方法 ​ 首先声明一点: 存储引擎这个概念只有MySQL才有. ...

  7. mysql数据库各存储引擎比較

    mysql数据库差别于其它数据库的最重要的一个特点是其插件式的表存储引擎,存储引擎是基于表的.而不是数据库 InnoDB存储引擎:        支持事务,其设计目标主要面向在线事务处理(OLTP)的 ...

  8. mysql数据库之 存储引擎、事务、视图、触发器、存储过程、函数、流程控制、数据库备份

    目录 一.存储引擎 1.什么是存储引擎? 2.mysql支持的存储引擎 3. 使用存储引擎 二.事务 三.视图 1.什么是视图 2.为什么要用视图 3.如何用视图 四.触发器 为何要用触发器 创建触发 ...

  9. mysql数据库之存储引擎

    mysql存储引擎概述 什么是存储引擎?                                                               MYSQL中的数据用各不相同的技术 ...

  10. 关于MySql 数据库InnoDB存储引擎介绍

    熟悉MySQL的人,都知道InnoDB存储引擎,如大家所知,Redo Log是innodb的核心事务日志之一,innodb写入Redo Log后就会提交事务,而非写入到Datafile.之后innod ...

随机推荐

  1. 关于Content-Type中application/x-www-form-urlencoded 和 multipart/form-data的区别及用法

    http://blog.csdn.net/soonfly/article/details/52082547 Form的enctype属性表示页面表单数据向服务器传输时的编码方式, 常用有两种:appl ...

  2. socket --自己简单的理解

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  3. Linux中权限控制ACL命令

    很多小伙伴觉得,Linux的权限管理命令不就是chown和chmod命令吗,什么时候有了ACL了? 什么是ACLACL是访问控制列表(Access Control List)的缩写,主要的目的是在提供 ...

  4. D3学习之坐标系绘制

    坐标轴的绘制我们需要搞清楚以下三个要点: 1).axis函数 2)..call()函数用于组合 3).坐标轴的平移旋转 关于第三点其实就是"transform","tra ...

  5. MNFTL: An Efficient Flash Translation Layer for MLC

    1. we propose two approaches, namely, concentrated mapping and postponed reclamation, to effective r ...

  6. js放到head中失效的原因与解决方法

    1.今天写js碰到一个奇怪的问题,写好的js放到body里面执行,但是放到head中没有任何效果,为什么导致这种原因呢? 看失效代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  7. JS 获取当前定位

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Apollo分布式部署总结

    环境 操作系统为centOS7 Apollo服务端为Java版本为1.8 MySQL5.8.x 环境DEV 注意事项 按文档安装config与admin的数据库,并修改相关配置 在修改Apollo P ...

  9. [转帖]开源的监控技术栈除了ELK,还有InfluxData的TICK

    开源的监控技术栈除了ELK,还有InfluxData的TICK   https://cloud.tencent.com/developer/news/357119 来源 | Influxdata 译者 ...

  10. [开源] LaravelPlus - 基于 Laravel 魔改,为方便实际业务使用 - 开发中

    目的 为了减少重复 CURD 和新项目的配置麻烦等问题,(就是为了骗星星:LaravelPlus )如: 现有的 infyomlabs/laravel-generator CODE 生成工具虽然好用, ...