码迷,mamicode.com
首页 > 数据库 > 详细

《Python》 数据库-->表操作

时间:2018-09-29 22:46:17      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:允许   display   lte   其他   集群   创建表   sele   连接   注意   

一、MySQL存储引擎

技术分享图片
# InnoDB

MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。

# MyISAM

MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。

# Memory

在内存中存储所有数据,应用于对非关键数据由快速查找的场景。Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失

# BLACKHOLE

黑洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。这种表可以应用于 DML 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。

# CSV

它的表真的是以逗号分隔的文本文件。CSV 表允许你以 CSV 格式导入导出数据,以相同的读和写的格式和脚本和应用交互数据。由于 CSV 表没有索引,你最好是在普通操作中将数据放在 InnoDB 表里,只有在导入或导出阶段使用一下 CSV 表。

# NDB

(又名 NDBCLUSTER)——这种集群数据引擎尤其适合于需要最高程度的正常运行时间和可用性的应用。注意:NDB 存储引擎在标准 MySql 5.6 版本里并不被支持。目前能够支持

# MySql 
集群的版本有:基于 MySql 5.1 的 MySQL Cluster NDB 7.1;基于 MySql 5.5 的 MySQL Cluster NDB 7.2;基于 MySql 5.6 的 MySQL Cluster NDB 7.3。同样基于 MySql 5.6 的 MySQL Cluster NDB 7.4 目前正处于研发阶段。

# Merge

允许 MySql DBA 或开发者将一系列相同的 MyISAM 表进行分组,并把它们作为一个对象进行引用。适用于超大规模数据场景,如数据仓库。

# Federated

提供了从多个物理机上联接不同的 MySql 服务器来创建一个逻辑数据库的能力。适用于分布式或者数据市场的场景。

# Example

这种存储引擎用以保存阐明如何开始写新的存储引擎的 MySql 源码的例子。它主要针对于有兴趣的开发人员。这种存储引擎就是一个啥事也不做的 "存根"。你可以使用这种引擎创建表,但是你无法向其保存任何数据,也无法从它们检索任何索引。
各种搜索引擎介绍
技术分享图片
并发性:某些应用程序比其他应用程序具有很多的颗粒级锁定要求(如行级锁定)。
事务支持:并非所有的应用程序都需要事务,但对的确需要事务的应用程序来说,有着定义良好的需求,如ACID兼容等。
引用完整性:通过DDL定义的外键,服务器需要强制保持关联数据库的引用完整性。
物理存储:它包括各种各样的事项,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘。
索引支持:不同的应用程序倾向于采用不同的索引策略,每种存储引擎通常有自己的编制索引方法,但某些索引方法(如B-tree索引)对几乎所有的存储引擎来说是共同的。
内存高速缓冲:与其他应用程序相比,不同的应用程序对某些内存高速缓冲策略的响应更好,因此,尽管某些内存高速缓冲对所有存储引擎来说是共同的(如用于用户连接的高速缓冲,MySQL的高速查询高速缓冲等),其他高速缓冲策略仅当使用特殊的存储引擎时才唯一定义。
性能帮助:包括针对并行操作的多I/O线程,线程并发性,数据库检查点,成批插入处理等。
其他目标特性:可能包括对地理空间操作的支持,对特定数据处理操作的安全限制等。
各种存储引擎的特性

技术分享图片

mysql支持哪些存储引擎?

  mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。

1、常用存储引擎及适用场景

InnoDB

  用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。

MyISAM

  如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。

Memory

  将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。

2、存储引擎在mysql中的使用

存储引擎相关sql语句

# 查看当前的默认存储引擎:
mysql> show variables like "default_storage_engine";

# 查询当前数据库支持的存储引擎
mysql> show engines \G;

指定存储引擎建表

‘‘‘在建表时指定‘‘‘

mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM; 
mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;

# 也可以使用alter table语句,修改一个已经存在的表的存储引擎。
mysql> alter table ai engine = innodb;
‘‘‘在配置文件中指定‘‘‘

# my.ini文件
[mysqld]
default-storage-engine=INNODB

3、MySQL的工作流程

技术分享图片

MySQL架构总共四层,在上图中以虚线作为划分。   

  首先,最上层的服务并不是MySQL独有的,大多数给予网络的客户端/服务器的工具或者服务都有类似的架构。比如:连接处理、授权认证、安全等。 
  第二层的架构包括大多数的MySQL的核心服务。包括:查询解析、分析、优化、缓存以及所有的内置函数(例如:日期、时间、数学和加密函数)。同时,所有的跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。

  第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。服务器通过API和存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明化。存储引擎API包含十几个底层函数,用于执行“开始一个事务”等操作。但存储引擎一般不会去解析SQL(InnoDB会解析外键定义,因为其本身没有实现该功能),不同存储引擎之间也不会相互通信,而只是简单的响应上层的服务器请求。

  第四层包含了文件系统,所有的表结构和数据以及用户操作的日志最终还是以文件的形式存储在硬盘上。

二、表介绍

  表就相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段

存储员工信息的文件是这样的:

id,name,age,sex,phone,job
1,Alex,83,female,13651054608,IT
2,Egon,26,male,13304320533,Tearcher
3,nezha,25,male,13332353222,IT
4,boss_jin,40,male,13332353333,IT

如果把上面这个文件改成一张表,应该是下面这个样子:

id   name   age   sex   phone   job  
1 Alex 83 female 13651054608 IT
2 Egon 26 male 13304320533 Teacher
3 nezha 25 male 13332353222 IT
4 boss_jin 40 male 13332353333 IT






id,name,age,sex,phone,job称为字段,其余的,一行内容称为一条记录 

三、创建表

# 语法:
create table 表名(字段名1 类型[(宽度) 约束条件],
                 字段名2 类型[(宽度) 约束条件],
                 字段名3 类型[(宽度) 约束条件]
                 );

# 注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的         
# 进入库
mysql> use staff;
# Database changed

# 创建表
mysql> create table staff_info (id int,
                   name varchar(20),
                   age int,
                   sex enum(female,male),
                   phone char(11),
                   job varchar(20));
# Query OK, 0 rows affected (0.46 sec)

# 查看表结构
mysql> desc staff_info;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type                  | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id    | int(11)               | YES  |     | NULL    |       |
| name  | varchar(20)           | YES  |     | NULL    |       |
| age   | int(11)               | YES  |     | NULL    |       |
| sex   | enum(female,male) | YES  |     | NULL    |       |
| phone | char(11)              | YES  |     | NULL    |       |
| job   | varchar(20)           | YES  |     | NULL    |       |
+-------+-----------------------+------+-----+---------+-------+
# 6 rows in set (0.06 sec)


# 插入数据
# 指定列名插入数据
mysql> insert into staff_info (id,name,age,sex,phone,job) values (1,Alex,38,female,
                                        13612345678,IT);
# Query OK, 1 row affected (0.13 sec)

# 插入单行数据
mysql> insert into staff_info values (1,Alex,38,female,13612345678,IT);
# Query OK, 1 row affected (0.07 sec)

# 插入多行数据
mysql> insert into staff_info values
    -> (2,Egon,26,male,13012345678,Tearcher),
    -> (3,nezha,25,male,13312345678,IT),
    -> (4,boss_jin,40,male,13212345678,IT);
# Query OK, 3 rows affected (0.35 sec)
# Records: 3  Duplicates: 0  Warnings: 0


# 查询数据
# 查看所有列的数据
mysql> select * from staff_info;
+------+----------+------+--------+-------------+----------+
| id   | name     | age  | sex    | phone       | job      |
+------+----------+------+--------+-------------+----------+
|    1 | Alex     |   38 | female | 13612345678 | IT       |
|    1 | Alex     |   38 | female | 13612345678 | IT       |
|    2 | Egon     |   26 | male   | 13012345678 | Tearcher |
|    3 | nezha    |   25 | male   | 13312345678 | IT       |
|    4 | boss_jin |   40 | male   | 13212345678 | IT       |
+------+----------+------+--------+-------------+----------+
# 5 rows in set (0.00 sec)

# 查看指定列的数据
mysql> select name,age from staff_info;
+----------+------+
| name     | age  |
+----------+------+
| Alex     |   38 |
| Alex     |   38 |
| Egon     |   26 |
| nezha    |   25 |
| boss_jin |   40 |
+----------+------+
# 5 rows in set (0.00 sec)

 四、查看表结构

查看表结构有两种方式:

describe 表名;这种方法和desc 表名;效果相同;可以查看当前的表结构

  虽然desc命令可以查看表的定义,但是其输出的信息还不够全面,为了得到更全面的表定义信息,有时候就需要查看创建表的SQL语句,使用show create table语法。除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(\G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

# describe语法查看表结构
mysql> describe staff_info;
+------------+-----------------------+------+-----+---------+-------+
| Field      | Type                  | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+---------+-------+
| id         | int(11)               | YES  |     | NULL    |       |
| staff_info | char(10)              | YES  |     | NULL    |       |
| age        | int(11)               | YES  |     | NULL    |       |
| sex        | enum(female,male) | YES  |     | NULL    |       |
| phone      | char(11)              | YES  |     | NULL    |       |
| job        | varchar(20)           | YES  |     | NULL    |       |
+------------+-----------------------+------+-----+---------+-------+
# 6 rows in set (0.02 sec)

# desc语法查看表结构
mysql> desc staff_info;
+------------+-----------------------+------+-----+---------+-------+
| Field      | Type                  | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+---------+-------+
| id         | int(11)               | YES  |     | NULL    |       |
| staff_info | char(10)              | YES  |     | NULL    |       |
| age        | int(11)               | YES  |     | NULL    |       |
| sex        | enum(female,male) | YES  |     | NULL    |       |
| phone      | char(11)              | YES  |     | NULL    |       |
| job        | varchar(20)           | YES  |     | NULL    |       |
+------------+-----------------------+------+-----+---------+-------+
# 6 rows in set (0.03 sec)

# show create table语法查看表结构
mysql> show create table staff_info \G;
*************************** 1. row ***************************
       Table: staff_info
Create Table: CREATE TABLE `staff_info` (
  `id` int(11) DEFAULT NULL,
  `staff_info` char(10) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` enum(female,male) DEFAULT NULL,
  `phone` char(11) DEFAULT NULL,
  `job` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
# 1 row in set (0.00 sec)

# ERROR:
# No query specified

 五、MySQL中的数据类型

1、数值类型

  MySQL支持所有标准SQL数值数据类型。

  这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

  关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

  MySQL支持的整数类型有TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

  对于小数的表示,MYSQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数只有decimal一种,在mysql中以字符串的形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。

  BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

类型大小范围(有符号)范围(无符号)unsigned约束用途
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 字节

float(255,30)

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

double(255,30)

(-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

double(65,30)

依赖于M和D的值 依赖于M和D的值 小数值
 

 

《Python》 数据库-->表操作

标签:允许   display   lte   其他   集群   创建表   sele   连接   注意   

原文地址:https://www.cnblogs.com/yzh2857/p/9726859.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!