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

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>

来自为知笔记(Wiz)

时间: 2024-10-14 13:02:10

第2章 数据类型与操作数据表的相关文章

MySQL学习笔记-数据类型与操作数据表

MySQL学习笔记-数据类型与操作数据表 数据类型:  1.字符型  2.整型  3.浮点型  4.日期时间型 数据表操作:  1.插入记录  2.查找记录 记录操作:  1.创建数据表  2.约束的使用 1.数据类型 [1]整型: 数据类型 存储范围 字节 TINYINT 有符号型:-128~127(-2^7~2^7 -1),无符号型0~255(0~2^8 -1) 1 SMALLINT 有符号型:-2^15~2^15 -1,无符号型0~2^16 -1 2 MEDIUMINT 有符号型:-2^2

数据类型与操作数据表

数据类型是指列.存储过程参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的数据信息. 数据表(或称表)是数据库当中最重要的组成部分之一,是其他对象的基础. USE 数据库名称:#打开数据库 SELECT DATABASE();#显示当前打开的数据库 创建数据表 CREATE TABLE; CREATE TABLE [IF NOT EXISTS] table_name( column_name date_type, ...... ); CREATE TABLE tb1( use

mysql之数据类型以及操作数据表

数据类型: 数据类型是指列.存储过程的参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型. —————————————————————————————————————————————————————————— 在mysql当中数据类型大概有以下几类: ———————————————————————————————————————————— 1.整型: ———————————————————————————————————————————————————————————

mySQL 教程 第3章 数据类型和数据完整性

第3章 数据类型和数据完整性 准备数据库 创建练习数据库,以下实验都是在这个数据库中完成. 练习1:比较各种数值型 create table tmp1 ( id INT, name VARCHAR(25), deptId decimal(5,1), salary FLOAT ); 执行desc tmp1; 显示 插入两行记录查看结果 insert into tmp1 VALUES (199,'韩立刚',3223.32,544.5); insert into tmp1 VALUES (19999,

《Python从小白到大牛》第6章 数据类型

在声明变量时会用到数据类型,在前面已经用到一些数据类型,例如整数和字符串等.在Python中所有的数据类型都是类,每一个变量都是类的"实例".没有基本数据类型的概念,所以整数.浮点和字符串也都是类. Python有6种标准数据类型:数字.字符串.列表.元组.集合和字典,列表.元组.集合和字典可以保存多项数据,他们每一个都是一种数据结构,本书中把他们统称为"数据结构"类型. 本章先介绍数字和字符串,列表.元组.集合和字典数据类型后面章节会详细介绍. 数字类型 Pyth

前端界面操作数据表(知识点描述,思维导图,示例代码,效果截图)

前端界面操作数据表,主要是是指对SQL数据表进行增删改查操作. 操作平台:C#2008+SQL 一.思维导图: 二.知识点介绍 1.利用前端界面对数据库进行操作,最关键的一点就是实现前端界面与数据库的连接. 数据库的连接可以通过设置,也可以直接用代码连接.我们建议用代码连接.代码连接的话,是指连接字符串.如下为连接字符串的示例代码:(以windows登录为例子) SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接: s

python第三章数据类型

第三章 数据类型 3.1 整型(int) 3.1.1 整型的长度 py2中有:int有取值范围,对于32位系统而言:-2^31~2^31-1 ? 对于64位系统而言:-2^63~2^63-1 ? 超出范围后,py2自动转换成long(长整型)数据. py3中有:int (int/long)只有int数据. 3.1.2 整除 py2和py3中整除是不一样. py2:整除只保留整数,小数位会舍去.若要保留小数.则在文件头加 from __future__ import division py3整除保

操作数据表中的记录——SELECT (where表达式、GROUP BY、HAVING、LIMIT)

原文链接:http://www.ifyao.com/2015/01/26/%E6%93%8D%E4%BD%9C%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%AD%E7%9A%84%E8%AE%B0%E5%BD%95-select-where%E8%A1%A8%E8%BE%BE%E5%BC%8F%E3%80%81group-by%E3%80%81having%E3%80%81limit/ 操作数据表中的记录——SELECT一.查找记录1.语法: SELECT select_e

数据结构期末复习第五章数组和广义表

数据结构期末复习第五章 数组和广义表 二维数组A[m][n]按行优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((i-1)*n+j-1)*d     设数组的基址为LOC(a00) :LOC(aij)=LOC(a00)+( i*n+j )*d    二维数组A[m][n]按列优先 寻址计算方法,每个数组元素占据d 个地址单元.     设数组的基址为LOC(a11) :LOC(aij)=LOC(a11)+((j