学习要点

  • 数据类型
  • 数据字段属性
  • 数据表的类型及存储位置
  • 索引
  • 数据表对象管理

数据类型

数据库中的数据类型分为字段类型和值类型,定义如下:

  • 在设计数据表字段的时候,字段类型定义为三大类:数值类、字符串类、日期时间类。
  • 数据库中,插入数据表的实际值,大概分为四大类:数值型数据、字符串型数据、日期型数据、空值。

数值字段类型

类型

大小

范围(有符号)

范围(无符号)

用途

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的值

小数值

  1. 显示宽度

例如:假设声明一个INT类型的字段 YEAR INT(4)

该声明指明,在year字段中的数据一般只显示4位数字的宽度。

显示宽度只用于显示,并不能限制取值范围和占用空间,YEAR会占用4个字节的存储空间,并且允许的最大值也不会是9999,而是INT整型所允许的最大值。【在数字字段属性设置为:zerofill时候才有区别】。

  1. 数值类型带符号,如果设置成无符号UNSIGNED,则从0开始。
  2. DECIMAL存储类型为字符串,不参与四舍五入,精度高。不能直接运算。涉及财务会计计算使用DECIMAL类型。

字符串字段类型

类型

大小

用途

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字节

极大文本数据

ENUM(‘value1’,’value2’,…)

65535个成员

枚举

SET(‘value1’,’value2’,…)

64个成员

集合

  1. 字符串中的转义序列能够被解析和识别。
  2. CHAR和VARCHAR的选择问题:如果数值类型可确定,并且在255字节内,优先使用CHAR类型。
  3. 设计表的时候,从性能方面考虑,优先设计字段定长类型。定长表的性能优于变长表。

日期时间字段类型

类型

大小
(
字节)

范围

格式

用途

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

混合日期和时间值,时间戳

  1. 每个时间和日期字段类型都有一个零值,当插入非法数值时,就用零值添加。
  2. 可以使用整数字段类型存储时间戳。
  3. MySQL时间戳(TIMESTAMP)和PHP时间戳格式是不一样的。
  4. 在PHP和MySQL交互中,PHP生成的时间戳一般以整数形式保存在MySQL中。
  5. NULL可以插入数据库中,并参与检索数据
  6. NULL不能参与算术运算
  7. 字符串和数值之间的自动转换:SELECT  1+’2’
  8. 字符串和日期类型根据上下文环境转换

NULL值类型

  1. NULL可以插入数据库中,并参与检索数据
  2. NULL不能参与算术运算

类型转换

  1. 字符串和数值之间的自动转换:SELECT  1+’2’
  2. 字符串和日期类型根据上下文环境转换

数据字段属性

属性名

作用

UNSIGNED

设置无符号数值类型。从0开始。

ZEROFILL

设置了显示宽度:int(6),当不足6位数的时候高位0填充。

AUTO_INCREMENT

自增字段。插入方式:null、0,或者留空。也可以指定值。

NULL

空值,默认。

NOT NULL

非空。

DEFALUT

默认值。

综合示例:

自增字段插入值方式示例:

数据表的类型(存储引擎)及存储位置

查询MySQL数据库支持的表类型:mysql>SHOW  ENGINES  \G

MyISAM数据表类型:采用表格锁定机制来优化多个并发的读/写操作。更新机制浪费存储空间。读取数据速度快。

InnoDB数据表类型:在MySQL5.6.17版本中,默认创建InnoDB数据表类型。

MyISAM和InnoDB对比

表类型功能对比

MyISAM表

InnoDB表

事务处理

不支持

支持

数据行锁定

不支持,只支持表锁定

支持

外键约束

不支持

支持

表空间大小

相对小

相对大,最大是ISAM2倍

全文索引

支持

不支持

COUNT问题

执行COUNT(*)查询速度慢

查询数据表引擎类型

或者

创建InnoDB类型表示例:

创建MyISAM类型表示例:

数据表的存储位置

WAMP数据表的存储位置:

D:\wamp\bin\mysql\mysql5.6.17\data\数据库名

mysql中数据表存储位置

D:\mysql\data\数据库名

.frm文件:表结构定义文件。

.idb文件:INNODB类型表数据文件。

.MYD文件:MYISAM类型表数据文件

.MYI文件:索引文件。

索引

主键索引

每张表只能有一个主键索引。创建方式:

或者创建表结构时候子句的形式:

唯一索引

唯一索引和主键索引的区别:唯一索引允许出现一次NULL

常规索引

创建:

  1. CREATE INDEX 索引名 ON 表(字段1[,字段2,字段3...])

  

删除:

  1. DROP INDEX 索引名 ON 表名

  

全文索引

  • InnoDB类型表不支持。
  • 建表结构时候以子句的形式创建:FULLTEXT(字段名)
  • 查询全文索引
  1. SELECT 结果 FROM WHERE MATCH(字段) AGAINST(待检索字符)

  

如何使用索引

WHERE 条件的字段中,如果有索引,则会去按照索引去查询数据。

索引示例

数据表对象管理

创建表

  1. CREATE TABLE [IF NOT EXISTS] 表名 (
  2.  
  3.   字段1 字段类型 [属性] [索引],
  4.  
  5.   字段2 字段类型 [属性] [索引],
  6.  
  7.   字段3 字段类型 [属性] [索引],
  8.  
  9.   
  10.  
  11.   字段n 字段类型 [属性] [索引],
  12.  
  13. ) [表类型] [表字符集];

  

修改表

  • 添加新列
  1. ALTER TABLE 表名 ADD 字段名 <建表语句> [FIRST|AFTER 列名]

  

  • 修改字段类型
  1. ALTER TABLE 表名 MODIFY 字段 <建表语句>
  2.  
  3. ALTER TABLE 表名 CHANGE 原字段名 新字段名 <建表语句>

  

  • 修改表名
  1. ALTER TABLE 旧表名 RENAME AS 新表名

  

完成MySchool数据库和FootBallManager数据库的物理实现

MySQL-02 数据表管理的更多相关文章

  1. mysql 超大数据/表管理技巧

    如果你对长篇大论没有兴趣,也可以直接看看结果,或许你对结果感兴趣.在实际应用中经过存储.优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒.看上去是个不错的成绩,不过优化这条路没有终点,当 ...

  2. MySQL基本库表管理

    基本管理指令 mysql登陆 第一种 [root@wei ~]# mysql -u root -p 第二种(带参输入) [root@wei ~]# mysql -uroot -proot 注意:每个命 ...

  3. MySQL为数据表的指定字段插入数据

    username not null 没有默认值/有默认值   insert不插入username字段 均不报错 2014年07月23日21:05    百科369 MySQL为数据表的指定字段插入数据 ...

  4. MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  5. MySQL 创建数据表

    MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...

  6. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  7. MySQL修改数据表存储引擎的3种方法介绍

    这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下   MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...

  8. mysql(三) 数据表的基本操作操作

    mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...

  9. MySQL对数据表进行分组查询

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

随机推荐

  1. 019--python内置函数

    一.内置高阶函数 map函数:接收两个数据 函数和序列,map()将函数调用'映射'到序列身上,并返回一个含有所有返回值的一个列表 num1 = [1,2,3,4,5] num2 = [5,4,3,2 ...

  2. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 24. Logging

    常用的诊断中间件: UseDeveloperExceptionPage UseStatusCodePages:返回 400~600 的状态码 UseExceptionHandler 自定义异常的处理器 ...

  3. 常用js方法集合

    var func={ //对象转jsonstring getJsonStr: function(jsonObj) { var temp = []; for (var key in jsonObj) { ...

  4. [Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制

    一.前言 前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的.那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由 ...

  5. Codeforces Round #324 (Div. 2)C. Marina and Vasya

    A的万般无奈...后来跑了大牛的这份代码发现, 题意是求一个序列与给定的两个序列有t个不同. 只要保证...对应位置就行了.. 所以处理起来非常方便.............. 可是没有感觉是对应位置 ...

  6. Python 基础知识(5)

    1:引用 当我们把一个变量给另一个变量赋值的时候,不是把A变量中的值给B一份,而是把A变量中的地址给了B,这就是引用.任何牵扯到等号赋值的地方,统统都是引用. a = 100 b = a id(a) ...

  7. 修改static控件背景颜色和文字颜色

    当 static 控件或具有 ES_READONLY 风格的 edit 控件被绘制时,会向父窗口发送 WM_CTLCOLORSTATIC 消息.如果我们在窗口过程中处理该消息,就必须返回一个画刷句柄, ...

  8. ADB over Wi-Fi

    ADB over Wi-Fi 1.root $adb root 2.设置tcp端口并重启tcpip服务 $adb shell setprop persist.adb.tcp.port &&am ...

  9. LookupError: unknown encoding: idna 的处理方法

    写了一个脚本,想把它打包成exe文件,在python编译器中运行正常,但是打包成.exe文件运行报错 LookupError: unknown encoding: idna 找遍资料终于找到了解决方法 ...

  10. 504 Base 7 七进制数

    给定一个整数,将其转化为7进制,并以字符串形式输出.示例 1:输入: 100输出: "202" 示例 2:输入: -7输出: "-10"注意: 输入范围是 [- ...