一.存储引擎    引擎 指的是一个系统的核心部分

    引擎有不同分类是为了适应不同的使用场景

    查看mysql支持所有引擎    show engines;

    MRG_MYISAM  是一堆MYISAM表的集合        用于做水平分表,如果一个表中数据量太大 将导致效率降低        水平分表就是把整个大表拆成不同的小表,每一次查询 会判断数据在哪一个表中 然后对应去查找 以此来提高效率        name  age  sex        jerry 40  woman

        name  age  sex        bgon  30   man

        垂直分表        name  age  sex  phone  addr  gf  bf  idcard  number        jerry 40  woman 110    上海  xx  xx   身份证   学号        当一个表中 字段太多  然而常用的信息就那么一两个 那就可以把不常用字段 切到另一个表中 然后建立关联关系

    innodb 是最最常用的引擎 因为支持 事务 行锁 外键一系列功能....

    MyISAM 没有上述一堆功能 但是 存储效率比innodb要高  并且支持分表

    MEMORY 速度快  不能永久存储   没有特别的功能

二.详细建表语句    []表示可选    create table 名称(字段 类型[(宽度) 约束条件],字段 类型,......)

三.mysql数据类型    为什么要给数据分类?        1.不同的数据类型 描述信息可以更加方便准确        2.在计算机中对数据分类可以减少内存开销

    1.数字        整型 默认都是有符号的            tinyint 1个字节  8个二进制 0-255  -128 - 127            smallint 2个字            mediumint 3个字节            int  4个字节            bigint 8个字节        设置为无符号 需要在类型后添加unsigned            create table t8(a tinyint unsigned);

        宽度在整型数据中 不是用来设置可存储的数据范围的        用于控制最先小显示长度(字符数)  如果长度不足 就帮你补0 但是需要指定zerofill        create table t12(a tinyint(5) zerofill);

        结论是: 使用整型数据 宽度这个属性一般不用管它

    浮点        float  4个字节            float(a,b)        double 8个字节            double(a,b)        decimal  不固定            decimal(a,b)        a代表总位数  b表示小数位数        5,3 最大值99.999

        共同点: 小数位最大为30                float与double总长最大为255                都是不精确的  double比float精确点        不同点:            decimal总长最大为65  并且是精确的    2.字符串        char固定长度  和 varchar 可变长度        char(L)  varchar(L)        L 都是表示最大可存储的长度  不是字节        a char(4)  b varchar(4)

        a:S  最终还是占4个字符长度        b:S  最终占1个字符长度 + 标识信息的长度(1-2字节)

        S   S   S        如果有三个数据要存 每个数据都是一个s字符 最终3 * 4 12个字符长度        占用空间较多  存取速度较快        1S1S1S  varchar 存储时必须保存一个长度标识信息 所以所占空间为实际内容长度+标识信息长度        相比较char 空间节省了 但是效率降低了

        char采取的空间换时间 提高效率

        字符串类型的BUG   由于char类型是定长 mysql会在末尾填充空格来达到定长的效果        所以char类型 不能存储末尾带有空格的数据 会直接把空格给去了

        固定长度的字符串类型 不常用        tinytext 1字符        text 2字符        mediumtext 3字符        longtext 4字符

   3.二进制数据类型  单位都是字节        binary  varbinary        binary是固定长度的二进制        varbinary 可变长度的二进制

        长度固定无法修改的二进制        tinyblob        blob        mediumblob        longblob

        强调:        二进制数据类型 一般不用  如果要存储多媒体 如 音频 视频        需要将其放到FTP文件服务器上 然后数据库中只存储连接即可

   4.时间类型        year  4为年份        date  日期  yyyy-MM-DD        time  时间  HH:mm:SS        datetime yyyy-MM-DD HH:mm:SS        timestamp 时间戳 一个浮点类型  从unix元年到现在的秒数

    year 可以是数字 也可以是字符串

    可以用四位字符串  也可以2位字符    或数字    00-69 == 2001-2069    70-99 == 1970 - 1999

    甭管什么时间类型 照着标准格式字符串写 就行

    timestamp 会自动更新时间 当你插入时 或修改时

    current_time  和 now() 所有的时间 日期类型 都可以使用这两个方法来输入当前时间

    所有的日期时间 数据库返回的都是字符串类型

    严格模式        5.7以下的版本 默认是非严格模式的 例如你的类型为tinyint 存储的是128 最终存储的是127        set global sql_mode = "strict_trans_tables" 可以将其设置为严格模式        最好写到配置文件中 永久有效

    enum 提前规定该字段能选的值的范围   多选1    set 提前规定该字段能选的值的范围    区别是 set字段 可以有多个值 用逗号隔开  多选多

    数据库范式        就是指导你该如何设计数据库

    数据类型  整型 int  浮点 float-double decimal  字符串 char varchar  时间-日期  枚举-集合  二进制

    在保证数据足够保存情况下  选用占用空间最小的类型

四.约束    完整的建表语句    create table 名称(字段 类型[(宽度) 约束条件],字段 类型,......)

    约束 是指 给数据的值加上一些限制

    类型就是一种限制  宽度对于整型数据 没有存储限制   其他类型的宽度是有限制作用的

    约束就是除了 数据类型以及宽度之外的其他限制

    unsigned就是约束中第一种 表示你的整数 不能包含符号 仅针对数字类型

    约束 是为了保证数据的完整性    完整性约束

    not null  非空        限制该字段 必须有值        例如账号密码    default   默认值        例如 多数用户都是男的  游戏账号的金币可以默认

    1.建表直接指定    create table t(name char(10) not null default 默认值);    2.后期增加约束    alter table t modify name char(10) not null default  已有的字段    alter table t add sex char(10) not null default 新增字段

    unique  唯一性约束  并且是一个索引        要求该字段的值 不能重复        单字段:        create table olbPerson(name char(20) unique,school char(10));

        多字段联合唯一约束        create table olbPerson(name char(20),school char(10), unique(name,school));        例如:姓名和校区两个字段  如果两个校区有相同的姓名 这时候就可以把这两个字段作为联合唯一索引        这些字段都相同才算是重复

    primary key 主键约束            从约束角度来看  和 非空 + 唯一 是相同的效果            不能为空且不能重复            需要强调的是:                    主键除了有约束的效果 还是一个索引 并且是非常重要的索引                    在该innodb 主键是必不可少的                    innodb 组织数据结构是按照树形结构来组织的,该结构中 必须有一个数据 不能为空且唯一的                    如果没有这样的数据 树形结构也就不存在.

            mysql在创建表的时候 会检测 是否存在主键            如果没有 它就找一个具有非空且唯一约束的字段提升为主键

            如果也没有这样的字段 mysql就创建一个隐藏字段作为主键

            索引 可以提高查询速度

    结论是: 只要你是用innodb引擎 你就应该建表时设置一个主键 通常主键字段叫做id        id 有唯一标识的意思    索引 就像是 字典里目录  用于快速定位数据所在位置

    自动增长    主键在使用中 需要我们自己来维护 其正确性  你需要知道上一次写的是什么 然后找一个之前没用过的主键    mysql 提高了自动增长约束  可以帮你自动管理主键的值    要求必须是整型,每次插入数据都会自动+1  程序中就不要再自己管理主键了

    语法:    create table table_name(id int primary key auto_increment,name char(10));

    # 插入带有自动增长的字段时  可以直接忽略该字段 也可以插入一个null    insert into table_name values(null,"jack");    insert into table_name(name) values("jack");

    只要你创建一个表 就应该有主键 并且自动增长.    foreign key 外键约束

mysql进阶知识的更多相关文章

  1. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  2. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  3. Mysql存储过程知识,案例--mysql存储过程基本函数

    Mysql存储过程知识,案例: create procedure delete_setting(in p_settingid integer) begin delete from setting wh ...

  4. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  5. mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法   MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...

  6. mysql进阶(二十七)数据库索引原理

    mysql进阶(二十七)数据库索引原理 前言   本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb.   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础.    ...

  7. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  8. mysql进阶(十六)常见问题汇总

    mysql进阶(十六)常见问题汇总 MySQL视图学习: http://www.itokit.com/2011/0908/67848.html 执行删除操作时,出现如下错误提示: 出现以上问题的原因是 ...

  9. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

随机推荐

  1. css-css权威指南学习笔记7

    第11章 表布局 1.border-spacing,单元格边框间距,可以有两个或一个值,两个值前者表示水平间距,后者垂直间距. 2.border-collapse值为collapse时不可设置padd ...

  2. 配置文件的生成,关于“make menuconfig”

    之前学习嵌入式的时候从来没有注意过内核源文件下配置文件的生成(都是跟着老师的步骤直接复制过来修改成.config),其实意思也差不多,只是我没有细想其所以然: 编译内核的过程中,配置文件生成过程,A. ...

  3. android开发中监控android软件网络请求的软件Charles使用入门

    1.下载并安状软件,官网在此: http://www.charlesproxy.com/ 2.前题条件,电脑和手机必须在同一网段 3.在Charles界面选择菜单 proxy->proxy se ...

  4. MySQL之MySQL5.7中文乱码

    自己的MySQL服务器不能添加中文,于是自己使用 show variables like 'character%'; 查看了当前的编码格式 我又通过以下方法将其设置为utf-8 SETcharacte ...

  5. luogu[2093]零件分组

    题目描述 某工厂生产一批棍状零件,每个零件都有一定的长度(Li)和重量(Wi).现在为了加工需要,要将它们分成若干组,使每一组的零件都能排成一个长度和重量都不下降(若i<j,则Li<=Lj ...

  6. Altium Designer 15 --- PCB 3D View

    press 3 key to swith to 3D view, and press shift key and dont' loose your grip, hold the right mouse ...

  7. [iOS-UI]点击清空按钮,却会有提交的感觉

    一,问题分析 1.感觉像是点击清空按钮时调用了添加按钮的事件. 2.插入断电后,还真是这样. 3.仔细想想,才发现,原来是我复制了添加按钮,变成为添加按钮,进而点击清空时,不仅清空了所有内容,还把最新 ...

  8. C#制作艺术字

    相信 Word  中的 艺术字 功能大家都不陌生, 前面这个 "Word" 单词就是它所为. 今天, 我们就利用C#来制作几款自己的艺术字, 可能会对我们了解字体图像的制作原理有一 ...

  9. 极客编程必备的五大PHP开发应用

    有了PHP应用可以帮助编码爱好者事半功倍,提升项目质量:有了这些最新的且灵活的PHP应用使创建编码项目更加简单.便捷.本文,我们收集了五大最新的PHP开发应用. PHP应用在网络上并不多见.最重要的是 ...

  10. XML的SelectNodes使用方法以及XPath

    XPath 是 XML 的内容,这里 SelectNodes 是 C# 中 XmlDocument 或 XmlNode 的一个方法.SelectNodes 使用 XPath 来选取节点. 重要语法 S ...