1、数据类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。
下面的表显示了需要的每个数值类型的存储和范围:
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
| SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 字节 | (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 字节 | (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性。
| 类型 | 大小 (字节) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | ‘-838:59:59‘/‘838:59:59‘ | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 8 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255字节 | 定长字符串 |
| VARCHAR | 0-65535 字节 | 变长字符串 |
| TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255字节 | 短文本字符串 |
| BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
| TEXT | 0-65 535字节 | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |

mysql> SHOW DATABASES; //查看有哪些数据库;+--------------------+|Database|+--------------------+| information_schema || mysql || performance_schema || t1 || test |+--------------------+5 rows inset(0.03 sec)mysql> USE test; //打开test数据库;Database changedmysql> SELECT DATABASE(); //查看当前打开了哪个数据库;+------------+| DATABASE()|+------------+| test |+------------+1 row inset(0.00 sec)mysql> CREATE TABLE tb1(-> username VARCHAR(20), -> age TINYINT UNSIGNED, //年龄不存在负值,UNSIGNED表示无符号类;-> salary FLOAT(8,2) UNSIGNED->); //创建数据表;Query OK,0 rows affected (0.20 sec)mysql> SHOW TABLES; //查看当前数据库的数据表;+----------------+|Tables_in_test|+----------------+| tb1 |+----------------+1 row inset(0.03 sec)mysql> SHOW TABLES FROM mysql; //查看数据库mysql下的数据表;+---------------------------+|Tables_in_mysql|+---------------------------+| columns_priv || db || event || func || general_log || help_category || help_keyword || help_relation || help_topic || host || ndb_binlog_index || plugin || proc || procs_priv || proxies_priv || servers || slow_log || tables_priv || time_zone || time_zone_leap_second || time_zone_name || time_zone_transition || time_zone_transition_type || user |+---------------------------+24 rows inset(0.06 sec)mysql> SELECT DATABASE(); //查看当前使用的数据库是否发生变化?;+------------+| DATABASE()|+------------+| test | //当前打开的数据库依然还是test数据库;+------------+1 row inset(0.00 sec)mysql> SHOW COLUMNS FROM tb1;+----------+---------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+----------+---------------------+------+-----+---------+-------+| username | varchar(20)| YES || NULL ||| age | tinyint(3) unsigned | YES || NULL ||| salary | float(8,2) unsigned | YES || NULL ||+----------+---------------------+------+-----+---------+-------+3 rows inset(0.08 sec)mysql> INSERT tb1 VALUES(‘Tom‘,25,7863.25); //插入记录;Query OK,1 row affected (0.08 sec)mysql> INSERT tb1 VALUES(‘Tom‘,25);ERROR 1136(21S01):Column count doesn‘t match value count at row 1mysql> INSERT tb1(username,salary) VALUES(‘John‘,4500.69); //插入部分记录Query OK, 1 row affected (0.06 sec)mysql> SELECT * FROM tb1; //查看数据表中的所有字段;+----------+------+---------+| username | age | salary |+----------+------+---------+| Tom | 25 | 7863.25 || John | NULL | 4500.69 |+----------+------+---------+2 rows in set (0.02 sec)mysql> CREATE TABLE tb2(-> username VARCHAR(20) NOT NULL, //表示该字段今后需要写入值得时候必须要赋值,否则将会产生错误;-> age TINYINT UNSIGNED NULL //可以不赋值,默认为NULL;->);Query OK,0 rows affected (0.14 sec)mysql> SHOW COLUMNS FROM tb2;+----------+---------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+----------+---------------------+------+-----+---------+-------+| username | varchar(20)| NO || NULL ||| age | tinyint(3) unsigned | YES || NULL ||+----------+---------------------+------+-----+---------+-------+2 rows inset(0.02 sec)mysql>mysql> INSERT tb2 VALUES(‘TOM‘,NULL); //age可以为空;Query OK,1 row affected (0.05 sec)mysql> SELECT * FROM tb2;+----------+------+| username | age |+----------+------+| TOM | NULL |+----------+------+1 row inset(0.00 sec)mysql> INSERT tb2 VALUES(NULL,26); //username不能为空;ERROR 1048(23000):Column‘username‘ cannot be nullmysql> CREATE TABLE tb3(-> id SMALLINT UNSIGNED AUTO_INCREMENT, //自动编号必须与主键组合使用;-> username VARCHAR(30) NOT NULL->);ERROR 1075(42000):Incorrect table definition; there can be only one auto column and it must be defined as a keymysql> CREATE TABLE tb3(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, //自动编号必须与主键组合使用;-> username VARCHAR(30) NOT NULL->);Query OK,0 rows affected (0.08 sec)mysql> SHOW COLUMNS FROM tb3;+----------+----------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+----------+----------------------+------+-----+---------+----------------+| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | //主键默认为NOT NULL| username | varchar(30)| NO || NULL ||+----------+----------------------+------+-----+---------+----------------+2 rows inset(0.01 sec)mysql> INSERT tb3(username) VALUES(‘Tom‘);Query OK,1 row affected (0.05 sec)mysql> INSERT tb3(username) VALUES(‘John‘);Query OK,1 row affected (0.03 sec)mysql> INSERT tb3(username) VALUES(‘Rose‘);Query OK,1 row affected (0.04 sec)mysql> INSERT tb3(username) VALUES(‘Dimitan‘);Query OK,1 row affected (0.05 sec)mysql> SELECT * FROM tb3;+----+----------+| id | username |+----+----------+|1|Tom| //自动编号,每次自增量为1;|2|John||3|Rose||4|Dimitan|+----+----------+4 rows inset(0.00 sec)mysql>mysql> CREATE TABLE tb4(-> id SMALLINT UNSIGNED PRIMARY KEY, //没有自动编号-> username VARCHAR(20) NOT NULL->);Query OK,0 rows affected (0.14 sec)mysql> SHOW COLUMNS FROM tb4;+----------+----------------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+----------+----------------------+------+-----+---------+-------+| id | smallint(5) unsigned | NO | PRI | NULL ||| username | varchar(20)| NO || NULL ||+----------+----------------------+------+-----+---------+-------+2 rows inset(0.00 sec)mysql> INSERT tb4 VALUES(4,‘Tom‘);Query OK,1 row affected (0.05 sec)mysql> INSERT tb4 VALUES(22,‘John‘);Query OK,1 row affected (0.05 sec)mysql> SELECT * FROM tb4;+----+----------+| id | username |+----+----------+|4|Tom||22|John|+----+----------+2 rows inset(0.00 sec)mysql>mysql> INSERT tb4 VALUES(22,‘Rose‘); //不能插入相同的主键;
ERROR 1062 (23000): Duplicate entry ‘22‘ for key ‘PRIMARY‘
mysql> CREATE TABLE tb5(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, //无符号、自动编号、主键约束;-> username VARCHAR(20) NOT NULL UNIQUE KEY, //唯一约束;-> age tinyint UNSIGNED->);Query OK,0 rows affected (0.08 sec)mysql> SHOW COLUMNS FROM tb5;+----------+----------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+----------+----------------------+------+-----+---------+----------------+| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment || username | varchar(20)| NO | UNI | NULL ||| age | tinyint(3) unsigned | YES || NULL ||+----------+----------------------+------+-----+---------+----------------+3 rows inset(0.01 sec)mysql> INSERT tb5(username,age) VALUES(‘Tom‘,22);Query OK,1 row affected (0.03 sec)mysql> INSERT tb5(username,age) VALUES(‘Tom‘,22);ERROR 1062(23000):Duplicate entry ‘Tom‘for key ‘username‘mysql>mysql> SELECT * FROM tb5;+----+----------+------+| id | username | age |+----+----------+------+|1|Tom|22|+----+----------+------+1 row inset(0.00 sec)mysql>mysql> CREATE TABLE tb6(-> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,-> username VARCHAR(20) NOT NULL UNIQUE KEY,-> sex ENUM(‘1‘,‘2‘,‘3‘) DEFAULT ‘3‘->);Query OK,0 rows affected (0.08 sec)mysql> SHOW COLUMNS FROM tb6; //查看数据表结构;+----------+----------------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+----------+----------------------+------+-----+---------+----------------+| id | smallint(5) unsigned | NO | PRI | NULL | auto_increment || username | varchar(20)| NO | UNI | NULL ||| sex | enum(‘1‘,‘2‘,‘3‘)| YES ||3|| //默认值3;+----------+----------------------+------+-----+---------+----------------+3 rows inset(0.03 sec)mysql> INSERT tb6(username) VALUES(‘Tom‘);Query OK,1 row affected (0.05 sec)mysql> SELECT * FROM tb6;+----+----------+------+| id | username | sex |+----+----------+------+|1|Tom|3|+----+----------+------+1 row inset(0.00 sec)mysql>原文:http://www.cnblogs.com/chj0911/p/5502281.html