• MySQL日常笔记第二讲


    今日内容概要
    存储引擎
    MySQL的数据类型
    约束条件
    今日内容详细
    存储引擎
    """
    针对不同的数据可以有不同的存储方式
    存储引擎就相当于针对数据采用不同的存储方式
    """
    查看mysql内部所有的存储引擎
    show engines;

    需要了解的
    MyISAM 是mysql5.5版本之前默认的存储引擎
    优点:存取数据速度较于innoDB更快
    缺点:数据安全性不高
    blackhole 黑洞(往里面写什么都会自动消失)
    memory 内存(数据会全部存在内存中 断电全部丢失)
    innoDB mysql5.5版本之后默认使用的存储引擎
    优点:管理数据更加的安全、更加丰富的功能

    create table t1(id int)engine=innodb;
    create table t2(id int)engine=myisam;
    create table t3(id int)engine=blackhole;
    create table t4(id int)engine=memory;

    insert into t1 values(1);
    insert into t2 values(1);
    insert into t3 values(1);
    insert into t4 values(1);

    创建表的完整语法
    create table 表名(
    字段名1 字段类型[(宽度)约束条件],
    字段名2 字段类型[(宽度)约束条件],
    字段名3 字段类型[(宽度)约束条件],
    ...

    1.[]包裹的都是可选参数(可写可不写,即不是必须的)
    2.字段名和字段类型则是必须要写的
    3.最后一个字段语句后不能有逗号
    4.约束条件可以有多个 彼此之间空格隔开即可
    create table t1(
    id int,
    name char,
    password int #千万千万不要加逗号
    );
    字段类型
    整型
    tinyint 1个字节 可能包含正负数 也可以只是正数
    smallint 2个字节 可能包含正负数 也可以只是正数
    int 4个字节 可能包含正负数 也可以只是正数
    bigint 8个字节 可能包含正负数 也可以只是正数

    正负号需要一个比特位

    """
    补充知识点
    1个字节=8个比特位
    (每一个比特位只能是数字0或者1)
    00000000
    10000000
    11000000
    """
    create table t2(id tintyint);
    """
    默认是带正负号的
    如果插入的数据超出了范围
    1.5.6版本不会报错
    会按照该字段最大限度存储
    2.5.6版本之后由于严格模式的存在
    会直接报错不让你插入数据
    """

    如果你不想有正负号 你需要自己制定

    create table t4(id int unsigned);

    宽度唯独在整型部分表示的不是限制长度*******
    了解即可
    create table t5(x int(8) unsigned zerofill);
    insert into t5 values(4294967296123);
    insert into t5 values(66);

    mysql> select * from t5;
    +------------+
    | x |
    +------------+
    | 4294967295 |
    | 00000066 |
    +------------+
    2 rows in set (0.00 sec)
    """
    针对整型括号里面的数字不是用来显示存储长度的
    而是用来限制展示长度的
    够位数正常显示
    不够用0填充(空格填充)
    """
    在定义整型字段的时候你不要考虑括号里面的数字**
    create table t1(id int);
    create table t1(id tinyint);
    create table t1(id smallint);
    create table t1(id bigint);
    针对整型不要自己写宽度
    严格模式
    show variables like '%mode%';
    +----------------------------+------------------------+
    | Variable_name | Value |
    +----------------------------+------------------------+
    | binlogging_impossible_mode | IGNORE_ERROR |
    | block_encryption_mode | aes-128-ecb |
    | gtid_mode | OFF |
    | innodb_autoinc_lock_mode | 1 |
    | innodb_strict_mode | OFF |
    | pseudo_slave_mode | OFF |
    | slave_exec_mode | STRICT |
    | sql_mode | NO_ENGINE_SUBSTITUTION |
    +----------------------------+------------------------+
    sql_mode严格模式

    """
    能尽量少让数据库干活就尽量少干活
    不在操作数据库的时候数据库只应该做存取数据的活
    其他所有的活都不应该干
    比如帮你修改数据长度
    先计算当前数据类型最大能够存储的数据
    之后按照最大的存储
    在存储数据的时候,如果数据不合法数据库层面应该直接报错,而不是自己处理
    """
    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

    针对精确度的问题,有时候数字类型都会有点偏差
    有时候我们会将看似应该用数字存储的数据用字符串存储
    """
    字符类型
    在mysql中字符类型只有两类
    1.char 定长(长度是固定的)
    2.varchar 不定长(长度是可变的)

    charI(4)#只能存四个字符,多了直接报错少了默认用空格补全
    varchar(4)#只能存四个字符,多了直接报错少了有几个就存几个
    """
    针对char不够位数用空格填充,但是你在将数据取出来的时候会自动帮你将之前的空格再异常掉

    char_length 统计字符串长度
    如果你想取消自动填充自动移除的功能 需要修改严格模式
    """
    set global
    sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
    一定要退出当前客户端再加入
    """
    char与varchar的使用区别
    """
    char
    优点:存取数据的速度都很快(暴力 存取都是按照固定的长度)
    缺点:浪费存储空间
    varchar
    优点:节省存储空间
    缺点:存取速度较于char慢
    """
    jason eva egon wusir
    char(5)
    jasoneva egon wusir

    varchar(5)
    1bytes+jason1bytes+eva1bytes+egon1bytes+wusir

    先取1bytes里面包含了Jason数据的长度5 然后我就读5位
    之后再读1bytes里面包含了eva数据的长度3 然后我就读3位
    """
    后面我们在使用的时候用char还是用varchar
    以前基本上用的都是char
    现在varchar用的更加普遍

    一般情况下用varchar具体可以根据业务情况而定
    日期类型
    分类
    -date:2019-05-01 年月日
    -time:11:11:11 时分秒
    -datetime:2019-01-02 11:11:11 年月日时分秒
    -Year:2019 年
    create table student(
    id int,
    name char(16)
    born_year year,
    birth date,
    study_time time,
    reg_time datertime
    );
    insert into student values(1,'jason','2019','2019-05')
    枚举与集合

    枚举 单选

    create table user(
    id int,
    name char(16),
    gender enum('male','female','others')
    );

    在插入数据的时候针对enum字段 只能插入括号内列举的

    集合 多选

    create table teacher(
    id int
    name char(16),
    hobby set('read','sleep','sanna','abj')
    );
    约束条件

    约束条件其实就是对字段额外的限制

    not null 该字段不能为空
    create table t17(id int,name varchar(4)not null);
    insert into t17 values(1,null);#报错 不能插入null

    """在往表中插入数据的时候可以指定字段插入"""
    insert into t17(id)values(666);#报错 name字段必须给支

    2.default 默认值
    """
    你不给值就用默认的,如果你给了就用你给的
    """
    3.unique 唯一
    """
    该字段在整个表中都不能有重复的数据出现
    """

    联合唯一

    单个字段可以出现重复,但是多个字段联合起来的结果必须是唯一的
    约束条件之primary key
    primary key 主键
    """
    在限制层面上的效果等价于
    not null+nnique
    但是它除了上述效果之外还有特定的功能
    类似于书的目录,能够加快数据的查询速度
    """
    create table t20(id int primary key);


    1.在innoDB存储引擎中规定所有的表都必须有且只有一个主键

    2.如果你没有指定的话,那么InnoDB会自己用一个隐藏字段作为主键

    以后我们正儿八经的创建表的时候就需要加上主键

    并且我们通常都是将表的ID字段作为主键


    create table t22(id int primary key auto_increment,name varchar(16));

    结论

    以后主键都是固定写法
    in int primary key auto_increment
    扩展
    1.一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段
    自动将其设置为主键
    2.联合主键 使用较少
    多个字段组合到一起形成一个主键,其本质其实还是一个主键
    HTML 5196 字节 465 单词 276 行

    为了舒适的结果,眼前的坎坷路程即使再长都是值得的。
  • 相关阅读:
    python信息收集(二)
    python信息收集(一)
    'utf-8' codec can't decode byte 0xd3 in position 0: invalid continuation byte
    Loadruner 之 controller 负载生成器与场景运行——性能测试
    chromedriver 在pycharm 中的使用
    selenium 安装
    在Linux 中搭建 Mysql
    前端攻略
    2020-5-22 第二期——拖延症
    2020-5-15 第一期
  • 原文地址:https://www.cnblogs.com/abudrSatan1998/p/13394083.html
Copyright © 2020-2023  润新知