4sql
在 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
4sql的更多相关文章
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
- 数据库系统概论学习4-SQL 语句和关系代数(二)单表查询
4.12 字符匹配 精确查询和模糊查询 在这一节之前,我们学习的查询几乎都是精确查询,这就需要我们明确地知道某些属性的具体值.例如我们需要查询 'Wangxiaoxiao' 同学的信息,就需要在WHE ...
- MySQL基础4-SQL简单查询(单表)
1.SELECT语句 2.运算符的优先级 利用Navicat中的查询方法: 栗子1:查询所有货品信息 栗子2:查询所有货品的id,productName,salePrice 当查询错误的时候出现的界面 ...
- 数据库sql优化总结之4--SQL优化总结
一.问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中数据的增加,系统 ...
- 数据库SQL语言从入门到精通--Part 4--SQL语言中的模式、基本表、视图
数据库从入门到精通合集(超详细,学习数据库必看) 前言: 使用SQL语言时,要注意SQL语言对大小写并不敏感,一般使用大写.所有符号一定是西文标点符号(虽然是常识,但我还是提一嘴) 1.模式的定义与删 ...
- 关于ORACLE DUAL表
1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中--查看当前连接用户 SQL> select user from d ...
- c#个人记录常用方法(更新中)
1.日期毫秒转换为标准的C#日期格式 //使用时,先将秒Convert.ToInt64,返回格式2015-2-10 14:03:33 public DateTime JavaTimeToC(long ...
- 安装 SQL Server 2005 的硬件和软件要求(官方全面)
SQL Server 2005 安装要求 本主题介绍了安装 SQL Server 205 的硬件和软件要求,以及查看安装文档的说明. 硬件和软件要求(32 位和 64 位) 访问 SQL Server ...
- 云计算之openstack mitaka 配置详解(将疑难点都进行划分)
在配置openstack项目时很多人认为到处是坑,特别是新手,一旦进坑没有人指导,身体将会感觉一次次被掏空,作为菜鸟的我也感同身受,因为已经被掏空n次了. 以下也是我将整个openstack配置过程进 ...
随机推荐
- Java基础(二十)集合(2)Collection接口
1.Collection接口通常不被直接使用.但是Collection接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作,因为List接口和Set接口都实现了Collection接口,所以 ...
- 如何上传项目至GitHub
1.下载 https://gitforwindows.org/ 2.打开Git Bash 把git绑定到GitHub 3.打开GitHub登陆后 点击settings 点击SSH and GPG ke ...
- Linux杂谈:解决配置静态ip后eth0网卡启动不了的问题
今天在看imooc上的<Linux网络管理>的课程中,在做一些实验时修改了下网络配置,发现了一些问题,就是保存网络配置后eth0网卡打不开,可能也会有很多人出现这类问题,我就在这里分享下自 ...
- UNIX环境高级编程 使用方法
1.解压文件到apue.2e目录2.修改相应平台的文件,我使用的是linux,所以修改Make.defines.linux你修改的只需要这一行WKDIR=/home/your_dir/apue2e_s ...
- Apache中Cookie长度的设置 414 request-uri too large apache
起因: 今天在调试Ucenter的同步登陆和同步登出的过程中,浏览器突然出现以下错误提示: Your browser sent a request that this server could not ...
- Web for pentester_writeup之LDAP attacks篇
Web for pentester_writeup之LDAP attacks篇 LDAP attacks(LDAP 攻击) LDAP是轻量目录访问协议,英文全称是Lightweight Directo ...
- 记录一次C#的asyn和await
static void Main(string[] args) { var d = new NavDownLoader(); Task<bool> success = d.DownLoad ...
- javascript创建一个基于数组的栈结构
栈是一种遵从后进先出(LIFO)原则的有序集合.新添加或待删除的元素都保存在栈的同 一端,称作栈顶,另一端就叫栈底.在栈里,新元素都靠近栈顶,旧元素都接近栈底. 栈拥有以下方法: push(eleme ...
- C# - VS2019 通过DataGridView实现对Oracle数据表的增删改查
前言 通过VS2019建立WinFrm应用程序,搭建桌面程序后,通过封装数据库操作OracleHelper类和业务逻辑操作OracleSQL类,进而通过DataGridView实现对Oracle数据表 ...
- JS面试题-<变量和类型>-JavaScript浅拷贝与深拷贝
前言 最开始了解到深浅拷贝是因为准备面试,但那个时候因为在学校做的项目比较少需求也比较简单,所以没有在项目中遇到这类问题,所以对这个问题就属于知道这个知识点,看过相关内容,却没有自己的总结,也没有深入 ...