您的位置:首页 > 数据库 > MySQL

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

2017-02-13 18:14 621 查看
客户端程序: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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息