首页 > 其他 > 详细

总结三十一

时间:2019-08-20 22:26:39      阅读:96      评论:0      收藏:0      [点我收藏+]

存储引擎

  不同的数据应该有不同的处理机制

  MySQL存储引擎

    Innodb

      5.1版本之后默认的存储引擎,查询速度较myisam慢,但是更安全

      建表的时候innodb会产生两个文件

        一个是表结构文件

        一个是存储数据文件

    myisam

      5.1版本之前的MySQL的默认存储引擎

      查询速度较于innodb要快

      建表的时候会产生三个文件

        一个是表结构文件

        一个是索引文件

          索引你先把它理解成是书的目录,能够帮你更快的查询数据

        一个是存储数据文件

    memory

      内存引擎(数据全部存在内存中)

      建表的时候只有一个表结构文件

    blackhole

      任何写入的数据都会消失

      建表的时候只有一个表结构文件

 

创建表的完整语法

  create table 表名(

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

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

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

)

注意:

  1.同一张表内字段名不能重复

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

  3.最后一个字段语句后不能有逗号

宽度

  使用数据库的准则:能尽量让它少干活就尽量少干活

  对存储数据的限制

  char(1)   只能存一个字符

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

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

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

  alter table test modify name char not null;

  not null该字段不能插空

 

字段类型和约束条件

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

  约束条件是基于字段类型之上的额外约束

字段类型

  整型

    smallint    tinyint   int   bigint

    默认都是带正负号

      tinyint   1bytes

      int    4bytes

    int(8):数字不够8位,默认用空格填充,够8位或者8位以上,有多少位显示多少位,但是不能超出int最大范围

    注意:只有整型比较特殊,括号内的数字不是用来限制存储宽度,而是用来限制显示宽度

    在定义整型字段的时候不需要指定宽度,默认就是展示最大宽度

    tinyint

      默认是否有符号  默认是带有符号的(-128,127)

      超出限制会如何  超出之后只会存在最大值或者最小值

    zerofill    用0填充不足的位数

    not null  不能为空

    unsigned    无正负符号

  模糊匹配

    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位

    精确度:float < double < decimal

    通常情况下会将数字在数据库存储上编程字符串来方便存储,不需要考虑精确度带来的问题

  字符类型

    char(4)       定长:最大存储四个字符,超出报错,不足默认用空格占位

    varchar(4)  变长:最大存储四个字符,超出报错,不足有几个存几个

    char vs varchar

      char(django中如果你想用char需要你自己定义)

        存取速度快

        浪费硬盘空间

      varchar(django默认只有varchar类型)

        存取速度慢(相对于char慢一点)

          存的时候,需要给数据加一个记录长度的报头

          取的时候,需要先读取报头才能读取真是数据

        节省硬盘空间

  日期类型

    date

    datetime

    year

    time

  枚举和集合类型

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

      多选一(男女性别...)

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

      多选多但是也可以多选一(爱好...)

    如果写的信息不在选择范围内会直接报错

约束条件

  not null  非空

  default  默认值

    gender enum(‘male‘,‘female‘,‘others‘) default ‘male‘

  unique  唯一:不能出现重复

    单例唯一:在同一张表中某个字段的信息不能重复

      id int unique

    联合唯一(在语句的最后,用括号的形式,表示哪几个字段组合的结果是唯一的)

      ip

      port

      create table server(

          id int,

          ip char(16),

          port int,

          unique(ip,port)

        );

  primary key   主键

    限制效果跟 not null + unique  组合效果一致(非空且唯一)

    create table test(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    初始化表,会重置主键

 

总结三十一

原文:https://www.cnblogs.com/TZZ1995/p/11385243.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!