首页 > 代码库 > MySQL数据类型、变量修饰及变量区别
MySQL数据类型、变量修饰及变量区别
客户端程序: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)
本文出自 “11097124” 博客,请务必保留此出处http://11107124.blog.51cto.com/11097124/1897009
MySQL数据类型、变量修饰及变量区别