Linux-数据库4
存储引擎
什么是存储引擎?
mysql中建的库是文件夹,建的表是文件。文件有不同的类型,数据库中的表也有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。
存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)
mysql支持的存储引擎
- show engines\G; #查看所有支持的存储引擎
- show variables like '%storage_engine%'; #查看正在使用的存储引擎
mysql常用存储引擎
1、MyISAM存储引擎
由于该存储引擎不支持事务、也不支持外键,所以访问速度较快。因此当对事务完整性没有要求并以访问为主的应用适合使用该存储引擎。
2、InnoDB存储引擎(主要使用也是默认)
由于该存储引擎在事务上具有优势,即支持具有提交、回滚及崩溃恢复能力等事务特性,所以比MyISAM存储引擎占用更多的磁盘空间。因此当需要频繁的更新、删除操作,同时还对事务的完整性要求较高,需要实现并发控制,建议选择。
3、MEMORY
MEMORY存储引擎存储数据的位置是内存,因此访问速度最快,但是安全上没有保障。适合于需要快速的访问或临时表。在重启mysql或者重启机器后,表内数据清空。
4、BLACKHOLE
黑洞存储引擎,可以应用于主备复制中的分发主库。往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录
指定存储引擎
1、建表时候指定
- create table innodb_t1 (id int,name char) engine=innodb;
- create table innodb_t2 (id int) engine=innodb;
2、配置文件指定
- [mysqld]
- default-storage-engine=INNODB
- innodb_file_per_table=1
3、查看
进入库文件夹、查看文件后缀名,不同的存储引擎的文件后缀不同,黑洞和内存引擎只有表结构文件,没有数据文件
联合主键
主键的特点:
1、每张表只能有一个主键
2、每张表不一定只有一个非空且唯一的字段
3、如果表中只有一个非空且唯一字段,那它就是主键,如果表中不只有一个非空且唯一字段,那第一个非空切唯一的字段就是主键
联合主键:
联合主键是由多个字段组成,如下student_id 和 teacher_id 共同组成表的主键,这样就可以在student表和teacher表在多对多的关系下,在此表中,既不会存在完全重复的记录,造成无用的重复数据,也不会使得重要数据为空,导致数据无效。(注:示例为多对多的关系表,并未设置外键约束)
- CREATE TABLE student_to_teacher (
- id int NOT NULL UNIQUE AUTO_INCREMENT,
- student_id int,
- teacher_id int,
- PRIMARY KEY (student_id, teacher_id)
- );
- DESC student_to_teacher;
- +------------+---------+------+-----+---------+----------------+
- | Field | Type | Null | Key | Default | Extra |
- +------------+---------+------+-----+---------+----------------+
- | id | int(11) | NO | UNI | NULL | auto_increment |
- | student_id | int(11) | NO | PRI | NULL | |
- | teacher_id | int(11) | NO | PRI | NULL | |
- +------------+---------+------+-----+---------+----------------+
- 3 rows in set (0.05 sec)
索引
索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
索引优化应该是对查询性能优化最有效的手段了。
索引能够轻易将查询性能提高好几个数量级。
索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
索引特点:创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高!
创建索引时候会用到一系列算法,如hash、二叉树、红黑树等
创建索引
INDEX和KEY都是索引
语法:
- CREATE TABLE 表名 (
- 字段名1 数据类型 [完整性约束条件…],
- 字段名2 数据类型 [完整性约束条件…],
- [UNIQUE] INDEX | KEY
- [索引名] (字段名[(长度)] [ASC |DESC])
- );
示例:
- --创建普通索引示例:
- CREATE TABLE emp1 (
- id INT,
- name VARCHAR(30) ,
- resume VARCHAR(50),
- INDEX index_emp_name (name)
- --KEY index_dept_name (dept_name)
- );
- --创建唯一索引示例:
- CREATE TABLE emp2 (
- id INT,
- name VARCHAR(30) ,
- bank_num CHAR(18) UNIQUE ,
- resume VARCHAR(50),
- UNIQUE INDEX index_emp_name (name)
- );
- --创建全文索引示例:
- CREATE TABLE emp3 (
- id INT,
- name VARCHAR(30) ,
- resume VARCHAR(50),
- FULLTEXT INDEX index_resume (resume)
- );
- --创建多列索引示例:
- CREATE TABLE emp4 (
- id INT,
- name VARCHAR(30) ,
- resume VARCHAR(50),
- INDEX index_name_resume (name,resume)
- );
练习:
- --创建表
- create table Indexdb.t1(id int,name varchar(20));
- --存储过程
- delimiter $$
- create procedure autoinsert()
- BEGIN
- declare i int default 1;
- while(i<500000)do
- insert into Indexdb.t1 values(i,'yuan');
- set i=i+1;
- end while;
- END$$
- delimiter ;
- --调用函数
- call autoinsert();
- -- 花费时间比较:
- -- 创建索引前
- select * from Indexdb.t1 where id=300000;--0.32s
- -- 添加索引
- create index index_id on Indexdb.t1(id);
- -- 创建索引后
- select * from Indexdb.t1 where id=300000;--0.00s
Linux-数据库4的更多相关文章
- mysql for linux 数据库的安装过程
mysql for linux 数据库的安装过程 l 安装版本:mysql-advanced-5.6.12-linux-glibc2.5-x86_64.tar.gz ,此版本是绿色版本,只需要将其解 ...
- 使用c语言实现linux数据库的操作
前言:上一篇讲解了linux下使用命令行操作数据库,这篇继续讲解怎么使用c语言实现linux数据库的操作. 使用c语言实现环境搭建:既然我们要使用c语言实现linux数据库操作,那么首先我们得先把数据 ...
- linux数据库备份
linux数据库备份 服务端启用二进制日志 如果日志没有启开,必须启用binlog,要重启mysql,首先,关闭mysql,打开/etc/my.cnf,加入以下几行: [mysqld] log-bin ...
- DELPHI10.2的LINUX数据库开发环境配置
DELPHI10.2的LINUX数据库开发环境配置 ubuntu使用firedac访问mysql1.安装mysql-client包sudo apt-get install mysql-client m ...
- Linux数据库的导入导出
Linux数据库的导入导出 1.导入数据库 mysql -u username -p test < /home/data/test.sql 说明:username是数据库用户名,test为目标数 ...
- linux数据库常用指令
linux数据库环境搭建好之后,我们就可以创建数据库了,如果不是 很了解linux数据库环境搭建的话,可以到看看我上一篇文章linux数据库环境搭建 首先我们来创建一个数据库:使用指令sqlite3 ...
- linux数据库
sudo apt-get install mysql-server ---------Centos7下安装mysql 开始-------------下载mysql的repo源# yum install ...
- 讲解Linux数据库安装
学习了linux这门课之后,就开始实践过程了,这样比较记得牢固,学以致用. 有了基本的命令,就可以试着安装数据库了. 企业环境 需要安装VMWare ESXi虚拟机,然后再在里面新建虚拟机. 镜像vm ...
- kali linux 数据库分析工具简述
bbqsql SQL盲注可能很难被利用. 当可用的工具工作时,它们运行良好,但是当它们不工作时,您必须编写自定义的东西. 这是耗时且乏味的. BBQSQL可以帮助你解决这些问题. BBQSQL是一个用 ...
- Linux数据库的创建 导入导出 以及一些基本指令
首先linux 下查看mysql相关目录 查看 mysql 的安装路径 执行查询 SQL mysql>show variables like '%dir%'; datadir 就是数据路径 确定 ...
随机推荐
- LintCode 387: Smallest Difference
LintCode 387: Smallest Difference 题目描述 给定两个整数数组(第一个是数组A,第二个是数组B),在数组A中取A[i],数组B中取B[j],A[i]和B[j]两者的差越 ...
- 20155227 2016-2017-2 《Java程序设计》第四周学习总结
20155227 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 继承 继承 继承是Java程序设计语言面向对象的又一重要体现,允许子类继承父类,避免重复的行 ...
- 产品排序 product
评测传送门 [问题描述] 你是一个公司的员工,你会按时间顺序受到一些产品的订单,你需要用一个栈来改变这些订单的顺序(每个产品都必须入栈和出栈一次). 按初始顺序,每次可以将一个产品入栈,或将栈顶产品弹 ...
- transform动画效果
transform动画效果 transform :移动,旋转.倾斜.缩放. transform:translate(0,300px); x代表的是水平的偏移距离,y代表垂直的. t ...
- 表单验证插件-validator.js 使用教程
做网站的时候,常常会涉及到各种表单验证.选择一款好用的表单验证插件,会降低表单验证开发的难度.在开发中,我目前使用的表单验证插件是:validator.js. validator.js 是一款轻量的表 ...
- python 之datetime库学习
# -*- coding:utf-8 -*- import refrom datetime import datetime, timezone, timedelta def rec_time(): ...
- linux安装python3(已有python2.x情况下)
参考:https://www.cnblogs.com/Guido-admirers/p/6259410.html 1.官网下载python3 cd /home/download wget https: ...
- 使用os模块实现展示目录下的文件和文件夹
Windows 10家庭中文版,Python 3.6.4 今天学习了os模块,下面是使用它开发的一个展示目录下的文件和文件夹的函数,代码如下: import os # deep大于等于1的整数,默认为 ...
- python基础-类的继承
继承:承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”.“父类. 继承的过程,就是从一般到特殊的过程.要实现继承,可以通过“继承”(Inheritance)和“组合”(Compositio ...
- MongoDB-MongoDB重装系统后恢复
重装系统后,把原mongoDB安装目录和原mongoDB的data目录拷贝到新硬盘的D盘上. 恢复的方法如下. 1.D:\Mongodb里放着mongod.cfg和data C:\Users\Admi ...