码迷,mamicode.com
首页 > 其他好文 > 详细

第2章 数据类型与操作数据表

时间:2016-05-17 17:55:23      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

1、数据类型                                                                                           

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型:
 

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字节 极大文本数据
技术分享
 
2、数据表的操作                                                                  
数据表(或称表)是数据库最重要的组成部分之一,是其它对象的基础。
使用某个数据库使用命令:USE 数据库名称;
创建数据表:
CREATE TABLE [IF NOT EXISTS] table_name (column_name data_type, ... )    //column_name:列名
  1. mysql> SHOW DATABASES; //查看有哪些数据库;
  2. +--------------------+
  3. |Database|
  4. +--------------------+
  5. | information_schema |
  6. | mysql |
  7. | performance_schema |
  8. | t1 |
  9. | test |
  10. +--------------------+
  11. 5 rows inset(0.03 sec)
  12. mysql> USE test; //打开test数据库;
  13. Database changed
  14. mysql> SELECT DATABASE(); //查看当前打开了哪个数据库;
  15. +------------+
  16. | DATABASE()|
  17. +------------+
  18. | test |
  19. +------------+
  20. 1 row inset(0.00 sec)
  21. mysql> CREATE TABLE tb1(
  22. -> username VARCHAR(20),
  23. -> age TINYINT UNSIGNED, //年龄不存在负值,UNSIGNED表示无符号类;
  24. -> salary FLOAT(8,2) UNSIGNED
  25. ->); //创建数据表;
  26. Query OK,0 rows affected (0.20 sec)
 
查看数据表:
SHOW TABLES [FROM db_name] [LIKE ‘pattern‘ | WHERE expr]
  1. mysql> SHOW TABLES; //查看当前数据库的数据表;
  2. +----------------+
  3. |Tables_in_test|
  4. +----------------+
  5. | tb1 |
  6. +----------------+
  7. 1 row inset(0.03 sec)
  8. mysql> SHOW TABLES FROM mysql; //查看数据库mysql下的数据表;
  9. +---------------------------+
  10. |Tables_in_mysql|
  11. +---------------------------+
  12. | columns_priv |
  13. | db |
  14. | event |
  15. | func |
  16. | general_log |
  17. | help_category |
  18. | help_keyword |
  19. | help_relation |
  20. | help_topic |
  21. | host |
  22. | ndb_binlog_index |
  23. | plugin |
  24. | proc |
  25. | procs_priv |
  26. | proxies_priv |
  27. | servers |
  28. | slow_log |
  29. | tables_priv |
  30. | time_zone |
  31. | time_zone_leap_second |
  32. | time_zone_name |
  33. | time_zone_transition |
  34. | time_zone_transition_type |
  35. | user |
  36. +---------------------------+
  37. 24 rows inset(0.06 sec)
  38. mysql> SELECT DATABASE(); //查看当前使用的数据库是否发生变化?;
  39. +------------+
  40. | DATABASE()|
  41. +------------+
  42. | test | //当前打开的数据库依然还是test数据库;
  43. +------------+
  44. 1 row inset(0.00 sec)
  45. mysql> SHOW TABLES;
    +----------------+
    | Tables_in_test |
    +----------------+
    | tb1            |
    +----------------+
    1 row in set (0.00 sec)
 
查看数据表结构:
SHOW COLUMNS FROM tbl_name
  1. mysql> SHOW COLUMNS FROM tb1;
  2. +----------+---------------------+------+-----+---------+-------+
  3. |Field|Type|Null|Key|Default|Extra|
  4. +----------+---------------------+------+-----+---------+-------+
  5. | username | varchar(20)| YES || NULL ||
  6. | age | tinyint(3) unsigned | YES || NULL ||
  7. | salary | float(8,2) unsigned | YES || NULL ||
  8. +----------+---------------------+------+-----+---------+-------+
  9. 3 rows inset(0.08 sec)
 
创建好的数据表只是规定了有多少列;二维表中还有行,这里的行称为记录;
向数据表插入记录:
INSERT [INTO] tbl_name[(col_name, ...)] VALUES(val , ...)      //col_name:列名
记录查找:
SELECT expr,... FROM tbl_name
  1. mysql> INSERT tb1 VALUES(‘Tom‘,25,7863.25); //插入记录;
  2. Query OK,1 row affected (0.08 sec)
  3. mysql> INSERT tb1 VALUES(‘Tom‘,25);
  4. ERROR 1136(21S01):Column count doesn‘t match value count at row 1
  5. mysql> INSERT tb1(username,salary) VALUES(‘John‘,4500.69); //插入部分记录
  6. Query OK, 1 row affected (0.06 sec)
  7. mysql> SELECT * FROM tb1; //查看数据表中的所有字段;
  8. +----------+------+---------+
  9. | username | age | salary |
  10. +----------+------+---------+
  11. | Tom | 25 | 7863.25 |
  12. | John | NULL | 4500.69 |
  13. +----------+------+---------+
  14. 2 rows in set (0.02 sec)
 
空值与非空:
NULL,字段值可以为空
NOT NULL,字段值禁止为空
  1. mysql> CREATE TABLE tb2(
  2. -> username VARCHAR(20) NOT NULL, //表示该字段今后需要写入值得时候必须要赋值,否则将会产生错误;
  3. -> age TINYINT UNSIGNED NULL //可以不赋值,默认为NULL;
  4. ->);
  5. Query OK,0 rows affected (0.14 sec)
  6. mysql> SHOW COLUMNS FROM tb2;
  7. +----------+---------------------+------+-----+---------+-------+
  8. |Field|Type|Null|Key|Default|Extra|
  9. +----------+---------------------+------+-----+---------+-------+
  10. | username | varchar(20)| NO || NULL ||
  11. | age | tinyint(3) unsigned | YES || NULL ||
  12. +----------+---------------------+------+-----+---------+-------+
  13. 2 rows inset(0.02 sec)
  14. mysql>
  1. mysql> INSERT tb2 VALUES(‘TOM‘,NULL); //age可以为空;
  2. Query OK,1 row affected (0.05 sec)
  3. mysql> SELECT * FROM tb2;
  4. +----------+------+
  5. | username | age |
  6. +----------+------+
  7. | TOM | NULL |
  8. +----------+------+
  9. 1 row inset(0.00 sec)
  10. mysql> INSERT tb2 VALUES(NULL,26); //username不能为空;
  11. ERROR 1048(23000):Column‘username‘ cannot be null
 
AUTO_INCREMENT
自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次的增量为1
 
PRIMARY KEY
主键约束
每张数据表只能存在一个主键
主键保证记录的唯一性
主键自动为NOT NULL 
  1. mysql> CREATE TABLE tb3(
  2. -> id SMALLINT UNSIGNED AUTO_INCREMENT, //自动编号必须与主键组合使用;
  3. -> username VARCHAR(30) NOT NULL
  4. ->);
  5. ERROR 1075(42000):Incorrect table definition; there can be only one auto column and it must be defined as a key
  6. mysql> CREATE TABLE tb3(
  7. -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, //自动编号必须与主键组合使用;
  8. -> username VARCHAR(30) NOT NULL
  9. ->);
  10. Query OK,0 rows affected (0.08 sec)

  11. mysql> SHOW COLUMNS FROM tb3;
  12. +----------+----------------------+------+-----+---------+----------------+
  13. |Field|Type|Null|Key|Default|Extra|
  14. +----------+----------------------+------+-----+---------+----------------+
  15. | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment | //主键默认为NOT NULL
  16. | username | varchar(30)| NO || NULL ||
  17. +----------+----------------------+------+-----+---------+----------------+
  18. 2 rows inset(0.01 sec)
  19. mysql> INSERT tb3(username) VALUES(‘Tom‘);
  20. Query OK,1 row affected (0.05 sec)
  21. mysql> INSERT tb3(username) VALUES(‘John‘);
  22. Query OK,1 row affected (0.03 sec)
  23. mysql> INSERT tb3(username) VALUES(‘Rose‘);
  24. Query OK,1 row affected (0.04 sec)
  25. mysql> INSERT tb3(username) VALUES(‘Dimitan‘);
  26. Query OK,1 row affected (0.05 sec)
  27. mysql> SELECT * FROM tb3;
  28. +----+----------+
  29. | id | username |
  30. +----+----------+
  31. |1|Tom| //自动编号,每次自增量为1;
  32. |2|John|
  33. |3|Rose|
  34. |4|Dimitan|
  35. +----+----------+
  36. 4 rows inset(0.00 sec)
  37. mysql>
 
主键不一定需要与自动编号一同使用:
  1. mysql> CREATE TABLE tb4(
  2. -> id SMALLINT UNSIGNED PRIMARY KEY, //没有自动编号
  3. -> username VARCHAR(20) NOT NULL
  4. ->);
  5. Query OK,0 rows affected (0.14 sec)
  6. mysql> SHOW COLUMNS FROM tb4;
  7. +----------+----------------------+------+-----+---------+-------+
  8. |Field|Type|Null|Key|Default|Extra|
  9. +----------+----------------------+------+-----+---------+-------+
  10. | id | smallint(5) unsigned | NO | PRI | NULL ||
  11. | username | varchar(20)| NO || NULL ||
  12. +----------+----------------------+------+-----+---------+-------+
  13. 2 rows inset(0.00 sec)
  14. mysql> INSERT tb4 VALUES(4,‘Tom‘);
  15. Query OK,1 row affected (0.05 sec)
  16. mysql> INSERT tb4 VALUES(22,‘John‘);
  17. Query OK,1 row affected (0.05 sec)
  18. mysql> SELECT * FROM tb4;
  19. +----+----------+
  20. | id | username |
  21. +----+----------+
  22. |4|Tom|
  23. |22|John|
  24. +----+----------+
  25. 2 rows inset(0.00 sec)
  26. mysql>
  27. mysql> INSERT tb4 VALUES(22,‘Rose‘); //不能插入相同的主键;
  28. ERROR 1062 (23000): Duplicate entry ‘22‘ for key ‘PRIMARY‘
  29.  
 
UNIQUE KEY
唯一约束
唯一约束可以保证记录的唯一性
唯一约束的字段可以为空值(NULL)
每张数据表可以存在多个唯一约束
  1. mysql> CREATE TABLE tb5(
  2. -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, //无符号、自动编号、主键约束;
  3. -> username VARCHAR(20) NOT NULL UNIQUE KEY, //唯一约束;
  4. -> age tinyint UNSIGNED
  5. ->);
  6. Query OK,0 rows affected (0.08 sec)
  7. mysql> SHOW COLUMNS FROM tb5;
  8. +----------+----------------------+------+-----+---------+----------------+
  9. |Field|Type|Null|Key|Default|Extra|
  10. +----------+----------------------+------+-----+---------+----------------+
  11. | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
  12. | username | varchar(20)| NO | UNI | NULL ||
  13. | age | tinyint(3) unsigned | YES || NULL ||
  14. +----------+----------------------+------+-----+---------+----------------+
  15. 3 rows inset(0.01 sec)
  16. mysql> INSERT tb5(username,age) VALUES(‘Tom‘,22);
  17. Query OK,1 row affected (0.03 sec)
  18. mysql> INSERT tb5(username,age) VALUES(‘Tom‘,22);
  19. ERROR 1062(23000):Duplicate entry ‘Tom‘for key ‘username‘
  20. mysql>
  1. mysql> SELECT * FROM tb5;
  2. +----+----------+------+
  3. | id | username | age |
  4. +----+----------+------+
  5. |1|Tom|22|
  6. +----+----------+------+
  7. 1 row inset(0.00 sec)
  8. mysql>
 
 DEFAULT
默认值
当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
  1. mysql> CREATE TABLE tb6(
  2. -> id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  3. -> username VARCHAR(20) NOT NULL UNIQUE KEY,
  4. -> sex ENUM(‘1‘,‘2‘,‘3‘) DEFAULT ‘3‘
  5. ->);
  6. Query OK,0 rows affected (0.08 sec)
  7. mysql> SHOW COLUMNS FROM tb6; //查看数据表结构;
  8. +----------+----------------------+------+-----+---------+----------------+
  9. |Field|Type|Null|Key|Default|Extra|
  10. +----------+----------------------+------+-----+---------+----------------+
  11. | id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
  12. | username | varchar(20)| NO | UNI | NULL ||
  13. | sex | enum(‘1‘,‘2‘,‘3‘)| YES ||3|| //默认值3;
  14. +----------+----------------------+------+-----+---------+----------------+
  15. 3 rows inset(0.03 sec)
  16. mysql> INSERT tb6(username) VALUES(‘Tom‘);
  17. Query OK,1 row affected (0.05 sec)
  18. mysql> SELECT * FROM tb6;
  19. +----+----------+------+
  20. | id | username | sex |
  21. +----+----------+------+
  22. |1|Tom|3|
  23. +----+----------+------+
  24. 1 row inset(0.00 sec)
  25. mysql>
 
 
 
 
 
 





第2章 数据类型与操作数据表

标签:

原文地址:http://www.cnblogs.com/chj0911/p/5502281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!