在MySQL数据库管理系统中,可以通过存储引擎来决定表的类型。同时,MySQL数据库管理系统也提供了数据类型决定表存储数据的类型。
数据类型
常见的数据类型
数值类型:
整数类型 TINYINT SMALLINT MEDIUMINT INT BIGINT
浮点数类型 FLOAT DOUBLE
定点数类型 DEC 位类型 BIT
字符串类型:
CHAR系列 CHAR VARCHAR
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB
BINARY系列 BINARY VARBINARY
枚举类型: ENUM
集合类型: SET
时间和日期类型: DATE TIME DATETIME TIMESTAMP YEAR
数值类型
整型
作用:用于存储用户的年龄、游戏的Level、经验值等。 两种类型分类:
分类1:tinyint smallint mediumint int bigint
存储数据大小范围:
tinyint smallint mediumint int bigint
1个字节Byte 2个字节 3个字节 4个字节 8个字节
8bit 16bit 24bit 32bit 64bit
分类2:有符号 无符号
有符号 : 有正负数 范围运算公式 -2^(n-1)到2^(n-1)-1
比如:
tinyint:-128到127
无符号 :
范围运算公式 0到2^n-1
比如:
tinyint:0到255
bigint: 0到2^64-1
没有负数 类型后面使用unsigned和zerofill修饰符
定义无符号整型有两种方法unsigned和zerofill:
unsigned:
mysql> create table t6(id bigint unsigned);
zerofill:
mysql> create table t2 (
-> id1 int zerofill,
-> id2 int(6) zerofill
-> );
Query OK, 0 rows affected (0.05 sec)mysql> desc t2;
+-------+---------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id1 | int(10) unsigned zerofill | YES | | NULL | |
| id2 | int(6) unsigned zerofill | YES | | NULL | |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into t2 values(2,2);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t2;
+------------+--------+
| id1 | id2 |
+------------+--------+
| 0000000002 | 000002 |
+------------+--------+
1 row in set (0.00 sec)
浮点型
作用:用于存储用户的身高、体重、薪水等 float(5,3) 5宽度 3精度
mysql> create table t12(id float(6,2));
double(5,3)
定点型
定点数在MySQL内部以字符串形式存储,比浮点数更精确,适合用来表示货币等精度高的数据。 decimal(5,3)
位类型
BIT(M)可以用来存放多位二进制数,M范围从1~64,如果不写默认为1位 对于位字段可以使用函数读取:
bin() 显示为二进制 hex() 显示为十六进制
mysql> create table test_bit (id bit(4)); //4bit能存储的最大值为15 mysql> desc test_bit; +-------+--------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------+------+-----+---------+-------+ | id | bit(4) | YES | | NULL | | +-------+--------+------+-----+---------+-------+ mysql> insert into test_bit values(4); mysql> select * from test_bit; +------+ | id | +------+ | | +------+ mysql> select bin(id),hex(id) from test_bit; +---------+----------+ | bin(id) | hex(id) | +----------+---------+ | 100 | 4 | +----------+---------+ 1 row in set (0.00 sec)
字符串类型
作用:用于存储用户的姓名、爱好、发布的文章等
经验:
-
1.经常变化的字段用varchar
-
2.知道固定长度的用char
-
3.尽量用varchar
-
4.超过255字符的只能用varchar或者text
-
5.能用varchar的地方不用text
字符类型 char varchar
char(10) 根据设置值10,占10个.
列的长度固定为创建表时声明的长度: 0 ~ 255
varchar(10) 根据实际字符串长度占空间,最多10个
列中的值为可变长字符串,长度: 0 ~ 65535
在检索的时候,CHAR列删除了尾部的空格,而VARCHAR则保留这些空格
mysql> create table vc (
-> v varchar(4),
-> c char(4)
-> );
mysql> desc vc;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| v | varchar(4) | YES | | NULL | |
| c | char(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
mysql> insert into vc values('ab ','ab ');
mysql> select * from vc;
+------+------+
| v | c |
+------+------+
| ab | ab |
+------+------+
mysql> select length(v),length(c) from vc;
+-----------+-----------+
| length(v) | length(c) |
+-----------+-----------+
| 4 | 2 |
+-----------+-----------+
mysql> select concat(v,'='), concat(c,'=') from vc; //在后面加字符'=',看的更清楚
+---------------+---------------+
| concat(v,'=') | concat(c,'=') |
+---------------+---------------+
| ab = | ab= |
+---------------+---------------+
枚举类型 enum
mysql> create table t101(name enum('wing','jim'));
只能从wing,jim两个里面2选其1
注: enumerate 英[ɪˈ nju:məreɪt] 美[ɪ ˈnu:məreɪt]
集合 set
mysql> create table t204(name set('wing','jim'));
mysql> insert into t204 set name="jim,wing";
跟enum一样被限定范围,但是可以同插入多个数据
时间和日期类型
时间和日期类型:DATE TIME DATETIME TIMESTAMP YEAR
作用:用于存储用户的注册时间,文章的发布时间,文章的更新时间,员工的入职时间等
mysql> create table t8 ( id1 timestamp NOT NULL default CURRENT_TIMESTAMP, id2 datetime default NULL ); timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。“自动”的意思就是,你不去管它,MySQL 会替你去处理。 mysql> insert into t8(id1) values('20180109000000'); mysql> select * from t8; +---------------------+------+ | id1 | d2 | +---------------------+------+ | 2018-01-09 00:00:00 | NULL | +---------------------+------+ 1 row in set (0.00 sec) 扩展: select now();查看当前时间
库操作
系统数据库 information_schema:
虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
performance_schema:
主要存储数据库服务器的性能参数
mysql:
授权库,主要存储系统用户的权限信息
sys:
主要存储数据库服务器的性能参数
创建数据库3种方法
1. # mysqladmin -u root -p1 create db1 2. 直接去创建数据库目录并且修改权限 # 不建议使用 3. mysql> create database wing; #wing是数据库名称
数据库命名规则 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字
sql语句结尾
每条sql语句都要以;结尾,但是如果列比较多,想看的清楚一点,可以以\G结尾
查看数据库
mysql> show databases; mysql> show create database wing;
查看当前所在库:
mysql> select database();
切换数据库
mysql> use wing; mysql> show tables;
删除数据库
mysql> drop database 数据库名;