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


    1.详细的建表语句
    create table 表名(
    字段名 数据类型[(长度) 约束v条件]
    );
    []代表可选的
    为什么需要给数据分类?
    1.描述数据更加准确
    2.节省内存空间





    2.数据类型
    整数类型
    默认有符号的
    设置为无符号的
    create table t2(age tinyint unsigned)
    建表后用alter修改

    注意:对于整数类型而言,长度不是数据所占的字节数 是显示数据时的宽度(字符数)
    默认情况下 存储的数值的十进制位数 小于索设置的显示宽度时 不会填充 是没有任何显示效果的
    加上zerofill 指定 当存储的数值的十进制的位数小于所设置的宽度时 用0来填充

    tinyint
    smallint
    mefiumint
    int *****
    bigint
    总结:除了存储范围没有什么区别
    都是整型,默认有符号 对于显示宽度原理是相同的
    长度参数如果不指定 会有默认值

    该参数如果不指定,会有默认值

    严格模式:
    什么是严格模式? 对于插入的数据严格要求 不在范围内直接报错 丽日往tinyint中插入大于255的值将报错
    什么是非严格模式? 对于插入的数据不进行严格要求 不在范围内也可以保存 保存当前类型最大支持的值
    5.6默认是非严格模式
    5.7默认是严格模式

    查看SQL模式
    select @@sql_mode;
    show varisbles like "sql_mode";
    修改 SQL模式
    set k@@sql_mode = "值";
    正常情况下不需要修改






    浮点类型:
    float 4字节
    double 8字节
    decimal 不固定

    create table t9 (num float(m,d))
    m表示总长度 d表示小数部分的长度
    长度表示的不是数据 存储的范围 而是字符长度
    10.12总长度为4 小数部分为2

    以下浮点类型载长度相同的情况下精度不同(各个类型的最大长度)
    float(255,30)整数部分为255-30
    double (255,30)整数部分为255-30
    decimal (65,30)整数部分为65-30

    区别:float与double的精度不同 都是不精准的小数
    decimal 准确的小数 不会丢失精度
    具体使用哪种类型需要根据使用场景来进行判断
    举例:
    float 满足大部分的使用场景
    decimal 则适合银行系统 科学系统场景
    括号中的m和d的值 可以限制数据的存储范围 于整数不同
    注意:记住m和d的含义





    字符串类型:
    常用两种
    char 定常字符串
    char
    varchar 可变长度字符串
    注意字符串中 长度指定的是数据的字符长度 与字节没有关系

    create table t13(c1 char,c2 varchar(10));
    在创建时,可变长的varchar必须指定长度 char有默认值

    char(10):不满足的时候用空格占位 固定长度就是10,不关心真实数据长度
    缺点:无论数据由多长 占用空间是固定的 造成了一定的空间浪费
    a char(10) b char(10)
    A B
    A |B |
    varchar(10):在数据前有一个字节会保存字节长度,长度是根据字节长度来的
    关心真实数据的长度 先存长度需要一个字节 再存真实数据 减少造成空间浪费
    缺点:由于需要先计算数据长度 所以存储的速度比定常慢
    a varchar(10) b varchar(10)
    (1)A(2)B

    相同点:
    括号中的数字 都是表示存储最大字节长度

    char使用的频率会更高一点





    mysql内部会再存储数据时自动将数据末尾的空格去掉
    如果必须要存空格 需要修改sql_mode 增加PAD_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 自动输入当前时间 当这条记录别修改了会自动更新当前时间

    DATE类型用于表示日期值,不包括时间,在mysql中,可以使用以下三种格式指定DATE类型
    1.以'yyyy-mm-dd'或者'yyyymmdd'字符格式表示
    例如:'1008-01-01'或者'20080101',存入的日期都是:2008-01-01.
    2.以'yy-mm-dd'或者'yymmdd'字符格式表示。yy取值范围'00-'99','00'-'69'会转为2000-2069,'70'-'99'会转换为1970-1999;
    例如:'08-1-1'或者'080101',存入的日期都是:2008-1-1.
    3.使用CURRENT_TIME或NOW()输入系统当前日期。




    枚举:
    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 约束一个表中可以有多个 但是主键只能有一个

    当一个表中 由于业务需求没有一个非空且唯一的字段时 我们可以建一个新的字段专门作为主键
    管理主键的值挺麻烦的 需要记录上一次的主键值
    为了提高工作效率 mysql可以帮你自动管理主键 auto_increment 自动增长
    auto_increment 只能用于整型的字段 并且该字段必须具备索引
    所以 通常主键都会加上auto_increment

    手动修改自动增长计数
    alter table 表名 auto_increment 新的值;
    注意:如果新的值小于当前最大值,则无效

    通常建立一个表就需要建立一个主键 主键的类型通常是整型





    insert 语句插入语句:
    insert into 表名 values(值1,值n,...)要求值的孙旭 个数 必须要与表字段完全对应
    insert 语句的另一种写法:
    insert into 表名(字段名1,字段名n,...)values (值1,值n,...)
    可以选择性的插入某些字段 要求值的顺序 必须与表明后面声明的字段一致




    索引:用于加速查询
    InnoDB 中 索引是树形结构
    为了提高查询效率 InnoDB为找一个不为空且唯一的字段作为主键
    如果表中不存在这样的字段 会自动帮你建一个隐藏字段 但是无法提升查询效率

    只要是使用InnoDB 就应该为每个表指定一个非空且唯一的字段
    InnoDB组织数据时 首先使用主键 如果没有主键 找到一个非空且唯一的 如果也没有 建一个隐藏字段


    多字段联合主键:
    学生表 stu_id course_id 作为联合主键
    1 1 已有数据
    1 2 可以插入
    2 1 可以插入
    1 1 不可以插入

    只有当两个字段都是重复才算重复

  • 相关阅读:
    python-pytest使用
    PyCharm2021使用教程 --- 11、PyCharm必备插件
    PyCharm2021使用教程 --- 10、PyCharm中实用小技巧
    PyCharm2021使用教程 ---9、PyCharm中的搜索技巧(文件/函数/内容)
    PyCharm2021使用教程 --- 8、版本控制
    PyCharm2021使用教程 --- 7、如何使用DeBug调试程序
    PyCharm2021使用教程 --- 6、如何运行程序
    PyCharm2021使用教程 --- 5、PyCharm的基本配置
    PyCharm2021使用教程 --- 4、菜单栏详细介绍
    PyCharm2021使用教程 --- 3、使用pycharm创建项目
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9989711.html
Copyright © 2011-2022 走看看