zoukankan      html  css  js  c++  java
  • Python(数据库之数据类型)

    一、创建表的完整语法
    #[]内的可有可无,即创建表时字段名和类型是必须填写的,宽度与约束条件是可选择填写的。
    create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );
    
    #解释:
    类型:使用限制字段必须以什么样的数据类型传值
    约束条件:约束条件是在类型之外添加一种额外的限制
    
    # 注意:
    a、在同一张表中,字段名是不能相同
    b、宽度和约束条件可选,字段名和类型是必须的
    c、最后一个字段后不加逗号
    
    二、基本数据类型之整型
    1、作用:id号,各种号码,年龄,等级
    
    2、分类:
    tinyint(**): 1个字节,有符号可表示(-128,127),无符号可表示(0,255)
    int (*****): int为最常用类型;4个字节
    bigint(***): 8个字节
    
    3、默认整型都是有符号的
    create table t1(x tinyint);
    insert into t1 values(128),(-129);  #在非严格模式下,超出范围不报错,存成127和-128
    
    create table t2(x tinyint unsigned);
    insert into t2 values(-1),(256);    #在非严格模式下,超出范围不报错,存成0和255
    
    create table t3(x int unsigned);
    insert into t3 values(4294967296);  #在非严格模式下,超出范围不报错,存成4294967295
    
    create table t4(x int(12) unsigned);
    insert into t4 values(4294967296123);  #对于整型来说宽度不是存储限制,这里的宽度是显示宽度。
    
    4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制。所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据。
            对于其他类型,宽度为存储限制。
    create table t5(x int(8) unsigned zerofill);      # 显示时,不够8位用0填充,如果超出8位则正常显示; zerofill只能用于数字模式(如int)
    insert into t5 values(4294967296123);        # 在严格模式下,报错
    insert into t5 values(1);                    # 00000001
    
    三、补充sql_mode
    a、查看sql_mode
    mysql> show variables like "%sql_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                   | STRICT_TRANS_TABLES |
    +----------------------------+---------------------+
    8 rows in set (0.00 sec)
    
    b、修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
    mysql> set global sql_mode="strict_trans_tables";  #global为全局,session为当前
    
    四、浮点型
    1、作用:存储身高、体重、薪资
    
    2、分类:
    float (*****):最为常用 FLOAT(M,D) M:数字个数 max 255, D:小数位个数 max 30
    double (**):DOUBLE(M,D) M:数字个数 max 255, D:小数位个数 max 30
    decimal (**):DECIMAL(M,D) M:数字个数 max 65, D:小数位个数 max 30 (即整数位个数 max 353、相同点
    a、对于三者来说,都能存放30位小数,
    
    4、不同点:
    a、精度的排序从低到高:float,double,decimal
    b、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);  # 1.111111164093017600000000000000 
    insert into t10 values(1.111111111111111111111111111111); # 1.111111111111111200000000000000 
    insert into t11 values(1.111111111111111111111111111111); # 1.111111111111111111111111111111
    
    五、字符类型
    1、作用:姓名,地址,描述类的信息
    
    2、分类:
    char: 定长
    varchar: 变长
    #推荐使用char;不推荐混用,如果混用需定长在前、变长在后。
    
    3、字符的宽度限制单位是字符个数
    create table t12(x char(4));  # 超出4个字符则报错,不够4个字符则用空格补全成4个字符
    create table t13(y varchar(4)); # 超出4个字符则报错,不够4个字符那么字符有几个就存几个
    
    insert into t12 values('hello'); #报错
    insert into t13 values('hello'); #报错
    
    insert into t12 values('a'); #'a    '
    insert into t13 values('a'); #'a'
    
    select char_length(x) from t12; #1  #在mysql中进行了处理,即使硬盘中已存入'a    ',在此查看仍是1个字符,需要做以下设置方可还原真实效果
    select char_length(y) from t13; #1
    set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";  #在屏蔽mysql中的处理,还原真实效果
    select char_length(x) from t12; #4
    select char_length(y) from t13; #1
    
    4、针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用。
    mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用; 即能搜索到
    mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的: 即搜索不到,需搜索"lxx__", 或"lxx  ",或"lxx%"
    
    5、模糊匹配 like (以下非正则)
    %: 任意长度的任意字符
    _: 任意一个字符
    
    6、对比char与varchar
    name char(5)
    # 缺点:浪费空间
    # 优点:存取速度都快
    egon alex lxx  wxx  yx
    
    name varchar(5)
    # 缺点:存取速度都慢
    # 优点:节省空间(it depends); 需要一个头(1-2个字节)存长度 # 2bytes可存65535个字符,mysql中所有字符串(char)中字符数皆不超过65535
    (1bytes+egon)(1bytes+alex)(1bytes+lxx)
    
    6、日期类型
    1、作用:时间相关
    
    2、分类:
    date:1999-01-27
    time: 11:11:11
    datetime:1999-01-27 11:11:11
    year:1999
    
    3、
    create table student(
        id int,
        name char(16),
        born_year year,
        birth date,
        class_time time,
        reg_time datetime
    );
    
    insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');
    
    七、枚举与分类
    1、作用与分类:
    枚举enum,多选一个
    集合set,多选多
    
    2、
    create table teacher(
        id int,
        name char(16),
        sex enum('male','female','others'),
        hobbies set('play','read','music','piao')
    );
  • 相关阅读:
    安装和强行卸载fuse
    Elasticsearch snapshot 备份的使用方法 【备忘】
    MYSQL数据仓库infobright【备忘】
    Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
    python爬虫实例
    JDK1.8 JVM参数配置
    QQ登录用到的URL
    CAS5.3.X 配置备忘
    Nexus3忘记admin密码时的解决办法
    CentOS7利用systemctl添加自定义系统服务
  • 原文地址:https://www.cnblogs.com/zhaijihai/p/9637047.html
Copyright © 2011-2022 走看看