一、索引

索引,是数据库中专门用于帮助用户快速查询数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取即可。

分类:

  • 普通索引
  • 唯一索引
  • 全文索引
  • 组合索引
  • 主键索引

1、普通索引

普通索引仅有一个功能:加速查询

#创建表时创建索引
CREATE TABLE user (
id INT,
username VARCHAR(30) ,
password VARCHAR(50),
INDEX index_username (username)
    );

注意:创建索引时如果是blob 和 text 类型,必须指定length。

2、唯一索引

唯一索引有两个功能:加速查询 和 唯一约束(可含null)

#创建表时创建唯一索引
CREATE TABLE user (
id INT,
username VARCHAR(30) ,
password VARCHAR(50),
UNIQUE index_username (username)
  ); #在存在的表上创建唯一索引
create unique index 索引名 on 表名(列名) #删除存在表上的索引
drop unique index 索引名 on 表名

3、全文索引

全文索引(FULLTEXT)仅可以适用于MyISAM引擎的数据表;作用于CHAR、VARCHAR、TEXT数据类型的列。

#创建表时创建唯一索引
CREATE TABLE user (
id INT,
username VARCHAR(30) ,
password VARCHAR(50),
FULLTEXT index_username (username)
  );

4、组合索引

将几个列作为一条索引进行检索,使用最左匹配原则,比如频繁的使用多列进行查询,where username='bright' and password='123456'

#创建组合索引
CREATE TABLE user (
id INT,
username VARCHAR(30) ,
password VARCHAR(50),
INDEX index_info (username, password)
  );

5、主键索引

主键有两个功能:加速查询 和 唯一约束(不可含null),当一张表把某个列设为主键的时候,则该列就是主键索引。

#创建主键索引
CREATE TABLE user (
nid int not null auto_increment primary key, #主键索引
username VARCHAR(30) ,
password VARCHAR(50),
INDEX index_info (username, password)
  ); #创建主键
alter table 表名 add primary key(列名); #删除主键
alter table 表名 drop primary key;
 

6、索引的添加与删除

(1)添加索引

#在已存在的表上创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
ON 表名 (字段名[(长度)] [ASC |DESC]) ; #如:
CREEATE INDEX index_name ON table_name(column_name)

(2)删除索引

#删除存在表上的索引
DROP INDEX 索引名 ON 表名 #如:
drop index_name on table_name;

(3)查看索引

#查看存在表上的索引
SHOW INDEX FROM 表名 #如:
show index from table_name;

二、事务

1、概念

事务是一个最小的不可再分的工作单元或者一组原子性的sql命令,一旦在执行命令过程中出现错误就会回滚到最初状态,从而保证数据的完整性。事务必须满足四个条件:

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失

2、事务相关命令

--开启事务:Start Transaction
--事务结束:End Transaction
--提交事务:Commit Transaction
--回滚事务:Rollback Transaction

3、实例

  • 事务操作成功
mysql> start transaction; --开始事务
Query OK, 0 rows affected (0.00 sec) mysql> insert into class(caption) values('四年一班');
Query OK, 1 row affected (0.00 sec) mysql> commit; --提交,数据库内部已经改变
Query OK, 0 rows affected (0.00 sec) mysql> select * from class;
+-----+----------+
| cid | caption |
+-----+----------+
| 1 | 三年二班 |
| 2 | 一年三班 |
| 3 | 三年一班 |
| 5 | 四年一班 |
+-----+----------+
4 rows in set (0.00 sec)
  • 事务操作失败
mysql> start transaction; --开启事务
Query OK, 0 rows affected (0.00 sec) mysql> insert into class(caption) values('四年一班');
Query OK, 1 row affected (0.00 sec) mysql> select * from class;
+-----+----------+
| cid | caption |
+-----+----------+
| 1 | 三年二班 |
| 2 | 一年三班 |
| 3 | 三年一班 |
| 4 | 四年一班 |
+-----+----------+
4 rows in set (0.00 sec) mysql> rollback; --回滚,事务操作失败
Query OK, 0 rows affected (0.00 sec) mysql> select * from class;
+-----+----------+
| cid | caption |
+-----+----------+
| 1 | 三年二班 |
| 2 | 一年三班 |
| 3 | 三年一班 |
+-----+----------+
3 rows in set (0.00 sec)

三、视图

视图可以理解为存储的查询语句,当调用的时候,产生结果集,视图充当的是虚拟表的角色(不是真实存在的)。

1、创建视图

#格式:CREATE VIEW 视图名称 AS  SQL语句

CREATE VIEW v AS 

SELECT * FROM userinfo;

2、删除视图

#格式:DROP VIEW 视图名称

DROP VIEW v

3、修改视图

格式:ALTER VIEW 视图名称 AS SQL语句

ALTER VIEW v AS
SELET username,password FROM userinfo;

4、使用视图

由于视图是虚拟表,因此无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

SELECT * FROM v;

四、存储过程

存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。

1、创建存储过程

mysql> delimiter $$  --将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> create procedure p2()
-> select * from usertabl
-> end $$
Query OK, 0 rows affected (0.0) mysql> delimiter ; --#将语句的结束符号恢复为分号

2、执行存储过程

mysql> call p2();

3、删除存储过程

mysql> drop procedure p2;

参考:https://www.cnblogs.com/wupeiqi/articles/5713323.html

mysql数据库进阶的更多相关文章

  1. Mysql数据库进阶之(分表分库,主从分离)

    前言:数据库的优化是一个程序员的分水岭,作为小白我也得去提前学习这方面的数据的 (一)  三范式和逆范式 听起范式这个迟非常专业我来举个简单的栗子: 第一范式就是:  把能够关联的每条数据都拆分成一个 ...

  2. Python操作Mysql数据库进阶篇——查询操作详解(一)

    前面我们已经介绍了在Python3.x中如何连接一个Mysql数据库,以及怎么样对这个数据库创建一个表,增删改查表里的数据.想必大家对Mysql数据库和简单的sql语句有了一定的了解,其实sql语句博 ...

  3. mysql数据库-进阶-长期维护

    ###############    视图    ############## """ 1.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有 ...

  4. 数据库学习笔记(二)MySQL数据库进阶

    MySQL 进阶 关于连表 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 #上下连表示例: select sid, ...

  5. mysql数据库进阶篇

    一.连表操作 1)为何需要连表操作 .把所有数据都存放于一张表的弊端 .表的组织结构复杂不清晰 .浪费空间 .扩展性极差 2)表设计,分析表与表之间的关系 寻找表与表之间的关系的套路 举例:emp表 ...

  6. MySQL第二讲 一一一一 MySQL语句进阶

    通过命令来备份数据库: 通过数据库软件里面的,mysqldump模块来操作,如下: mysqldump -u root db1 > db1.sql -p; //没有-d就是备份的时候:数据表结构 ...

  7. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  8. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  9. Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁

    Python进阶----pymysql的安装与使用,mysql数据库的备份和恢复,mysql的事务和锁 一丶安装 pip install PyMySQL 二丶pymysql连接数据库 ### 语法: ...

随机推荐

  1. OC中保存自定义类型对象的持久化方法

    OC中如果要将自定义类型的对象保存到文件中,必须进行以下三个条件: 想要把存放自定义类型的数组进行 持久化(就是将内存中的临时数据以文件<数据库等>的形式写到磁盘上)必须满足: 1. 自定 ...

  2. 项目部署到tomcat,浏览器能够访问,手机不能访问。

    问题:有这样一个问题,把项目部署到tomcat上,浏览器能够访问,但是手机不能访问. 解决:在 tomcat中找到conf文件夹,然后找到web.xml

  3. python全栈开发,Day40(进程间通信(队列和管道),进程间的数据共享Manager,进程池Pool)

    昨日内容回顾 进程 multiprocess Process —— 进程 在python中创建一个进程的模块 start daemon 守护进程 join 等待子进程执行结束 锁 Lock acqui ...

  4. bzoj2460题解

    [题意分析] 给你一个可重复数集,要求从中选取一个关于异或空间线性无关的子集,使子集的权值和最大. [解题思路] 定义:一个有序对(S,I)称为拟阵当且仅当该有序对满足以下性质: 1.有穷性:S是一个 ...

  5. day15—jQuery UI之widgets插件

    转行学开发,代码100天——2018-03-31 今天学习了jQuery UI的widgets插件,主要包括accordion插件 accordion插件 该插件表示折叠面板效果,点击头部展开/折叠被 ...

  6. Oracle-数据表对象

    表一般指的是一个关系表,也可以生成对象表以及临时表.齐总,对象表是通过用户定义的数据类型生成的,临时表用于存储专用于某个事务或会话的临时数据 字符类型: 定长:char (1-2000字节) 变长:v ...

  7. Vagrant 手册之 box - 概述

    原文地址 box 是 Vagrant 环境中使用的包格式.box 可以在 Vagrant 支持的所有平台上被任何人使用,从而提供相同的工作环境. vagrant box 工具提供了管理 box 的所有 ...

  8. SVG绘制随机的柱形图+php

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Survey Results for Rebecca Murpheys Learning JavaScript Survey

    时间 2016-01-27 05:40:46  Raymond Camden's Blog 原文  http://www.raymondcamden.com/2016/01/25/survey-res ...

  10. deepin下安装配置git

    https://blog.csdn.net/menglinjie/article/details/77145537 1.安装gitsudo apt-get install git12.配置用户名和邮箱 ...