目录
数值数据类型
整数类型
对于整数数据类型,
M
表示最大显示宽度。最大显示宽度为 255。显示宽度与类型可以存储的值的范围无关对于浮点和定点数据类型,
M
是可以存储的总位数
-
位值类型。
M
表示每个值的位数,从 1 到 64。如果M
省略,则默认为 1。 -
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
一个非常小的整数。有符号范围
-128
为127
。无符号范围是0
to255
。 -
这些类型是 的同义词 TINYINT(1)。零值被认为是错误的。非零值被认为是真的:
示例:0表示错误,非0表示正确
mysql> SELECT IF(0, 'true', 'false');
+------------------------+
| IF(0, 'true', 'false') |
+------------------------+
| false |
+------------------------+
mysql> SELECT IF(1, 'true', 'false');
+------------------------+
| IF(1, 'true', 'false') |
+------------------------+
| true |
+------------------------+
mysql> SELECT IF(2, 'true', 'false');
+------------------------+
| IF(2, 'true', 'false') |
+------------------------+
| true |
+------------------------+
-
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
一个小整数。有符号范围
-32768
为32767
。无符号范围是0
to65535
。 -
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
一个中等大小的整数。有符号范围
-8388608
为8388607
。无符号范围是0
to16777215
。 -
INT[(M)] [UNSIGNED] [ZEROFILL]
一个正常大小的整数。有符号范围
-2147483648
为2147483647
。无符号范围是0
to4294967295
。 -
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
这种类型是 的同义词 INT。
-
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
一个大整数。有符号范围
-9223372036854775808
为9223372036854775807
。无符号范围是0
to18446744073709551615
。
定点类型
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
一个压缩的“精确”定点数。 M
是总位数(精度),D
是小数点后的位数(小数位数)。小数点和(对于负数) -
符号不计入 M
。如果 D
为 0,则值没有小数点或小数部分。最大位数 ( M
) 为 DECIMAL65。支持的最大小数位数 ( D
) 为 30。如果D
省略,则默认为 0。如果M
被省略,默认值为 10。
浮点类型
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
一个小的(单精度)浮点数。允许的值为-3.402823466E+38
to -1.175494351E-38
、 0
和1.175494351E-38
to 3.402823466E+38
。这些是基于 IEEE 标准的理论限制。根据您的硬件或操作系统,实际范围可能会稍小一些。
M
是总位数,D
是小数点后的位数。如果省略M
和D
,则将值存储在硬件允许的范围内。单精度浮点数精确到大约 7 位小数。
添加数据类型选项
zerofill:
填充0,影响数字的显示方式,如果一个数字的宽度小于所允许的最大宽度,这个值前面会用0填充,如果声明了zerofill,该列会自动设为unsigned
auto_increment:
自动增长,适用于整数类型,一个表中只有一个列是可以自动增长的。
示例:使用auto_increment自动增长
root@wangsh 21:05 mysql>create table table2(id int auto_increment not null primary key,naeme varchar(20));
Query OK, 0 rows affected (0.01 sec)
root@wangsh 21:08 mysql>desc table2;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
root@wangsh 21:08 mysql>insert into table2(name) values('cali');
Query OK, 1 row affected (0.00 sec)
root@wangsh 21:08 mysql>select * from table2
-> ;
+----+------+
| id | name |
+----+------+
| 1 | cali |
+----+------+
1 row in set (0.00 sec)
root@wangsh 21:08 mysql>insert into table2(name) values('jack');
Query OK, 1 row affected (0.01 sec)
root@wangsh 21:08 mysql>select * from table2;
+----+------+
| id | name |
+----+------+
| 1 | cali |
| 2 | jack |
+----+------+
2 rows in set (0.00 sec)
root@wangsh 21:08 mysql>insert into table2(id,name) values(9,'tom');
Query OK, 1 row affected (0.00 sec)
root@wangsh 21:11 mysql>select * from table2;
+----+------+
| id | name |
+----+------+
| 1 | cali |
| 2 | jack |
| 9 | tom |
+----+------+
3 rows in set (0.00 sec)
root@wangsh 21:12 mysql>insert into table2(name) values('rose');
Query OK, 1 row affected (0.00 sec)
root@wangsh 21:12 mysql>select * from table2;
+----+------+
| id | name |
+----+------+
| 1 | cali |
| 2 | jack |
| 9 | tom |
| 10 | rose |
+----+------+
4 rows in set (0.00 sec)
#############################################################################
字符串字符类型
char和varchar的区别
ENUM枚举类型
枚举值必须是带引号的字符串文字
示例:
root@wangsh 09:30 mysql>create table shirts(name varchar(40), size enum('x-small', 'small', 'medium', 'large', 'x-large'));
Query OK, 0 rows affected (0.00 sec)
root@wangsh 09:31 mysql>desc shirts;
+-------+----------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------------------------------------+------+-----+---------+-------+
| name | varchar(40) | YES | | NULL | |
| size | enum('x-small','small','medium','large','x-large') | YES | | NULL | |
+-------+----------------------------------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
root@wangsh 09:31 mysql>INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),
-> ('polo shirt','small');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
root@wangsh 09:32 mysql>select name, size from shirts;
+-------------+--------+
| name | size |
+-------------+--------+
| dress shirt | large |
| t-shirt | medium |
| polo shirt | small |
+-------------+--------+
3 rows in set (0.00 sec)
如果我们插入的是枚举值之外的字符串,会报错
root@wangsh 09:33 mysql>INSERT INTO shirts (name, size) VALUES ('lining','xxxxlarge');
ERROR 1265 (01000): Data truncated for column 'size' at row 1
########################################################
mysql数据库,很多大公司里面都不允许使用外键
因为在查询的时候,很消耗资源,特别是表非常大的时候