MYSQL笔记_整数类型

1,创建数据库时指定名字和字符集

    CREATE DATABASE IF NOT EXISTS dbtest CHARACTER SET 'utf8mb4' ;
    SHOW CREATE DATABASE dbtest;


2,创建表时指定名字和字符集

    CREATE TABLE temp(
    id INT 
    name VARCHAR(15)  CHARACTER SET 'gbk'   字段的字符集可以指定,如id INT CHARACTER SET 'utf8'
    ) CHARACTER SET 'utf8mb4';
    SHOW CREATE TABLE temp;


3,整数类型


    USE dbtest;

    A,创建表

        CREATE TABLE TABLE名(字段 整数类型)
        CREATE TABLE test_int1(
        f1 TINYINT, 
        f2 SMALLINT,
        f3 MEDIUMINT,
        f4 INTEGER,
        f5 BIGINT
        );
        DESC test_int1;


    B,存储数据

        INSERT INTO test_int1(f1)
        VALUES(12),(-12),(-128),(127);
        SELECT * FROM test_int1;


        
    C,可选属性M

        a,M表示宽度,范围在(0,255)以内
        b,配合ZEROFILL使用,否则会无效
        c,mysql 8.0.17.开始不推荐使用

            1,超过范围的话

            INSERT INTO test_int1(f1)
            VALUES(128);

            显示错误

            2,超过INT(5)之中宽度5的限制  

            CREATE TABLE test_int2(
            F1 INT,
            F2 INT(5),只是限制宽度无意义
            F3 INT(5) ZEROFILL配合ZEROFILL使用有意义
            )

        说明

            INSERT INTO test_int2(F1,F2,F3)
            VALUES(123,123),(123456,123456),();
            SELECT * FROM test_int2;

            3,ZEROFILL的使用

            INSERT INTO test_int2(F3)
            VALUES(123),(123456)使用了zerofill所以有意义            


4,浮点类型——>处理小数FLOAT,DOUBLE


    A,无符号取值范围只有有符号取值范围的一半

    B,MYSQL允许使用非标准语法:FLOAT(M,D),DOUBLE(M,D)
    M=精度=整数位+小数位    D <= M <= 255
    D=标度=小数位    0 <= D <= 30

    C,无论是否设置了精度(M,D)MYSQL的处理方式如下:
    1,存储时,整数部分超出范围,MYSQL报错
    2,存储时,小数点超出范围
        a,四舍五入后没有超出范围,MYSQL警告,成功存储
        b,四舍五入后超出范围,MYSQL报错

浮点数FLOAT,DOUBLE数据不准确,避免使用=
定点数DECIMAL数据准确,可以使用=


5,定点数类型DECIMAL


开发经验:除了商品编号用整数类型,其余都用DECIMAL


6,位类型BIT——>存储二进制值


    1 <= M <= 64


    说明

    CREATE TABLE test_bit1(
    F1 BIT(不规定宽度,默认为一位),
    F2 BIT(5),因为是二进制所以分解为五个一,得位数为31
    F3 BIT(64)
    ) ;
    DESC test_bit1;
    INSERT INTO test_bit1(F1)
    VALUES (0),(1);
    SELECT * FROM test_bit1

    A,宽度是数字默认读取为二进制,所以

    INSERT INTO test_bit1(F1)
    VALUES(2);
    2为十进制,系统读取为10,有两个位数,超过了F1规定的位数,显示错误    


    B,超出31一位

    INSERT INTO test_bit1(F2)
    VALUES(32);

    显示错误


    C,通过其他进制显示

    HEX()16进制——默认显示为16进制
    BIN()
    字段+0 十进制显示

        SELECT BIN(F1),HEX(F2)
        FROM test_bit1 ;
        SELECT F1+0,F2+0
        FROM test_bit1 ;        



7,时间类型

       
    A,YEAR


        存储格式
            1,4位字符串或数字(YYYY)默认
            2,2位字符串(00,99)不推荐使用
                        (01,69)——(2001,2069)
                        (70,99)——(1970,1999)
                        (0)——(0000)


        说明

        CREATE TABLE test_year(
        F1 YEAR,
        F2 YEAR(4)
        );
        DESC test_year;
        INSERT INTO test_year(F1)
        VALUES('2021'),(2022),(69),(70);
        SELECT * FROM test_year;


        B,DATE

        存储格式
            1,YYYY-MM-DD或者YYYYMMDD
            
            2,YY-MM-DD或者YYMMDD
            (00,69)(2000,2069)
            (70,99)(1970,1999)

           
        说明  

                CREATE TABLE test_date(
                f1 DATE
                );    
                INSERT INTO test_date(f1)
                VALUES('2020-10-01'),('20201001'),(20201001);
                INSERT INTO test_date(f1)
                VALUES(000301),(690301),(700301),(990301);
                SELECT * FROM test_date ;

           
           3,插入当前系统日期CURRENT_DATE()或者NOW()

                INSERT INTO test_date(f1)
                VALUES (CURDATE()),(CURRENT_DATE()),(NOW());
                SELECT * FROM test_date ;


                
        C,TIME 

        存储格式
            1,
            'D HH:MM:SS',字符串带D,D会被转化为小时,计算格式为D*24+HH
            'HH:MM:SS',字符串不带D,表示当天时间
            '12:10'——>12:10:00
            
            2,
            HHMMSS或者'HHMMSS'
            1210——>00:12:10
            
        说明

            CREATE TABLE test_time(
            f1 TIME
            );
            INSERT INTO test_time
            VALUES ('2 12:30:29'),('12:35:29'),('12:40');
            INSERT INTO test_time
            VALUES ('123520'),(124011);                               
            SELECT* FROM test_time;

            
            3,插入当前系统时间CURRENT_TIME()或者NOW()

            INSERT INTO test_time
            VALUES (NOW()),(CURRENT_TIME());


        D,DATETIME

        存储格式
            1,YYYY-MM-DD HH:MM:SS或者YYYYMMDDHHMMSS
            
            2,YY-MM-DD HH:MM:SS或者YYMMDDHHMMSS
            
        说明

            CREATE TABLE test_datetime(
            dt DATETIME
            );
            INSERT INTO test_datetime
            VALUES('2020-10-01 15:07:31'),('20201001150731'),(20201001150731);
            INSERT INTO test_datetime
            VALUES('99-10-01 15:07:31'),('991001150731'),(991001150731);
            SELECT * FROM test_datetime ;            

            3,插入当前系统日期和时间CURRENT_TIMESTAMP()或者NOW()

            INSERT INTO test_datetime
            VALUES (NOW()),(CURRENT_TIMESTAMP());            



        E,TIMESTAMP    


           1,只能储存1970-2038 UTC 年的时间
            
            2,修改当前时区

            SET TIME_ZONE = '+8:00';

            数据存储时的时区,与查询数据时的时区,.有可能不同,返回结果会不同
            
            3,TIMESTAMP和DATATIME的区别
            a,TIMESTAMP存储空间小,表示范围小
            b,TIMESTAMP底层存储为毫秒值
            c,两个日期比大小时,TIMESTAMP更快更方便
            d,DATETIME只能反映存储数据时的时区

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值