暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

MySQL基础知识(view index语句)

原创 苏苏 恩墨学院 2021-12-18
477

view的特性:

1、创建视图的语句是按具体的列定义好的,

create view v_1 as select sid,dept_name from students a inner join dept b on a.dept_id=b.id;
mysql> show create table v_1 \G
*************************** 1. row ***************************
         View: v_1
         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_1` AS 
select `a`.`sid` AS `sid`,`b`.`dept_name` AS `dept_name`
from (`students` `a` join `dept` `b` on((`a`.`dept_id` = `b`.`id`))) character_set_client: utf8mb4 collation_connection: utf8mb4_0900_ai_ci 1 row in set (0.00 sec)
mysql> SELECT * FROM v_1;
+-----+-----------+
| sid | dept_name |
+-----+-----------+
|   1 | database  |
|   3 | database  |
|   2 | storage   |
|   4 | storage   |
+-----+-----------+
4 rows in set (0.00 sec)

2、后添加的字段不会影响现有的视图

mysql> ALTER TABLE students ADD COLUMN master varchar(20); 
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc students;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| sid     | int         | NO   | PRI | NULL    | auto_increment |
| sname   | varchar(10) | YES  |     | NULL    |                |
| gender  | varchar(12) | YES  |     | NULL    |                |
| dept_id | int         | NO   | MUL | NULL    |                |
| master  | varchar(20) | YES  |     | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql> select *from v_1;
+-----+-----------+
| sid | dept_name |
+-----+-----------+
|   1 | database  |
|   3 | database  |
|   2 | storage   |
|   4 | storage   |
+-----+-----------+
4 rows in set (0.00 sec)

3、后删除的字段会影响视图

mysql> alter table students drop column sid;
Query OK, 4 rows affected (0.29 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> desc students;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| sname   | varchar(10) | YES  |     | NULL    |       |
| gender  | varchar(12) | YES  |     | NULL    |       |
| dept_id | int         | NO   | MUL | NULL    |       |
| master  | varchar(20) | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select *  from v_1;
ERROR 1356 (HY000): View 'mysql.v_1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
mysql> 

4、视图是固定SQL的结果集

mysql> show create table v_1 \G
*************************** 1. row ***************************
        View: v_1
        Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_1` 
AS select `a`.`sid` AS `sid`,`b`.`dept_name` AS `dept_name`
from (`students` `a` join `dept` `b` on((`a`.`dept_id` = `b`.`id`))) character_set_client: utf8mb4 collation_connection: utf8mb4_0900_ai_ci 1 row in set (0.00 sec)

5、可以通过视图往单表中插入数据,多表联合视图就不一定

mysql> select * from v_3;
+----------+---------+------+
| sname    | dept_id | sid  |
+----------+---------+------+
| narisu   |       1 | NULL |
| gutianle |       2 | NULL |
| bbb      |       1 | NULL |
| ccc      |       2 | NULL |
| night    |       1 | NULL |
+----------+---------+------+
5 rows in set (0.00 sec)

mysql> insert into v_3 values ('mysql',1,10002);
Query OK, 1 row affected (0.02 sec)

mysql> 
mysql> 
mysql> select * from v_3;
+----------+---------+-------+
| sname    | dept_id | sid   |
+----------+---------+-------+
| narisu   |       1 |  NULL |
| gutianle |       2 |  NULL |
| bbb      |       1 |  NULL |
| ccc      |       2 |  NULL |
| night    |       1 |  NULL |
| mysql    |       1 | 10002 |
+----------+---------+-------+
6 rows in set (0.00 sec)

mysql> select *from students_bak;
+----------+--------+---------+--------+-------+
| sname    | gender | dept_id | master | sid   |
+----------+--------+---------+--------+-------+
| narisu   | man    |       1 | NULL   |  NULL |
| gutianle | man    |       2 | NULL   |  NULL |
| bbb      | feman  |       1 | NULL   |  NULL |
| ccc      | feman  |       2 | NULL   |  NULL |
| night    | night  |       1 | NULL   |  NULL |
| mysql    | NULL   |       1 | NULL   | 10002 |
+----------+--------+---------+--------+-------+
6 rows in set (0.00 sec)
mysql> select *from students;
+----------+--------+---------+--------+------+
| sname    | gender | dept_id | master | sid  |
+----------+--------+---------+--------+------+
| narisu   | man    |       1 | NULL   | NULL |
| gutianle | man    |       2 | NULL   | NULL |
| bbb      | feman  |       1 | NULL   | NULL |
| ccc      | feman  |       2 | NULL   | NULL |
| night    | night  |       1 | NULL   | NULL |
+----------+--------+---------+--------+------+
5 rows in set (0.00 sec)

mysql> insert into v_1 values ('night2','night2',3,null,null);
ERROR 1394 (HY000): Can not insert into join view 'mysql.v_1' without fields list
mysql> 

6、视图里面的数据库可被排序

mysql> select * from v_3 order by 2;
+----------+---------+-------+
| sname    | dept_id | sid   |
+----------+---------+-------+
| narisu   |       1 |  NULL |
| bbb      |       1 |  NULL |
| night    |       1 |  NULL |
| mysql    |       1 | 10002 |
| gutianle |       2 |  NULL |
| ccc      |       2 |  NULL |
+----------+---------+-------+
6 rows in set (0.00 sec)

mysql>


3种索引创建方式:

普通索引


create index idx_st_sname  on students(sname);
drop index idx_st on students;

复合索引


create index idx_st_union on students(sname,sex);
drop index idx_st_union;

创建唯一索引


create unique index idx_st_sid on students(sid);
drop index idx_st_sid;



表字段增删


alter table students drop column sname2;
alter table students add column sname3;




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论