zoukankan      html  css  js  c++  java
  • MySql概念(二)

    一、Sql规范?

      sql是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。

      在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持sql。

      <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

      <2> SQL语句可单行或多行书写,以“;”结尾。关键词不能跨多行或简写。

    <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

    1
    2
    SELECT FROM tb_table
                WHERE NAME="YUAN";

    <4> 注释:单行注释:--

                   多行注释:/*......*/

    <5>sql语句可以折行操作

     二、Sql数据类型:

      1、数值类型:

       2、无符号类型?

      

    =========有符号和无符号tinyint==========
    #tinyint默认为有符号
    MariaDB [db1]> create table t1(x tinyint); #默认为有符号,即数字前有正负号
    MariaDB [db1]> desc t1;
    MariaDB [db1]> insert into t1 values
        -> (-129),
        -> (-128),
        -> (127),
        -> (128);
    MariaDB [db1]> select * from t1;
    +------+
    | x    |
    +------+
    | -128 | #-129存成了-128
    | -128 | #有符号,最小值为-128
    |  127 | #有符号,最大值127
    |  127 | #128存成了127
    +------+
    
    
    
    #设置无符号tinyint
    MariaDB [db1]> create table t2(x tinyint unsigned);
    MariaDB [db1]> insert into t2 values
        -> (-1),
        -> (0),
        -> (255),
        -> (256);
    MariaDB [db1]> select * from t2;
    +------+
    | x    |
    +------+
    |    0 | -1存成了0
    |    0 | #无符号,最小值为0
    |  255 | #无符号,最大值为255
    |  255 | #256存成了255
    +------+
    

      三、显示长度和存储字节?

    mysql> create table test(id int);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc test;
    +-------+---------+------+-----+---------+-------+
    | Field | Type    | Null | Key | Default | Extra |
    +-------+---------+------+-----+---------+-------+
    | id    | int(11) | YES  |     | NULL    |       |
    +-------+---------+------+-----+---------+-------+
    row in set (0.00 sec)
    

      

      四、decimal类型? 

    float:浮点型,含字节数为4,32bit,        数值范围为-3.4E38~3.4E38(7个有效位)
    
    double:双精度实型,含字节数为8,64bit     数值范围-1.7E308~1.7E308(15个有效位)
    
    decimal:数字型,128                    数值范围 ±1.0 × E28 to ±7.9 × E28(28个有效位)
    decimal的精度比double大,所能储存的最大数却比double要小 。decimal是存在精度损失的,只不过较小而已!
    

      decimal的精度比double大,所能储存的最大数却比double要小 。decimal是存在精度损失的,只不过较小而已!

       五、BIT

        BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位。
          注意:对于位字段需要使用函数读取
            bin()显示为二进制
            hex()显示为十六进制

    mysql> create table t(id bit);
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> desc t;
    +-------+--------+------+-----+---------+-------+
    | Field | Type   | Null | Key | Default | Extra |
    +-------+--------+------+-----+---------+-------+
    | id    | bit(1) | YES  |     | NULL    |       |
    +-------+--------+------+-----+---------+-------+
    row in set (0.00 sec)
    
    mysql> insert t values (1);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from t;
    +------+
    | id   |
    +------+
    |      |
    +------+
    row in set (0.00 sec)
    
    mysql> select bin(id) from t;
    +---------+
    | bin(id) |
    +---------+
    | 1       |
    +---------+
    row in set (0.00 sec)
    

      

    mysql> alter table t modify id bit(5);
    Query OK, 1 row affected (0.02 sec)
    Records: 1  Duplicates: 0  Warnings: 0
    
    mysql> insert into t values(8);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select bin(id),hex(id) from t;
    +---------+---------+
    | bin(id) | hex(id) |
    +---------+---------+
    | 1       | 1       |
    | 1000    | 8       |
    +---------+---------+
    rows in set (0.00 sec)
    

      

     六、字符串类型?

      存储字符串:

      CHAR系列 :CHAR VARCHAR
      TEXT系列 : TINYTEXT TEXT MEDIUMTEXT LONGTEXT

      存储二进制数据:

      BINARY系列: BINARY VARBINARY
      BLOB 系列 :  TINYBLOB BLOB MEDIUMBLOB LONGBLOB 

     

    /*
      char (m)
       
          CHAR列的长度固定为创建表时声明的长度: 0 ~ 255。其中m代表字符串的长度。
          PS: 即使数据小于m长度,也会占用m长度
      varchar(m)
          VARCHAR列中的值为可变长字符串,长度: 0 ~ 65535。其中m代表该数据类型所允许保存的字符串
          的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。
    
          注:虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度
          更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
    
      text
          text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
    
      mediumtext
          A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
    
      longtext
          A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) 
          characters.
    
    */
    

      

    在查询的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格。
    mysql> create table t1(x char(5),y varchar(5));
    mysql> insert into t1 values('你瞅啥  ','瞅你妹                 ');
    mysql> select x,length(x),y,length(y) from t1;
    +--------+-----------+----------+-----------+
    | x      | length(x) | y        | length(y) |
    +--------+-----------+----------+-----------+
    | 你瞅啥 |         9 | 瞅你妹   |        11 |
    +--------+-----------+----------+-----------+
    

      

     七、日期类型

      表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

      每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

      (1)、year

        

    ============year===================
    
    create table t_year(born_year year);
    insert into  t_year values (1901),
                               (2155);
    
    select * from t_year;
    +-----------+
    | born_year |
    +-----------+
    |      1901 |
    |      2155 |
    +-----------+
    rows in set (0.00 sec)
    

      (2)、date time datetime

     mysql> select now();
    +---------------------+
    | now()                                |
    +---------------------+
    | 2017-08-01 19:38:54          |
    +---------------------+
    1 row in set (0.00 sec)

       (3)、timestamp

       

    /*  
        在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,
        但在某些情况下,会展现出他们各自的优劣。下面就来总结一下两种日期类型的区别。
    
    1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
    
    2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。
      在mysql服务器,操作系统以及客户端连接都有时区的设置。
    
    3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的
      空间利用率更高。
    
    4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间
     (CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默
      认更新为当前时间。
      
      */
    
    datetime与timestamp
    

      八、枚举类型与集合类型

    字段的值只能在给定范围中选择,如单选框,多选框
    enum 单选	只能在给定的范围内选一个值,如性别 sex 男male/女female
    set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)
    
    解析:
    

      

    /*
    枚举类型(enum)
    An ENUM column can have a maximum of 65,535 distinct elements. 
    (The practical limit is less than 3000.)
    示例:
        CREATE TABLE shirts (
            name VARCHAR(40),
            size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
        );
        INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), 
                                                ('t-shirt','medium'),
                                                ('polo shirt','small');
    
    集合类型(set)
    A SET column can have a maximum of 64 distinct members.
    示例:
        CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
        INSERT INTO myset (col) VALUES  ('a,d'),
                                        ('d,a'), 
                                        ('a,d,a'), 
                                        ('a,d,d'),
                                        ('d,a,d');
                                        
                                        
    */
    

      

  • 相关阅读:
    使用Angular CLI生成 Angular 5项目
    asp.net core 2.0 web api + Identity Server 4 + angular 5 可运行前后台源码
    依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构
    Git基本命令 -- 别名 + 忽略 + 推送
    Git基本命令 -- 历史
    多线程,论多核时代爱恨情仇
    凛冬将至,用几款特效暖暖身
    HTML5游戏开发引擎,初识CreateJS
    详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)
    详解设计模式六大原则
  • 原文地址:https://www.cnblogs.com/MouseCat/p/7512040.html
Copyright © 2011-2022 走看看