MySQL数据类型、变量修饰及变量区别

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

客户端程序:mysql、mysqladmin、mysqldump、mysqlimport、mysqlcheck


服务器端程序:mysqld, mysqld_safe, mysqld_multi



my.cnf配置文件查找顺序,以最后一个找到的为准


/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> --default-extra-


file=/path/to/somefile --> ~/.my.cnf (用户家目录下的)




my.cnf文件是分段配置的文件


[mysqld]    则只对mysqld应用程序生效


[mysqld_safe] 则只对mysqld_safe应用程序生效


[client]    则对所有mysql客户端程序生效


[mysql]     则只对客户端的mysql程序生效



mysql> use mysql

查看一个表的状态信息,包括使用的引擎

mysql> show table status like 'user'\G 

*************************** 1. row ***************************

        Name: user

        Engine: MyISAM

        Version: 10

        Row_format: Dynamic

        Rows: 4

   Avg_row_length: 143

   Data_length: 572

Max_data_length: 281474976710655

   Index_length: 2048

   Data_free: 0

Auto_increment: NULL

    Create_time: 2016-12-23 19:51:38

    Update_time: 2017-02-11 17:39:16

    Check_time: NULL

    Collation: utf8_bin

    Checksum: NULL

Create_options: 

    Comment: Users and global privileges


数据类型:


数值型 精确数值


INT 整型

TINYINT 2^8 SMALLINT 2^16 MEDIAINT 2^24 INT 2^32 BIGINT 2^64


DECIMAL 精确十进制


BIT 按位存储


近似数值

float  2^4 单精度浮点型

double 2^8 双精度浮点型

real



float(g,f)

g:表示一共多少位

f:表示浮点数多少位


例 1.36 g=3 f=2



字符型

定长:CHAR(#)、BINARY

CHAR 2^8 

VARCHAR 2^16 变长


BINARY 区分大小写、定长

VARBINARY 区分大小写、变长


TINYBLOB 2^8

BLOB 2^16 二进制大对象

MEDIUMBLOB 2^24

LONGBLOB 2^32


TINYTEXT 2^8

TEXT 2^16 文本型

MEDIUNTEXT 2^24

LONGTEXT 2^32


ENUM 枚举

例: ENUM(‘M’,‘F’) 只能写入 M或F


SET 集合

例: SET(‘M’,‘F’) 只能写M、F、MF、FM


日期时间型

DATE "CCYY-MM--DD"

TIME 'hh:mm:ss'

DATETIME 'CCYY-MM-DD hh:mm;ss'

YEAR CCYY 或 YY 

例: YEAR(4)则表示用4位表示时间

   YEAR(2)则表示用2位表示时间


注:当占据空间超过8个位(2^8)时,每2^8要有一位作为结束符



字符串类型的修饰:

NOT NULL 不能为空

NULL 可为空

DEFAULT 当用户未输入值时给一个默认的值

CHARACTER SET (字符集)

COLLATION (排序规则)


>show character set; 显示当前服务器上支持的所有字符集

>show COLLATION; 在各个字符集下显示排序规则


整形修饰

AUTO_INCREMENT (自动增长型)

一定不能为0

一定要创建主键索引或者唯一键索引

一定要为整形且无符号


UNGIGNED (无符号) 修饰整形


LAST_INSERT_ID() 返回最近增长值的函数

mysql> select last_insert_id();

+------------------+

| last_insert_id() |

+------------------+

|                0 |

+------------------+

1 row in set (0.10 sec)



mysql> use test

mysql> create table test(id int unsigned auto_increment not null primary key,name           char(20)); 

Query OK, 0 rows affected (0.80 sec)


mysql> show tables ;

+----------------+

| Tables_in_test |

+----------------+

| test           |

+----------------+

1 row in set (0.00 sec)


MySQL的变量分 为:

全局变量:对所有会话都生效,但只能由MySQL的root用户修改

会话变量:只对当前会话生效,所有用户都可以修改


生效时间

动态变量:即时修改、即时生效

静态变量:要写在配置文件中,重启生效


动态变量的生效方式

全局:对当前会话无效,对新建立会话有效

会话:即时生效,但只对当前会话有效


>show global variables;

>show global variables like 'sql_mode';

>show variables like 'sql_mode';


变量的显示

@显示用户自定义变量

@@显示服务器bianliang


一般用select显示某个变量

>show @@session.sql_mode;

>show @@global.sql_mode;


变量的设置


一般用set设置变量

>set global sql_mode='strict_all_tables'; 修改全局变量sql_mode



mysql> select @@global.sql_mode; 无定义

+--------------------------------------------+

| @@global.sql_mode                          |

+--------------------------------------------+

| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |

+--------------------------------------------+

1 row in set (0.03 sec)


mysql> set global sql_mode='strict_all_tables'; 全局改为strict_all_tables

Query OK, 0 rows affected (0.04 sec)


mysql> select @@global.sql_mode; 全局已近修改

+-------------------+

| @@global.sql_mode |

+-------------------+

| STRICT_ALL_TABLES |

+-------------------+

1 row in set (0.00 sec)


mysql> select @@session.sql_mode; 但当前会话仍然为未设置

+--------------------------------------------+

| @@session.sql_mode                         |

+--------------------------------------------+

| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |

+--------------------------------------------+

1 row in set (0.00 sec)


且当前会话>全局

所以仍然未生效



重新登录

mysql> 

mysql> select @@global.sql_mode; 全局仍然生效

+-------------------+

| @@global.sql_mode |

+-------------------+

| STRICT_ALL_TABLES |

+-------------------+

1 row in set (0.00 sec)


mysql> select @@session.sql_mode; 当前会话也随着全局及重新登录生效

+--------------------+

| @@session.sql_mode |

+--------------------+

| STRICT_ALL_TABLES  |

+--------------------+

1 row in set (0.00 sec)


mysql> set session sql_mode='strict_trans_tables'; 修改会话变量

Query OK, 0 rows affected (0.00 sec)


mysql> select @@session.sql_mode; 会话变量已经修改,且已经生效

+---------------------+

| @@session.sql_mode  |

+---------------------+

| STRICT_TRANS_TABLES |

+---------------------+

1 row in set (0.00 sec)


mysql> select @@global.sql_mode; 全局变量仍然未变,当会被会话变量覆盖

+-------------------+

| @@global.sql_mode |

+-------------------+

| STRICT_ALL_TABLES |

+-------------------+

1 row in set (0.00 sec)



再次重新登录

mysql> select @@global.sql_mode; 全局变量仍然未变

+-------------------+

| @@global.sql_mode |

+-------------------+

| STRICT_ALL_TABLES |

+-------------------+

1 row in set (0.00 sec)


mysql> select @@session.sql_mode; 会话变量也已变回

+--------------------+

| @@session.sql_mode |

+--------------------+

| STRICT_ALL_TABLES  |

+--------------------+

1 row in set (0.00 sec)










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1897395,如需转载请自行联系原作者
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
关系型数据库 MySQL 分布式数据库
Hbase与MySQL对比,区别是什么?
Hbase与MySQL对比,区别是什么?
15 2
|
2天前
|
存储 关系型数据库 MySQL
MySQL数据类型详解及实例应用
MySQL数据类型详解及实例应用
|
3天前
|
SQL 存储 数据处理
实时计算 Flink版产品使用合集之flink-connector-mysql-cdc 和 flink-sql-connector-mysql-cdc有什么区别
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
12 1
|
3天前
|
存储 关系型数据库 MySQL
MySQL各字符集、排序规则的由来、用法,区别和联系
MySQL支持多种字符集和排序规则,这些在数据库设计和数据处理中起着重要作用。下面是它们的由来、用法、区别和联系: 1. **字符集(Character Set)**: - **由来**:字符集定义了数据库中可以存储的字符集合,以及这些字符在数据库中的存储方式。 - **用法**:在创建数据库或表时,可以指定所需的字符集。常见的字符集包括UTF-8、UTF-16、Latin1等。 - **区别和联系**:不同的字符集支持不同的字符范围和存储方式,选择合适的字符集可以确保数据的正确存储和处理。例如,UTF-8支持全球范围内的大多数字符,而Latin1只支持西欧语言字符集。
|
4天前
|
NoSQL 关系型数据库 MySQL
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
B+树 和 跳表 的结构及区别,不同的用途【mysql的索引为什么使用B+树而不使用跳表?】
20 2
|
4天前
|
关系型数据库 MySQL 数据库
mysql 设置环境变量与未设置环境变量连接数据库的区别
设置与未设置MySQL环境变量在连接数据库时主要区别在于命令输入方式和系统便捷性。设置环境变量后,可直接使用`mysql -u 用户名 -p`命令连接,而无需指定完整路径,提升便利性和灵活性。未设置时,需输入完整路径如`C:\Program Files\MySQL\...`,操作繁琐且易错。为提高效率和减少错误,推荐安装后设置环境变量。[查看视频讲解](https://www.bilibili.com/video/BV1vH4y137HC/)。
24 3
mysql 设置环境变量与未设置环境变量连接数据库的区别
|
4天前
|
关系型数据库 MySQL
MySQL union和union all的用法详解和区别
MySQL union和union all的用法详解和区别
11 0
|
4天前
|
存储 SQL 关系型数据库
mysql中MyISAM和InnoDB的区别是什么
mysql中MyISAM和InnoDB的区别是什么
16 0
|
4天前
|
关系型数据库 MySQL
MySQL 的 union 和union all 的区别
【5月更文挑战第4天】MySQL 的 union 和union all 的区别
27 7
|
4天前
|
SQL 关系型数据库 MySQL
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句
【MySQL】DQL-分组查询-语法&where与having的区别&注意事项&可cv例题语句

推荐镜像

更多