zoukankan      html  css  js  c++  java
  • day 37 表详细操作(数据类型,约束条件)

    一、创建表的完整语法

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

    解释:
    类型:使用限制字段必须以什么样的数据类型传值
    约束条件:约束条件是在类型之外添加一种额外的限制

    注意:
    1、在同一张表中,字段名是不能相同
    2、宽度和约束条件可选,字段名和类型是必须的
    3、最后一个字段后不加逗号

    二 基本数据类型之整形
    1、作用:id号,各种号码,年龄等级
    2、分类:
    tinyint()
    int()
    bigint()

    3、测试:默认整形都是有符号的

     

    对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据
    显示时,不够8位用0填充,如果超出8位则正常显示

    create table t1(x int(8),unsigned zerofill)

    SQL mode

    show variables like "%mode%"; 查看SQL模式
    no_engine_substitution 非严格模式
    set global sql_mode="strict_trans_tables";改严格模式(session当前链接)

    浮点型

    作用:存储身高、体重、薪资

    分类:

    float()

    double()

    decimal

    测试:

    相同点

    1、对于三者来说,都能存放30位小数,

    不同点

    1、精度的排序从低到高:float,double,decimal

    2、float 与 double 类型能存放的整数位比decimal更多

    create table t9(x float(255,30));
    create table t10(x double(255,30));
    create table t11(x decimal(65,30));

    insert into t9 values(1.111111111111111111111111111111);
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);


    mysql> select * from t9;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111164093017600000000000000 |
    +----------------------------------+
    1 row in set (0.00 sec)

    mysql> select * from t10;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111111111111200000000000000 |
    +----------------------------------+
    1 row in set (0.00 sec)

    mysql> select * from t11;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111111111111111111111111111 |
    +----------------------------------+
    1 row in set (0.00 sec)

    字符类型

    1、作用:姓名,地址,描述类的信息
    2、分类:
    char 定长
    varchar 变长
    3、测试:字符的宽度限制单位是字符个数
    create table t12(x,char(4));#超出4个字符则报错,不够4个字符则用空格补全4个字符
    create talbe t13(y varchar(4));#超出4个字符则报错,不够4个字符那么字符有几个就存几个

    改模式:
    set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
    select char_length(x) from t12;
    select char_length(y) from t13;
    针对char类型,mysql 在存储时会将数据用空格补全存放在硬盘中
    但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用
    select * from t14 where name='lxx':name字段明确地等于一个值,该值后填充空格是没用
    select * from t14 where name like 'lxx';#name字段模糊匹配一个值,该值后填充空格是有用的

    对比char 与varchar
    name char(5)
    缺点:浪费空间
    优点:存取速度都快


    name varchar(5)
    缺点:存取速度都慢
    优点:节省空间

     



    日期类型
    1、作用:时间相关
    2、分类:
    date: 1986-11-06
    time:11:11:11
    datetime: 1986-11-06 11:11:11
    year:1999

    枚举与集合
    枚举enum,多选一
    集合set ,多选多

    约束条件
    not null +defult

    不能为空与默认值连用
    create table t15(
      id int,
      name char(16) not null,
      sex enum('male','female','other') not null default "male"
    );

    unique:限制字段值唯一
    单列唯一
    create table t16(
      id int unique,
      name char(16)
    );

    联合唯一
    create table server(
      id int unique,
      ip char(15),
      port int,
      unique(ip,port));

    primary key :单单从约束角度去看,primary key 就等同于not null unique
    强调:
    1、一张表中必须有,并且只能有一个主键
    查找顺序从上到下找到一个不为空且唯一的字段,如果没有就把一个隐藏的7个bytes的字段当主键
    2、一张表中都应该有一个id字段,而且应该把id字段做成主键
    联合主键
    primary(ip,port)

    auto_increment 注意点:
    1、通常与primary key 联用,而且通常是给id字段加
    2、auto_incremnt 只能给被定义成key(unique key,primary key)的字段加

  • 相关阅读:
    MySQL的双主配置
    MySQL主从复制配置部署
    Linux centOS安装MySQL
    hive搜索报错
    常用设计模式
    Cookie禁用 获取session
    排序算法
    MySQL优化
    javascript Map和Set
    ThinkPHP的基本操作
  • 原文地址:https://www.cnblogs.com/lg04551/p/9008080.html
Copyright © 2011-2022 走看看