当前位置: 首页 > 科技观察

MySQLDDL操作--------视图在实践中更好

时间:2023-03-13 01:53:05 科技观察

【引自asd1123509133的博客】1.背景*视图是数据库中的一个虚拟表。包含一系列命名的行和列数据。视图派生自一个或多个表。视图的行为与表的行为非常相似。用户可以使用SELECT语句查询数据,使用INSERT、UPDATE和DELETE修改记录。视图使用户操作更加方便,保证了数据库系统的安全。*视图一旦定义,就存储在数据库中,而对应的数据并不像表一样存储在数据库中。通过视图看到的数据只是基础表中存储的数据。对视图的操作与对表的操作相同,可以查询、修改、删除。当修改通过视图看到的数据时,对应的基础表中的数据也会发生变化。同时,如果基础表中的数据发生变化,变化会自动反映到视图中。2.view的作用*使得查询非常清晰,view中存储的数据就是我们想要的数据,可以简化用户操作。*让数据更安全,视图中的数据不存在于视图中,也不存在于基本表中,通过视图的关系,我们可以有效的保护我们的重要数据*提高表的逻辑独立性,视图可以屏蔽原来表结构变化的影响3.视图类型*MERGE:将引用视图的语句的文本与视图定义合并,使视图定义的某一部分替换语句的相应部分。*TEMPTABLE:视图的结果会放在一个临时表中,然后使用它执行语句。*UNDEFINED:默认使用的算法。MySQL更喜欢MERGE而不是TEMPTABLE,因为MERGE通常更有效。4.查看类型示例*创建基表usersmysql>CREATETABLEusers(->idBIGINTPRIMARYKEYNOTNULLAUTO_INCREMENT,->nameVARCHAR(64)NOTNULL,->sexENUM('M','F')NOTNULL,->ageINTNOTNULL->)ENGINE=INNODBCHARSET=utf8mb4;QueryOK,0rowsaffected(0.15sec)*Insertdataintobasetableusersmysql>INSERTINTOusersVALUES(NULL,'tom','M',23),(NULL,'jak','F',32),(NULL,'jus','M',35);QueryOK,3rowsaffected(0.04sec)Records:3Duplicates:0Warnings:0*查看基表数据mysql>SELECT*FROMusers;+----+-----+-----+-----+|id|姓名|性别|年龄|+----+-----+-----+-----+|1|tom|M|23||2|jak|F|32||3|jus|M|35|+----+-----+-----+-----+3rowsinset(0.00sec)*创建用户id和名称vusers1的视图,类型为UNDEFINEDmysql>CREATEALGORITHM=UNDEFINEDVIEWvusers1ASSELECTid,nameFROMusers;QueryOK,0rowsaffected(0.01sec)*分析查看vusers1视图的执行计划[未使用临时表]mysql>EXPLAINSELECT*FROMvusers1;+----+------------+--------+------------+------+--------------+------+--------+------+------+----------+--------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|+----+------------+--------+------------+------+----------------+------+--------+------+------+------------+--------+|1|SIMPLE|users|NULL|ALL|NULL|NULL|NULL|NULL|3|100.00|NULL|+----+------------+--------+------------+------+---------------+-----+--------+-----+-----+----------+--------+1rowinset,1warning(0.00sec)*创建用户id和名称vusers2视图,类型为mergemysql>CREATEALGORITHM=MERGEVIEWvuser2ASSELECTid,nameFROMusers;QueryOK,0rowsaffected(0.03sec)*分析查看vusers2可视化执行计划[临时表未使用]mysql>EXPLAINSELECT*FROMvuser2;+----+------------+--------+------------+------+----------------+-----+--------+------+------+----------+--------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|额外|+----+------------+--------+------------+------+--------------+------+--------+------+------+--------+--------+|1|SIMPLE|users|NULL|ALL|NULL|NULL|NULL|NULL|3|100.00|NULL|+----+-------------+--------+------------+------+--------------+------+--------+------+------+----------+------+1rowinset,1warning(0.01sec)*创建用户id和名称vusers3视图,类型为TEMPTABLEmysql>CREATEALGORITHM=TEMPTABLEVIEWvuser3ASSELECTid,nameFROMusers;QueryOK,0rowsaffected(0.19sec)*分析查看vusers3视觉执行计划[使用临时表]mysql>EXPLAINSELECT*FROMvuser3;+----+------------+------------+-----------+--------+----------------+-----+--------+-----+------+----------+--------+|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|过滤|额外|+----+------------+------------+------------+------+----------------+------+--------+------+-----+------------+--------+|1|PRIMARY||NULL|ALL|NULL|NULL|NULL|NULL|3|100.00|NULL||2|DERIVED|users|NULL|ALL|NULL|NULL|NULL|NULL|3|100.00|NULL|+----+------------+-----------+------------+------+------------+-----+--------+-----+-----+---------+--------+2rowsinset,1warning(0.00sec)5.查看查看信息*descview查看基本信息mysql>descvusers1;+--------+------------+------+-----+--------+--------+|Field|Type|Null|Key|Default|Extra|+-------+--------------+------+-----+--------+--------+|id|bigint(20)|NO||0|||名称|varchar(64)|NO||NULL||+------+------------+------+-----+--------+--------+2rowsinset(0.00sec)*显示表状态查看图像基础信息mysql>showtablestatuslike'vusers1';+--------+--------+--------+------------+------+--------------+------------+----------------+---------------+------------+----------------+------------+------------+------------+------------+----------+----------------+--------+|名称|引擎|版本|Row_format|Rows|Avg_row_length|Data_length|Max_data_length|Index_length|Data_free|Auto_increment|Create_time|Update_time|Check_time|Collat??ion|Checksum|Create_options|Comment|+--------+--------+--------+----------+-----+----------------+------------+----------------+------------+------------+--------------+------------+------------+------------+----------+------------+----------------+---------+|vuser1|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|NULL|VIEW|+--------+--------+--------+------------+------+----------------+------------+----------------+--------------+------------+----------------+------------+--------------+------------+------------+----------+--------------+--------+1rowinset(0.00sec)*showcreateview查看图像信息mysql>showcreateviewvuser1;+--------+--------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+------------------+|View|CreateView|character_set_client|collat??ion_connection|+--------+--------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+--------------------+|vuser1|CREATEALGORITHM=UNDEFINEDDEFINER=`root`@`localhost`SQLSECURITYDEFINERVIEW`vuser1`ASselect`users`.`id`AS`id`,`users`.`name`AS`name`from`users`|utf8|utf8_general_ci|+------+------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+----------------------+1rowinset(0.00sec)6.总结需求驱动技术,技术本身没有区别,只有业务