MySQL的数据类型

SQL接口

  • 标准:
    • ANSI SQL:SQL-86--------SQL-89--------SQL-99---------SQL-03
  • 数据类型
    • 字符型:
      • CHAR(不区分字母大小写),BINARY(不区分字母大小写):定长数据类型
      • VARCHARE(不区分字母大小写),VARBINARY(不区分字母大小写):变长数据类型;需要结束符
      • TEXT系列(不区分字符大小写):TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
      • BLOB系列:TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB
      • ENUM(枚举),SET(集合)
    • 数值型
      • 精确数值型:
        • 整型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT
        • 十进制
      • 近似数值型:
        • 浮点型:FLOAT,DOUBLE
    • 时间日期型
      • DATE
      • TIME
      • DATETIME
      • YEAR(2),YEAR(4)
    • 内建类型
      • ENUM
      • SET

数据类型详解:

  • 字符型:
    • 字符型修饰符:
      • NOT NULL:非空约束
      • NULL
      • DEFAUL ‘STRING’:默认值
      • CHARATER SET ‘UTF8’   :使用的字符集
      • COLLATION:使用的排序规则
  1. MariaDB [(none)]> show character set; #查看支持的字符集
  2. MariaDB [(none)]> show collation; #查看支持的字符集
  • 整型数据
    • 整形数据修饰符
      • NOT NULL
      • NULL
      • AUTO_INCREDENT:
        • UNSINED
        • PRIMARY KEY | UNIQUE KEY
  1. MariaDB [(none)]> select last_insert_id(); #查看最后一个插入数值的ID
  2. +------------------+
  3. | last_insert_id() |
  4. +------------------+
  5. | 0 |
  6. +------------------+
  7. 1 row in set (0.00 sec)
栗子:
  • 内建类型set和人enum的修饰符
    • NULL
    • NOT NULL
    • DEFAULT
  1. MariaDB [tt]> create table enum_set (en ENUM('a','','1'),se SET('a','1'));
  2. MariaDB [tt]> insert into enum_set (en,en) values("a","a");
  3. MariaDB [tt]> insert into enum_set (en,se) values("a","a");
  4. MariaDB [tt]> insert into enum_set (en,se) values("a","b");
  5. MariaDB [tt]> insert into enum_set (en,se) values("b","a");
  6. MariaDB [tt]> select * from enum_set;
  7. +------+------+
  8. | en | se |
  9. +------+------+
  10. | a | a |
  11. | a | |
  12. | | a |
  13. +------+------+
  14. 3 rows in set (0.00 sec)

  • SQL  MODE:定义MySQL对约束等的响应行为
    • 常用的SQL_MODE:TRADITIONAL,STATIC_TRANS_TABLES,STATIC_ALL_TABLES
             查看方式:
  1. MariaDB [tt]> show global variables like "sql_mode"; #sql_mode查询
  2. +---------------+--------------------------------------------+
    | Variable_name | Value |
    +---------------+--------------------------------------------+
    | sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +---------------+--------------------------------------------+
    1 row in set (0.00 sec)
  3. MariaDB [tt]> show global variables like "sql_%"; #模糊匹配查询方式
    +------------------------+--------------------------------------------+
    | Variable_name | Value |
    +------------------------+--------------------------------------------+
    | sql_auto_is_null | OFF |
    | sql_big_selects | ON |
    | sql_buffer_result | OFF |
    | sql_log_bin | ON |
    | sql_log_off | OFF |
    | sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    | sql_notes | ON |
    | sql_quote_show_create | ON |
    | sql_safe_updates | OFF |
    | sql_select_limit | 18446744073709551615 |
    | sql_slave_skip_counter | 0 |
    | sql_warnings | OFF |
    +------------------------+--------------------------------------------+
    12 rows in set (0.00 sec)
            修改方式:
  1. MariaDB [tt]> set global sql_mode='MODE';
  2. MariaDB [tt]> set @@global.sql_mode='MODE';
  3. MariaDB [tt]> set session sql_mode='MODE';
  4. MariaDB [tt]> set @@session.sql_mode='MODE';
            注意事项:需要具有管理员权限,仅对修改之后的会话有效,对已建立的会话无效:
            栗子:
  1. MariaDB [mydbl]> create database ttt;
  2. MariaDB [mydbl]> use ttt;
  3. MariaDB [ttt]> create table t1 (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,name CHAR(5) NOT NULL);
  4. MariaDB [ttt]> insert into t1 (name) values('wang'),('xuexusd'); #没修改之前会有警告,但不报错
  5. MariaDB [mydbl]> set sql_mode='TRADITIONAL'; #改之后,超过字符限制就会报错
  6. Query OK, 2 rows affected, 2 warnings (0.00 sec)
    Records: 2 Duplicates: 0 Warnings: 2
  7. MariaDB [ttt]> insert into t1 (name) values('wang'),('xufsdsexu');
  8. ERROR 1406 (22001): Data too long for column 'name' at row 1 #错误信息

SQL语言

  • DDL:数据定义语言
    • create       alter           drop
    • DB组件:数据库,表,索引,视图,用户,存储过程,存储函数,触发器,事件调度器等
    • create相关的常用命令
  1. MariaDB [ttt]> help create;
  2. Many help items for your request exist.
    To make a more specific request, please type 'help <item>',
    where <item> is one of the following
    topics:
    CREATE DATABASE
    CREATE EVENT
    CREATE FUNCTION
    CREATE FUNCTION UDF
    CREATE INDEX
    CREATE PROCEDURE
    CREATE SERVER
    CREATE TABLE
    CREATE TABLESPACE
    CREATE TRIGGER
    CREATE USER
    CREATE VIEW
    SHOW
    SHOW CREATE DATABASE
    SHOW CREATE EVENT
    SHOW CREATE FUNCTION
    SHOW CREATE PROCEDURE
    SHOW CREATE TABLE
    SPATIAL
  • DML:数据操作语言
    • insert         delete          update           select
  • 数据库相关指令:
    • create,alter,drop {database|schema} [if exists] [if not exists]
  • 表:二维关系
    • 设计表:遵循规范
    • 定义:字段,索引
      • 字段:字段名(不区分大小写),字段数据类型,修饰符
      • 约束:索引(
          • 1.应该创建在查询条件最多的字段上;
          • 2.实现级别在存储引擎;
          • 3.分类:
              • 稠密索引;稀疏索引;
              • B+索引;hash索引;R树索引;FULLTEXT索引
              • 聚集索引;非聚集索引
    • 创建表:
      • 直接创建
  1. CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  2. (create_definition,...)
  3. [table_options]
  4. [partition_options]
      • 根据已经存在的表创建,新表会被直接插入查询而来的数据
  1. CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  2. [(create_definition,...)]
  3. [table_options]
  4. [partition_options]
  5. select_statement
      • 根据已经存在的表结构创建,不复制数据
  1. CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
  2. { LIKE old_tbl_name | (LIKE old_tbl_name) }
        注意:storage engine是指表类型,也就是在创建表得时候指明其使用的数据存储引擎
                    同一个库中的表要使用同一种存储引擎类型
    • 查看表
  1. MariaDB [ttt]> desc t1; #查看表结构
    +-------+------------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |
    +-------+------------------+------+-----+---------+----------------+
    | id | int(10) unsigned | NO | PRI | NULL | auto_increment |
    | name | char(5) | NO | | NULL | |
    +-------+------------------+------+-----+---------+----------------+
    2 rows in set (0.01 sec)
  2. MariaDB [ttt]> show tables; #查看表个数
    +---------------+
    | Tables_in_ttt |
    +---------------+
    | t1 |
    +---------------+
    1 row in set (0.00 sec)
  3. MariaDB [ttt]> show table status like 't1'\G; #查看表状态
    *************************** 1. row ***************************
    Name: t1
    Engine: InnoDB
    Version: 10
    Row_format: Compact
    Rows: 2
    Avg_row_length: 8192 #平均每行宝库奥的字节数
    Data_length: 16384 #表中数据的大小
    Max_data_length: 0
    Index_length: 0
    Data_free: 0
    Auto_increment: 3
    Create_time: 2017-01-07 13:51:08
    Update_time: NULL
    Check_time: NULL
    Collation: utf8mb4_general_ci #排序规则
    Checksum: NULL #表的校验和(性能优化)
    Create_options: #额外选项
    Comment: #注释信息
    1 row in set (0.00 sec)
    • 修改表:alter table
    • 删除表:drop table

Mysql之二的更多相关文章

  1. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  2. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...

  3. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

  4. Python/MySQL(二、表操作以及连接)

    Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...

  5. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  6. mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法   MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...

  7. mysql进阶(二十七)数据库索引原理

    mysql进阶(二十七)数据库索引原理 前言   本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb.   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础.    ...

  8. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  9. mysql优化二之锁机制

    mysql优化二之锁机制 mysql提供了锁机制和MVCC机制来保证并发操作的安全性,这里主要讨论锁机制, MVCC见下篇文章 mysql的锁按照锁粒度可分为行锁与表锁,按照操作类型划分可读锁和写锁 ...

  10. MySQL基准测试(二)--方法

    MySQL基准测试(二)--方法 目的: 方法不是越高级越好.而应该善于做减法.至简是一种智慧,首先要做的是收集MySQL的各状态数据.收集到了,不管各个时间段出现的问题,至少你手上有第一时间的状态数 ...

随机推荐

  1. SQLite入门与分析(四)---Page Cache之事务处理(3)

    写在前面:由于内容较多,所以断续没有写完的内容. 11.删除日志文件(Deleting The Rollback Journal)一旦更改写入设备,日志文件将会被删除,这是事务真正提交的时刻.如果在这 ...

  2. mysql查看数据库命令

    mysql查看数据库命令 打开的数据库的命令 mysql> use mysql Database changed 查看数据库的命令 mysql> show databases; 查看数据表 ...

  3. C#基础精华06(Linq To XML,读取xml文件,写入xml)

    1.XML概述: 可扩展标记语言XML(eXtensible Markup Language)是一种简单灵活的文本格式的可扩展标记语言,侧重于存储数据. 2.XML特点 xml 标记语言 html x ...

  4. 91. Decode Ways

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  5. python学习笔记三--字典的使用

    一.基本使用: 1. 赋值:{key:value} 1.1 与列表相同处:会改变索引(键)相关联的值的改变 1.2 与列表不同处:不用考虑值的长度,而列表是有序的需要考虑末尾偏移量,超过末尾偏移量的会 ...

  6. poj 3687 Labeling Balls(拓扑排序)

    题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...

  7. Repeater实例应用

    在实际开发过程中,涉及到数据绑定,分页,以及一对多展示数据时,遇到这样的需求我们怎么解决呢?下面以帖子展示来逐一说明. 帖子主要由两部分组成,第一部分是发帖人的原创内容部分,第二部分是用户评论部分,这 ...

  8. LCA与RMQ

    一.什么是LCA? LCA:Least Common Ancestors(最近公共祖先),对于一棵有根树T的任意两个节点u,v,求出LCA(T, u, v),即离跟最远的节点x,使得x同时是u和v的祖 ...

  9. 【转】Bluetooth数据包捕获

    原文网址:http://www.cnblogs.com/hzl6255/p/3887013.html 这里介绍一种在Android上捕获蓝牙数据包的方法 1. 前提 首先你要有一部Android手机  ...

  10. poj 3279 Fliptile

    题意:一个n * m的棋盘,0或1,每次改变一个格子时同时改变上下左右的格子,问用最少次数将棋盘全变成0的策略. 题解:用二进制压缩第一行更改的状态,之后遍历棋盘,如果当前格子为1则改变下方的格子,记 ...