在 MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。

Text 类型:
CHAR(size)
VARCHAR(size)
TINYTEXT
TEXT 存放最大长度为 65,535 个字符的字符串。
BLOB 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。
MEDIUMTEXT 存放最大长度为 16,777,215 个字符的字符串。
MEDIUMBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。
LONGTEXT 存放最大长度为 4,294,967,295 个字符的字符串。
LONGBLOB 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。
ENUM(x,y,z,etc.)
SET 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

Number 类型:
TINYINT(size) -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。
SMALLINT(size) -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。
MEDIUMINT(size) -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。
INT(size) -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。
BIGINT(size) -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。
FLOAT(size,d) 4bytes 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 8bytes 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,D) size字节(D+2 , 如果size<D) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。
REAL 8 个字节
NUMERIC(M,D) M字节(D+2 , 如果M <D)

Date 类型:

DATE() 3bytes 日期。格式:YYYY-MM-DD 注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
DATETIME() 8bytes 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS ,范围'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
TIMESTAMP() 4bytes 时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。
格式:YYYY-MM-DD HH:MM:SS 支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
TIME() 3bytes 时间。格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
YEAR() 1bytes 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。

-----------------------------------------------python 链接数据库
# mysqlconnector
from mysql.connector import connect

config = {
'host': '192.168.199.139',
'port': 3306,
'user': 'root',
'password': '123456',
'database': 'jd',
'charset': 'utf8'
}

conn = connect(**config)
cs = conn.cursor()
rows_count = cs.execute('select * from goods;')
print(rows_count)
result = cs.fetchall()
print(result) # [(1, 'r510vc 15.6英寸笔记本', 5, 2, Decimal('3399.000'), 1, 0),...]
cs.close()
conn.close()

----------------------------------------------- 视图、索引
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,
而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生的变化,
从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。
视图一经定义,就可以和基本表一样被查看、被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。

定义视图
create view 视图名(列名,) as 子查询 [with check option]
create view v_student as select name, age from student where gender='男';
这时通过 show tables; 可以看到多了v_student 但实际上它不是一张表。

查询
select * from v_student;
+------+------+
| name | age |
+------+------+
| Mike | 10 |
| John | 11 |
+------+------+

更新视图
update v_student set age=12 where name='Mike';
insert into v_student values('Jack', 13); -- 影响了student表,但是视图查不到这个数据,因为没有指定gender='男'
delete from v_student where name='John';

视图的作用:
1.视图能够简化用户的操作
2.视图使用户能以多种角度看待同一数据,增加了数据查看和操作的灵活性
3.视图对重构数据库提供了一定程度的逻辑独立性
4.视图能够对机密数据提供安全保护,可以将机密数据字段不放到视图上,而只对权限低的管理员提供操作视图的权限。
5.适当的利用视图可以更清晰地表达查询

删除视图
drop view v_student;

----------------索引
索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,
直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,
MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。

例如:有一张person表,其中有2W条记录,记录着2W个人的信息。
有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。
如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。
如果有了索引,那么会将该Phone字段,通过一定的方法进行存储,好让查询该字段上的信息时,
能够快速找到对应的数据,而不必在遍历2W条数据了。
其中MySQL中的索引的存储类型有两种:BTREE、HASH。

但过多的使用索引将会造成滥用。因此索引也会有它的缺点:
1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,
如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
2.建立索引会占用磁盘空间的索引文件。

索引分:单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引。
单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。
组合索引,即一个索引包含多个列。
全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,
介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,
就能找到该字段所属的记录行,比如有"你是个大煞笔,二货 ..." 通过大煞笔,可能就可以找到该条记录。
这里说的是可能,因为全文索引的使用涉及了很多细节。
空间索引,空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种,
GEOMETRY、POINT、LINESTRING、POLYGON。
在创建空间索引时,使用SPATIAL关键字。
要求,引擎为MyISAM,创建空间索引的列,必须将其声明为NOT NULL。

创建索引
-- create index 索引名 on 表名(字段)
create index i_name on students(name);

还可以在创建表的时候直接指定:
CREATE TABLE students(
id INT NOT NULL,
name VARCHAR(16) NOT NULL,
index [indexName] (name)
);

--- 唯一索引,要求索引列的值必须唯一
create unique index indexName ON students(id)

-- 删除索引
drop index indexName on tablename;

--- 查看表的索引
show index from students \G

最新文章

  1. ibatis 和 mybatis
  2. PrototypePattrn(原型模式)
  3. haproxy 实现多域名证书https
  4. 关于Android的背景色配色小结
  5. centos7 yum安装mysql5.7并在root密码忘记的情况下重设密码
  6. 扩展 IEnumerable&lt;T&gt;,让它根据另一个集合的顺序来排列
  7. LVS四种实现模式详解
  8. [处理器、单片机]ARM
  9. &amp;amp; replace &amp;
  10. Junit单元测试中优先使用AssertThat
  11. 通过AopTestUtils对切面对象进行mock
  12. 分布式java应用
  13. 十大面试问题解惑,秒杀一切HR、技术面试
  14. JQuery&gt;&gt;&gt;get/post赋值全局变量
  15. 挖一下插件v1.3版本发布
  16. ConcurrentHashMap\HashMap put操作时key为什么要rehash
  17. SQL添加事务处理
  18. deep learning loss总结
  19. 在RES.web.Html5VersionController废弃后,如何做版本管理
  20. Linux网络编程wait()和waitpid()的讲解

热门文章

  1. LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)
  2. 设计模式C++描述----19.命令(Command)模式
  3. MacOS 系统 文件夹解析
  4. tomcat的虚拟路径的配置
  5. java常用类Time
  6. USACO 07DEC 道路建设(Building Roads)
  7. CSPS模拟 81
  8. CSPS模拟 63
  9. NOIP模拟30B 活该
  10. [网络]HTTP