zoukankan      html  css  js  c++  java
  • 数据库2

    存储引擎:

    innodb: 现在数据库使用的默认引擎     与myisam相比,速度较慢,但是数据安全性更高(数据安全体现在行锁, 事务方面)

      使用innodb创建表时,在库下默认创建两个文件,分别是frm和idb, frm表示存储表结构的文件, idb表示存储数据的文件

    myisam: 老版本数据库使用的存储引擎

      使用myisam创建表时,在库下默认创建三个文件, 分别是frm  MYD  MYI , frm表示存储表结构的文件, MYD表示存储数据的文件, MYI表示索引文件

    blackhole: 黑洞,不管存储什么数据直接丢失

      使用blackhole创建表时,在库下默认创建一个文件, frm , frm表示存储表结构的文件

    memory: 内存引擎,临时存储在内存,服务重启数据丢失

      使用memory创建表时,在库下默认创建一个文件, frm, frm表示存储表结构的文件

    如何查询数据库中有哪些的引擎呢?   show engines;

    创建表的完整性约束:

    create  table  表名(
        字段名1  类型[(宽度) 约束条件],
        字段名2  类型[(宽度) 约束条件],
        字段名3  类型[(宽度) 约束条件]
        );

    注意:

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

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

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

    宽度:

      对存储数据的限制

      char(1) 只能存储一个字符,如果要存储的字符数超过了char中的限制个数,则mysql会自动截取,mac和mysql5.7及以上版本会报错,因为启用了mysql的严格模式

    如何不让用户在字段中插入NULL呢?  如果之前有NULL字段,使用完下面的SQL语句会自动把之前的NULL清空

      

    alter  table  表名  modify  字段名  char  not  noll

    类型和中括号内的约束:

      类型约束的是数据的存储类型, 而约束是基于类型之上的额外限制

    整形类型:

    更改成无符号

    关键字:unsigned

    alter  table  表名  modify  id  TINYINT unsigned;

    char(8)  : char括号中的数字用来限制储存数据的长度

    int(8)  : int括号中的数字用来控制展示的数据的位数, 如果添加的数据不够8位, 则默认使用空格填充到8位, 如果超过8位, 则添加什么数据就显示什么数据.    如何把使用空格填充的改成使用数字0填充呢

    关键字: zerofill

    create  table  表名  values(id int(8)  zerofill);

    强调:

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

    严格模式:

    为什么要使用严格模式呢?

      因为在使用char字段类型的时候, 默认为1个字符, 如果插入多个字符, mysql则会自动截取第一个字符直接保存到表中, 但是这时的数据是不正确的,我们使用严格模式就是为了在插入错误的数据时, 让数据库给出报错信息, 可减轻数据库的压力,是一个可以优化数据库的点

    如何查看严格模式?

    show  variables  like  "%mode%";

    模糊匹配

      关键字: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) : 总共60位,小数部分占30位

     创建浮点型类型的字段:

    create  table  表名  (id  FLOAT(255, 30));
    create  table  表名  (id  DOUBLE(255, 30));
    create  table  表名  (id  DECIMAL(65, 30));

    三者之间的区分就是精确度的问题:

    插入数据可查看具体精确度

    FLOAT < DOUBLE < DECIMAL

    字符类型:

      char(4) : 最大只能存四个字符, 超出的话会报错, 如果少了, 自动使用空格填充

      varchar(4) : 最大只能存四个字符, 超出的话会报错, 如果少了,有几个字符就存几个字符

      

    create  table  表名  (name  char(4))
    create  table  表名  (name  varchar(4))

      mysql在存储char类型字段的时候, 硬盘上确确实实存在的是固定长度的数据, 但是在取出来的那一瞬间, mysql会自动将填充的空格去除,那么如何将取出时数据的长度和存入时数据的长度保持一致呢?可以通过修改严格模式, 来不让mysql去做处理, 要写上之前的严格模式

    set  global  sql_mode = "strict_trans_tables, PAD_CHAR_TO_FULL_LENGTH"

    注意: 需要退出客户端, 重新登陆, 严格模式才能生效

    如何查看长度?

    select  char_length(name)  from  表名

    char和varchar的区别

      char定长:

        1.浪费空间

        2.存取速度快

      varchar变长:

        1.节省空间

        2.存取速度快(较于char)

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

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

    枚举与集合:

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

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

    约束条件:

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

    create  table 表名(id int, name char(16) default 'zhangsan'); 

    插入数据

    insert into  表名(name, id) vlaues('lisi', 2);

    unique : 单列唯一,一般在id标识时使用,id具有唯一性

    create table 表名(
        id int unique,
        name char(16)
        )

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

    create  table  表名(
        id int,
        ip char(16),
        port int,
        unique(ip, port)
        )

    primary key : 主键  (限制效果跟not null + unique 组合效果一致, 非空且唯一)

    create  table  表名(id  int  primary key)

    primary key 也是innodb引擎查询必备的索引, innodb引擎在创建表的时候,必须要有一个主键

    当你没有指定主键的时候

      1.会将非空且唯一的字段自动升级成主键

      2.当你的表中没有任何的约束条件, innodb会采用自己的内部默认的一个主键字段,该主键字段你在查询时是无法使用的,查询数据的速度就会很慢

    联合主键 : 多个字段联合起来作为标的一个主键, 本质还是一个主键

    innodb引擎中一张表有且只有一张主键

    create  table  表名(
        ip char(16),
        port int,
        primary key(ip, port)
        );

    主键字段应该具备自动递增的特点,每次添加数据,不需要用户手动输入

    auto_increment  自动递增

    create  table  表名(id int primary key auto_increment, name varchar(16))

    delete from 仅仅是删除数据,不会重置主键

    truncate  表名  (初始化表,会重置主键)

  • 相关阅读:
    C++ istringstream总结
    C++各数据类型的最值
    AcWing 机器人跳跃问题 二分
    蓝桥杯 矩形面积交
    蓝桥杯 完美的代价
    蓝桥杯 数的读法
    国内 镜像 下载
    redis的pipline使用
    MySQL额外操作
    sql强化演练( goods 表练习)
  • 原文地址:https://www.cnblogs.com/chengzige/p/11379974.html
Copyright © 2011-2022 走看看