MySQL-02 数据表管理
学习要点
- 数据类型
- 数据字段属性
- 数据表的类型及存储位置
- 索引
- 数据表对象管理
数据类型
数据库中的数据类型分为字段类型和值类型,定义如下:
- 在设计数据表字段的时候,字段类型定义为三大类:数值类、字符串类、日期时间类。
- 数据库中,插入数据表的实际值,大概分为四大类:数值型数据、字符串型数据、日期型数据、空值。
数值字段类型
|
类型 |
大小 |
范围(有符号) |
范围(无符号) |
用途 |
|
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 |
0,(2.225 073 858 |
双精度 |
|
DECIMAL |
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 |
依赖于M和D的值 |
依赖于M和D的值 |
小数值 |
- 显示宽度
例如:假设声明一个INT类型的字段 YEAR INT(4)
该声明指明,在year字段中的数据一般只显示4位数字的宽度。
显示宽度只用于显示,并不能限制取值范围和占用空间,YEAR会占用4个字节的存储空间,并且允许的最大值也不会是9999,而是INT整型所允许的最大值。【在数字字段属性设置为:zerofill时候才有区别】。
- 数值类型带符号,如果设置成无符号UNSIGNED,则从0开始。
- 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 |
二进制形式的极大文本数据 |
|
LONGTEXT |
0-4 294 967 |
极大文本数据 |
|
ENUM(‘value1’,’value2’,…) |
65535个成员 |
枚举 |
|
SET(‘value1’,’value2’,…) |
64个成员 |
集合 |
- 字符串中的转义序列能够被解析和识别。
- CHAR和VARCHAR的选择问题:如果数值类型可确定,并且在255字节内,优先使用CHAR类型。
- 设计表的时候,从性能方面考虑,优先设计字段定长类型。定长表的性能优于变长表。
日期时间字段类型
|
类型 |
大小 |
范围 |
格式 |
用途 |
|
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 |
YYYY-MM-DD HH:MM:SS |
混合日期和时间值 |
|
TIMESTAMP |
8 |
1970-01-01 |
YYYYMMDD |
混合日期和时间值,时间戳 |
- 每个时间和日期字段类型都有一个零值,当插入非法数值时,就用零值添加。
- 可以使用整数字段类型存储时间戳。
- MySQL时间戳(TIMESTAMP)和PHP时间戳格式是不一样的。
- 在PHP和MySQL交互中,PHP生成的时间戳一般以整数形式保存在MySQL中。
- NULL可以插入数据库中,并参与检索数据
- NULL不能参与算术运算
- 字符串和数值之间的自动转换:SELECT 1+’2’
- 字符串和日期类型根据上下文环境转换
NULL值类型
- NULL可以插入数据库中,并参与检索数据
- NULL不能参与算术运算
类型转换
- 字符串和数值之间的自动转换:SELECT 1+’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
常规索引
创建:
CREATE INDEX 索引名 ON 表(字段1[,字段2,字段3...])
删除:
DROP INDEX 索引名 ON 表名
全文索引
- InnoDB类型表不支持。
- 建表结构时候以子句的形式创建:FULLTEXT(字段名)
- 查询全文索引
SELECT 结果 FROM 表 WHERE MATCH(字段) AGAINST(待检索字符)
如何使用索引
WHERE 条件的字段中,如果有索引,则会去按照索引去查询数据。
索引示例

数据表对象管理
创建表
CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 字段类型 [属性] [索引], 字段2 字段类型 [属性] [索引], 字段3 字段类型 [属性] [索引], … 字段n 字段类型 [属性] [索引], ) [表类型] [表字符集];
修改表
- 添加新列
ALTER TABLE 表名 ADD 字段名 <建表语句> [FIRST|AFTER 列名]
- 修改字段类型
ALTER TABLE 表名 MODIFY 字段 <建表语句> ALTER TABLE 表名 CHANGE 原字段名 新字段名 <建表语句>
- 修改表名
ALTER TABLE 旧表名 RENAME AS 新表名
完成MySchool数据库和FootBallManager数据库的物理实现
MySQL-02 数据表管理的更多相关文章
- mysql 超大数据/表管理技巧
如果你对长篇大论没有兴趣,也可以直接看看结果,或许你对结果感兴趣.在实际应用中经过存储.优化可以做到在超过9千万数据中的查询响应速度控制在1到20毫秒.看上去是个不错的成绩,不过优化这条路没有终点,当 ...
- MySQL基本库表管理
基本管理指令 mysql登陆 第一种 [root@wei ~]# mysql -u root -p 第二种(带参输入) [root@wei ~]# mysql -uroot -proot 注意:每个命 ...
- MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- MySQL 删除数据表
MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...
- MySQL 创建数据表
MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (col ...
- MySQL查询数据表中数据记录(包括多表查询)
MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...
- MySQL修改数据表存储引擎的3种方法介绍
这篇文章主要介绍了MySQL修改数据表存储引擎的3种方法介绍,分别是直接修改.导出导入.创建插入3种方法, 可以参考下 MySQL作为最常用的数据库,经常遇到各种各样的问题.今天要说的就是表存储引 ...
- mysql(三) 数据表的基本操作操作
mysql(三) 数据表的基本操作操作 创建表,曾删改查,主键,外键,基本数据类型. 1. 创建表 create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGIN ...
- MySQL对数据表进行分组查询
MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...
随机推荐
- POJ3186【区间DP】
题意: 每次只能取两端,然后第 i 次取要val[ i ]*i,求一个最大值 一切都是错觉[读者省略此段] 这道题目一开始想的就是记忆化搜索,然后太天真了?好像是,一开始用一维dp[ i ]直接代表一 ...
- 解决eNSP路由器AR启动失败错误代码40,交换机正常的问题
问题描述 eNSP昨晚正常使用,今天上午出现问题:AR路由器启动失败,错误代码40.但交换机可正常启动. eNSP版本:eNSP V100R002C00B510 Setup.exe 操作系统:Wind ...
- 突然所有命令都不能用了, /usr/bin不在path里 .bashrc文件
export PATH=/usr/bin:/bin .bashrc文件中多一个空格都不行啊所有的问题都是因为复制的时候多了空格,简直无语,用了两个小时
- Python 字符串太长分行写
原文:https://blog.csdn.net/peng__dada/article/details/79138135 #第一种:三个单引号 print '''我是一个程序员 我刚开始学 ...
- Mantis优化改造(功能篇)
共分为两篇,功能篇和技术篇. 时间大约是2016年冬天. 考虑搭一个用于Bug管理和追踪的系统. 综合比较下,选择了小巧的开源工具,Mantis. 在源码基础上,做代码修改,完成了定制版的优化改造. ...
- Python入门小练习 002 批量下载网页链接中的图片
我们常常需要下载网页上很多喜欢的图片,但是面对几十甚至上百张的图片,一个一个去另存为肯定是个很差的体验. 我们可以用urllib包获取html的源码,再以正则表达式把匹配的图片链接放入一个list中, ...
- HDU - 6058 Kanade's sum
Bryce1010模板 http://acm.hdu.edu.cn/showproblem.php?pid=6058 /* 思路是:找出每个x为第k大的区间个数有多少 用pos[i]保存当前x的位置, ...
- JAVA常用知识总结(二)
JAVA中的参数传递总结先看两道笔试题: public class Test2 { public static void main (String [] args) { StringBuffer a ...
- sleep与wait的对比
链接:https://www.nowcoder.com/questionTerminal/eeff0fdb43034ee7b43838fb9de4519e来源:牛客网 sleep是线程类(Thread ...
- 深入理解spark streaming
spark streaming是建立在spark core之上的,也就说spark streaming任务最终执行还是依赖于RDD模型.在转化成最终的RDD模型执行前,spark streaming主 ...