mysql视图 外键,mysql基础之视图、事务、索引、外键

一、视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。视图是存储在数据库中的查询的SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据;简化操作。

查看当前用户是否拥有创建视图的权限:

MariaDB [ren]> select user();

+----------------+

| user() |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec)

MariaDB [ren]> select create_view_priv,select_priv from mysql.user where user='root' and host='localhost';

+------------------+-------------+

| create_view_priv | select_priv |

+------------------+-------------+

| Y | Y |

+------------------+-------------+

1 row in set (0.00 sec)

1、创建视图

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

MariaDB [ren]> create view v_class_stu as select s.name,c.name as class_name from students as s inner join classes as c on s.cls_id=c.id order by c.name;

2、查看视图

MariaDB [ren]> show tables;

+---------------+

| Tables_in_ren |

+---------------+

| areas |

| classes |

| create_index |

| students |

| t1 |

| t2 |

| test |

| v_class_stu |

+---------------+

8 rows in set (0.00 sec)

MariaDB [ren]> select * from v_class_stu;

+--------------+--------------+

| name | class_name |

+--------------+--------------+

| 黄蓉 | 运维一班 |

| 钱小豪 | 运维一班 |

| 彭于晏 | 运维一班 |

| 周杰 | 运维一班 |

| 小明 | 运维一班 |

| 周杰伦儿 | 运维一班 |

| 陈冠希 | 运维一班 |

| 王祖贤 | 运维一班 |

| 谢霆锋 | 运维一班 |

| 刘亦菲 | 运维三班 |

| | 运维三班 |

| 刘德华 | 运维二班 |

| 小月月 | 运维二班 |

| 和珅 | 运维二班 |

| 程坤 | 运维二班 |

| 凤姐 | 运维二班 |

+--------------+--------------+

16 rows in set (0.00 sec)

3、修改视图

MariaDB [ren]> alter view v_class_stu as select c.name as class_name ,s.name,s.age,s.high from students as s inner join classes as c on s.cls_id=c.id order by c.name,s.age asc;

Query OK, 0 rows affected (0.00 sec)

MariaDB [ren]> select * from v_class_stu;

+--------------+--------------+------+--------+

| class_name | name | age | high |

+--------------+--------------+------+--------+

| 运维一班 | 小明 | 18 | 180.00 |

| 运维一班 | 彭于晏 | 28 | 185.00 |

| 运维一班 | 周杰 | 33 | 178.00 |

| 运维一班 | 周杰伦儿 | 34 | NULL |

| 运维一班 | 陈冠希 | 38 | 175.00 |

| 运维一班 | 谢霆锋 | 38 | 175.00 |

| 运维一班 | 王祖贤 | 52 | 170.00 |

| 运维一班 | 钱小豪 | 56 | 178.00 |

| 运维一班 | 黄蓉 | 108 | 160.00 |

| 运维三班 | | 0 | NULL |

| 运维三班 | 刘亦菲 | 29 | 162.00 |

| 运维二班 | 小月月 | 19 | 180.00 |

| 运维二班 | 程坤 | 44 | 181.00 |

| 运维二班 | 凤姐 | 44 | 150.00 |

| 运维二班 | 和珅 | 55 | 166.00 |

| 运维二班 | 刘德华 | 58 | 175.00 |

+--------------+--------------+------+--------+

16 rows in set (0.00 sec)

4、删除视图

DROP VIEW 视图名称

5、使用:视图的用途就是查询(虚拟表,无法使用视图对真实表进行创建、更新和删除操作)

SELECT * FROM VIEW

二、事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。事务广泛的运用于订单系统、银行系统等多种场景。例如:当两张银行卡之间进行转账,甲方钱转出去了,突然光缆坏了,乙方还没收到钱,钱跑哪里去了,就为了防止这种情况,事务就出来了,事务可以防止这种事情发生。

事务具有ACID特性:原子性(A,atomicity)、一致性(C,consistency)、隔离性(I,isolation)、持久性(D,durability)。

原子性:整个事务中的所有操作要么全部执行成功,要么全部执行失败后回滚到最初状态,它是一个不可分割的工作单位。

一致性:数据库总是从一个一致性的状态转换到另一个一致性的状态。

隔离性:一个事物所做的修改在最终提交之前,对其他事物是不可见的。

持久性:事务完成后,该事务内涉及的数据必须持久性的写入磁盘保证其持久性。当然,这是从事务的角度来考虑的的持久性,从操作系统故障或硬件故障来说,这是不一定的。

事务命令

要求:表的引擎类型必须是innodb类型才可以使用事务,这是mysql表的默认引擎

查看表的创建语句,可以看到engine=innodb

MariaDB [ren]> show create table students\G;

*************************** 1. row ***************************

Table: students

Create Table: CREATE TABLE `students` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) DEFAULT '',

`age` tinyint(3) unsigned DEFAULT 0,

`high` decimal(5,2) DEFAULT NULL,

`gender` enum('男','女','中性','保密') DEFAULT '保密',

`cls_id` int(10) unsigned DEFAULT 0,

`is_delete` bit(1) DEFAULT b'0',

PRIMARY KEY (`id`),

KEY `fk` (`cls_id`),

CONSTRAINT `fk` FOREIGN KEY (`cls_id`) REFERENCES `classes` (`id`) ON DELETE CASCADE

) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8

修改数据的命令会触发事务,包含insert,update,delete等

开启事务(开启事务后执行修改命令,变更会维护到本地缓存中,而不维护到物理表中)

begin或者start transaction;

关闭事务(提交--将缓存中的数据变更维护到物理表中)或者(回滚事务--放弃缓存中变更的数据)

commit或者rollback;

三、索引

索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引插叙的速度要比没有索引的速度要快很多

MySQL中常见索引有:

普通索引

唯一索引

主键索引

组合索引

标签:name,运维,外键,一班,索引,视图,mysql,id

来源: https://www.cnblogs.com/renyz/p/11442292.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值