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

时间: 2024-11-04 19:18:59

Linux-数据库4的相关文章

mysql for linux 数据库的安装过程

mysql for linux 数据库的安装过程 l  安装版本:mysql-advanced-5.6.12-linux-glibc2.5-x86_64.tar.gz ,此版本是绿色版本,只需要将其解压到相关目录即可. PS:此安装方法为不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件 PS:Mysql下载地址:http://pan.baidu.com/s/1eQJhoLO 1.创建mysql用户/账号 [[email protected] ~]#  groupad

Linux数据库的导入导出

Linux数据库的导入导出 1.导入数据库 mysql -u username -p test < /home/data/test.sql 说明:username是数据库用户名,test为目标数据库 2.1.导出整个数据库 mysqldump -u username -p test > /home/data/test.sql 说明:username是数据库用户名,test源数据库 2.2.导出数据库中某张表 mysqldump -u username -p test documents >

关于Windows 数据库服务器更换为Linux 数据库服务器的前提条件

该前提条件就是: 请找应用软件开发商和运维人员确认: 第一:该Window数据库服务器 上是否安装有取数(或者说抽取数据)的应用软件.如果有,需要询问取数(或者说抽取数据)的应用软件在linux有无相应版本. 第二:该Window数据库服务器的硬件接口(USB,并口等等)是否接了加密狗之类的.如果有,需要询问应用软件开发商  加密狗在linux有无驱动程序.  此加密狗一般是应用软件的加密狗,用于防止应用软件的非授权使用.一般的应用软件都有技术上的授权机制(加密狗,序列号等等),防止你非法使用,

项目部署操作linux数据库mysql出现表找不到

第一次发帖子    : 关于 部署网站的问题  其中值得注意的是:     网站用的是linux服务商mysql 而不是其他的例如 阿里云的数据库, 项目在其他的地方跑都可以,查询也可以,就是移到删除 插入 修改的时候就会报找不到表的错误,刚开始排除错误的时候一直当然的认为表存在 没错误,就走了好多弯路. 咱们想,如果真的是表存在了 .而报错表不存在是为什么 ?   最后google了一下,好多人遇到相同的问题并且给出了原因  linux中mysql 默认的情况下表明是区分大小写的,而我的sql

linux数据库常用指令

linux数据库环境搭建好之后,我们就可以创建数据库了,如果不是 很了解linux数据库环境搭建的话,可以到看看我上一篇文章linux数据库环境搭建 首先我们来创建一个数据库:使用指令sqlite3 mysql 指令1:创建表格 create table [表名] [数据类型(约束条件)]; create table mysql(id integer primary key autoincrement,name char not NULL,number char not NUll); 我们使用命

linux数据库中使用MD5加密

MD5加密算法源码下载:https://pan.baidu.com/s/1nwyN0xV 下载完成了之后解压,得到两个文件 环境搭建: 1.把md5.h文件拷贝到/usr/include/目录下 sudo cp md5.h /usr/include 2.编译生成.o文件 gcc -fPIC -o md5.o -c md5.c -lpthread -ldl 3.编译生成.so文件 gcc -shared -fPIC -o libmd5.so md5.o -lpthread -ldl 4.把生成的.

Linux数据库的创建 导入导出 以及一些基本指令

一些和数据库有关的基本指令 大神可以直接跳过,可能有的时候经常不用,但是用的时候却发现不会.. 下面来简单说下 常用的这些和数据库有关的语句 首先linux 下查看mysql相关目录var/lib/mysql --------mysql数据库data文件的存放路径 确定了运行路径,执行导入.导出mysql数据库命令一.导出数据库用mysqldump命令(注意:先cd到mysql的运行路径下,再执行一下命令):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.

讲解Linux数据库安装

学习了linux这门课之后,就开始实践过程了,这样比较记得牢固,学以致用. 有了基本的命令,就可以试着安装数据库了. 1.企业环境 需要安装VMWare ESXi虚拟机,然后再在里面新建虚拟机. 镜像vmware-viclient-all-5.1.0-1064113-5.1.exe 可以通过客户端VMware vSphere Client 6.0远程连接ESXi虚拟机,然后进行安装操作系统. 2.连接主机后进行创建新的虚拟机 在ESXi虚拟机安装完操作系统后,Linux不能粘贴解决办法 Name

kali linux 数据库分析工具简述

bbqsql SQL盲注可能很难被利用. 当可用的工具工作时,它们运行良好,但是当它们不工作时,您必须编写自定义的东西. 这是耗时且乏味的. BBQSQL可以帮助你解决这些问题. BBQSQL是一个用Python编写的SQL盲注框架. 在攻击棘手的SQL注入漏洞时非常有用. BBQSQL也是一个半自动工具,允许对那些难以触发SQL注入结果进行相当多的自定义. 该工具可与数据库无关,并且功能多样. 它还具有直观的UI,可以更轻松地设置攻击. Python geven的实现使BBQSQL运行非常快.

LINUX数据库的备份,以及远程授权登陆

mysql dump -u root -p juhui > /data/juhui.sql   //备份数据库 grant all privileges on *.* to xf111@localhost identified by 'xf11111';  //授权用户登陆 update user set host='%' where user='xf111'; flush privileges;  //加入注册 exit; //退出