1: 视图
什么是视图
    视图是一个虚拟表, 它的内容来源于查询的实表, 本身没有真正的数据;

视图的作用
    对于复杂的查询时,每次查询时都需要编写一些重复的查询代码让编写sql的效率低下, 为了解决这个问题,就是提供视图

创建视图
    语法: create view view_name as select .....
    例: create view v_stu as select stu_no, stu_name, stu_sex, stu_age from student;

查询视图
    例: select * from v_stu;
    例: select * from (select stu_no, stu_name, stu_sex, stu_age from student) as v_stu;

修改视图
    方式一:
        语法: create or replace view view_name as select......
        例: create or replace view v_stu as select stu_no, stu_name, stu_sex from student;   -- or replace 就是替换的意思
    方式二:
        语法: alter view view_name(column_list) as select column_list from;
        例: alter view v_stu(stu_no, stu_name) as select stu_no, stu_name from student;

查看视图
    方式一: show table status;   --查询当前数据库下的表的状态
            show table status where comment = 'view';      --查看视图
    方式二: select table_schema, table_name, view_definition from `information_schema`.views;

删除视图
    语法: drop view [if exists] view_name
    例: drop view if exists v_stu;

例: insert into v_stu values(11, '吕布', '男', '18');
例: update v_stu set stu_name = '小布' where stu_name = '吕布';
例: delete from v_stu where stu_name = '小布';
ps: 对视图的数据操作一样也会影响到实表, 虽然视图支持增,删,改的操作,但是视图主要还是为了查询
*************************************************************************************************************************************

2: 事务
    drop table if exists student;
    create table student(
        stu_name varchar(30) comment '学生姓名',
        stu_money decimal(10,2) comment '学生money'
    );
    insert into student values('小明', 10000);

    drop table if exists teacher;
    create table teacher(
        teacher_name varchar(30) comment '教师姓名',
        teacher_money decimal(10,2) comment '教师money'
    );    
    insert into teacher values('张飞', 5000);

    需求: 小明同学交出3000元给张飞老师;

        起点
        第一步: 小明同学的金钱减去3000元
            update student set stu_money = stu_money - 3000 where stu_name = '小明';
        第二步: 张飞老师的金钱加上3000元
            update teacher set teacher_money = teacher_money + 3000 where teacher_name = '张飞';
        结束

        一组sql就是一个操作单元, 里边的sql则是要完成一个业务
        如果整个单元没有错误,则这个操作是成功的
        如果里边有任何一个sql操作失败, 则整个操作都是没有用的,这个时候我们应该要把数据回到操作前的状态,这样的特性,就是事务

    SQL执行分为两个阶段
        1: 执行阶段
        2: 把执行的结果提交数据库(默认是自提交的, 就是执行完后会把执行的结果自动的提交);

        例: show variables like 'autocommit';     查看mysql自动提交的状态
        例: set autocommit = 0;                   关闭自动提交
        例: set autocommit = 1;                   开启自动提交
        例: rollback;                             数据回滚
        例: commit;                               提交
        例: start transaction;          --关闭自动提交, 如果事务结束了,不管是成功还是失败,那都会把自动提交回到开始的状态

    事务的特点
        1: 原子性
            事务是一个不可分割工作单元,要事务里的操作要么是全部发生,要么是全部不发生
        2: 一致性
            事务前后数据完整性要保持一致(在开始和结束之间,只受这一个事务的影响)
            在第一个窗口执行
                set autocommit = 0;
                update student set stu_money = stu_money - 3000 where stu_name = '小明';
            在第二个窗口执行
                update student set stu_money = stu_money - 3000 where stu_name = '小明';
        3: 隔离性
            多个用户在并发访问数据时, 一个用户的事务不能被其的事务所有干扰, 多个事务间的数据要相互隔离
            在第一个窗口执行
                start transaction;   
                update student set stu_money = stu_money - 3000 where stu_name = '小明';
                select * from student;
                select * from teacher;
            在第二个窗口执行
                start transaction;   
                update teacher set teacher_money = teacher_money + 3000 where teacher_name = '张飞';
                select * from student;
                select * from teacher;
        4: 持久性
            事务一旦提交,那么它对数据的修改就是永久的

1: 用户权限管理
    
    登陆语法: mysql -h(ip) -u(user) -p(password) -P(端口号)
    例: mysql -hlocalhost -uroot -p123 -P3306
    例: mysql -hlocalhost -uroot -p -P3306

    mysql其实是一个多用户的数据库系统; 按权限可以把用户分为:
    root用户: 超级管理员
    普通用户: 由root用户创建的用户

    在mysql这个默认的数据库里的user表存储着用户的信息;
    select host, user, password from user;

    创建用户
        语法: create user 用户名@'host' identified by 'password';
        例: create user mys1@'172.16.70.101' identified by '456';
        例: create user mys1@'%' identified by '456';

    用户权限可以为两个部分
        1: 是否有连接的权限
        2: 是否有操作的权限如: create, drop, select, delete, update, insert等等
    用户授权
        语法: grant 权限1, 权限2... on 数据库名.表名 to 用户名@ip地址 identified by 'password';   --这条语句同时也可以用来创建用户或者修改用户
        例: grant create on *.* to mys1@'%' identified by '456';
        例: grant select on test.student to mys1@'%' identified by '456';
        例: flush privileges;
        例: grant all privileges on *.* to mys1@'%' identified by '123';

    删除用户权限
        语法: revoke 权限1, 权限2... on 数据库名.表名 from 用户名@'ip地址';
        例: revoke create on *.* from mys1@'%';

    查看用户权限
        use mysql;
        select user, host, create_priv, select_priv from user;   --查看用户是否有创建和查询的权限

    删除用户
        语法: drop user 用户名@'ip';
        drop user mys1@'172.16.70.101';

2: 索引
    索引是什么?
        索引是一种把数据库中单列或者多列的值进行排列的结构,是帮助MySQL高效查询数据的数据结构
    索引作用
        提高数据的查询速度
    索引特点
        一个数据库的对象在数据库中用来加速对表的查询, 可以使用快速的路径访问数据, 这会减少磁盘IO
        与表独立存放,但是又不能独立存在,它必须属于某个表,当删除表时,表上的索引也会自动删除。由数据库自动维护
    1: 普通索引
        语法: create index 索引名 on 表名(字段1,字段2...);
              alter table 表名 add/modify index 索引名(字段1, 字段2...);
        例: create index teacher_name_index on teacher(teacher_name);
    2: 唯一性索引
        语法: create unique index 索引 on 表名(字段);
        例: create unique index teacher_money_index on teacher(teacher_money);
    3: 主键索引
        主键索引就是唯一索引的特殊的形式,创建主健的同时也是加了一个主键索引
    4: 全文索引(需要MyISAM引擎)
        语法: create fulltext index 索引名 on 表名(字段);
              alter table 表名 add fulltext 索引名(字段);

    查看索引
        语法: show index from 表名
        例: show index from teacher;
        例: show keys from teacher;
        例: show indexes from teacher;

    删除索引
        语法: drop index 索引名 on 表名;
              alter table 表名 drop index 索引名
        例: drop index teacher_money_index on teacher;

3: 存储引擎
    存储引擎也叫表类型, 指的是数据表的存储机制,索引方案等相关功能,
    不同的引擎处理的方式也不同,就会带来不同的功能和相对的优化, 需要我们根据实际的业务需求来选择一个合理的存储引擎

    例: show engines;    --查看mysql里的存储存储
    比较常用的存储引擎有: InnoDB引擎, MyISAM引擎, memory引擎
    InnoDB存储引擎
        1: 外键约束
            在mysql里, 只有InnoDB引擎支持外键约束
        2: 事务
            InnoDB存储引擎是支持事务的标准的mysql存储引擎
        3: 支持自动增长列
        4: 支持自动灾难恢复等
    ps: 如果需要支持事务,则可以选择InnoDB

    MyISAM存储引擎
        drop table if exists t_1;
        create table t_1(
            t_id int primary key,
            t_name varchar(30)
        )engine=MyISAM default charset = utf8;

        1: MyISAM引擎不支持事务处理
        2: 查询速度快
        tb_name.frm: 存储表定义
        tb_name.MYD: 存储的数据
        tb_name.MYI: 存储索引

    Memory存储引擎(相当于内存数据库)
        特点就是速度很快, 因为存储介质是系统内存, 但容易造成数据的丢失
    drop table if exists t_2;
    create table t_2(
        t_id int primary key,
        t_name varchar(30)
    )engine=memory default charset = utf8;
    insert into t_2 values(01, '小明');
    select * from t_2;
    ps: 当数据量少且访问频繁,并且数据是临时的,就算数据丢失也不会有实质性的负面影响, 可以考虑选择Memory存储引擎

mysql事务,视图,权限管理,索引,存储引擎(胖胖老师)的更多相关文章

  1. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  2. MYSQL数据库管理之权限管理

    经常遇到有网友在QQ群或者论坛上问关于mysql权限的问题,今天抽空总结一下关于这几年使用MYSQL的时候关于MYSQL数据库的权限管理的经验,也希望能对使用mysql的网友有所帮助! 一.MYSQL ...

  3. mysql 用户及权限管理 小结

    MySQL 默认有个root用户,但是这个用户权限太大,一般只在管理数据库时候才用.如果在项目中要连接 MySQL 数据库,则建议新建一个权限较小的用户来连接. 在 MySQL 命令行模式下输入如下命 ...

  4. MySQL Study之--MySQL用户及权限管理

    MySQL Study之--MySQL用户及权限管理     MySQLserver通过MySQL权限表来控制用户对数据库的訪问.MySQL权限表存放在mysql数据库里.由mysql_install ...

  5. MySQL - 常见的三种数据库存储引擎

    原文:MySQL - 常见的三种数据库存储引擎 数据库存储引擎:是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧. ...

  6. Mysql 用户,权限管理的几点理解。

    前两天项目数据库要移植到mysql,为此临时抓了几天很久没用的mysql. 公司的数据库比较简单,从oracle迁移到mysql很简单,但是,中间的权限管理让我感觉既简单又复杂..简单是因为网上关于m ...

  7. mysql总结:索引,存储引擎,大批量数据插入,事务,锁

    mysql总结 索引概述: 索引是高效获取数据的数据结构 索引结构: B+Tree() Hash(不支持范围查询,精准匹配效率极高) 存储引擎: 常见存储引擎: Myisam:5.5之前默认引擎,支持 ...

  8. Mysql 用户和权限管理

    用户和权限管理: 语法 grant 权限 on 数据库.数据表 to '用户' @ '主机名'; 例:给 xiaogang 分配所有的权限 grant all on *.* to 'xiaogang' ...

  9. mysql事务,视图,触发器,存储过程与备份

    .事务 通俗的说,事务指一组操作,要么都执行成功,要么都执行失败 思考: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上1000元, 我给朋友转账100元(无手续费), 如果,我的钱刚扣,而朋友 ...

随机推荐

  1. 开源小工具 酷狗、网易音乐缓存文件转mp3工具

    发布一个开源小工具,支持将酷狗和网易云音乐的缓存文件转码为MP3文件. 以前写过kgtemp文件转mp3工具,正好当前又有网易云音乐缓存文件需求,因此就在原来小工具的基础上做了一点修改,增加了对网易云 ...

  2. ConcurrentHashMap 源码分析

    ConcurrentHashMap 源码分析 1. 前言    终于到这个类了,其实在前面很过很多次这个类,因为这个类代码量比较大,并且涉及到并发的问题,还有一点就是这个代码有些真的晦涩,不好懂.前前 ...

  3. IDEA的快捷键的使用

    1.配置Intellij Idea的配置文件从默认c盘转移到其他盘符 找到Intellij idea的安装文件,在bin目录下找到idea.properties配置文件,如下把Idea的配置文件夹和I ...

  4. java 中的JDK封装的数据结构和算法解析(集合类)----顺序表 List 之 ArrayList

    1. 数据结构之List (java:接口)[由于是分析原理,这里多用截图说明] List是集合类中的容器之一,其定义如下:(无序可重复) An ordered collection (also kn ...

  5. java虚拟机的内存分配与回收机制

    分为4个方面来介绍内存分配与回收,分别是内存是如何分配的.哪些内存需要回收.在什么情况下执行回收.如何监控和优化GC机制. java GC(Garbage Collction)垃圾回收机制,是java ...

  6. Alpha第一天

    Alpha第一天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  7. Scrum 冲刺 第三日

    Scrum 冲刺 第三日 目录 要求 项目链接 燃尽图 问题 今日任务 明日计划 成员贡献量 要求 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图:如 ...

  8. 项目Beta冲刺Day1

    项目进展 李明皇 今天解决的进度 点击首页list相应条目将信息传到详情页 明天安排 优化信息详情页布局 林翔 今天解决的进度 前后端连接成功 明天安排 开始微信前端+数据库写入 孙敏铭 今天解决的进 ...

  9. TOTP算法 基于时间的一次性密码

    /** Copyright (c) 2011 IETF Trust and the persons identified as authors of the code. All rights rese ...

  10. 【问题解决】jhipster-registry-master空白页

    问题概述: 刚从github拉下来的jhipster-registry-master直接运行,访问http://localhost:8761会发现会空白页,但是网页的title显示正常,本文目的是解决 ...