mysql地理数据库_MySQL数据库管理

上一篇博客我们介绍了数据库的一些基本操作,那么这次就让我们一次来认识一下操作数据库的一些更深入的方法。

一、视图

视图通常分为三种:

简单视图,单张表

复杂视图,多张表

物化视图

(1)简单视图的创建

mysql>create view v1_students as select name,age from students;

Query OK,0 rows affected (0.01 sec)

(2)复杂视图的创建

mysql> create view v2_students as select s.name student_name,t.name teacher_name from students s join teachers t on s.teacherid=t.tid;

Query OK,0 rows affected (0.00 sec)

(3)查看指定的视图信息

mysql>show create view v2_students\G;*************************** 1. row ***************************View: v2_students

Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v2_students` AS select `s`.`Name` AS `student_name`,`t`.`Name` AS `teacher_name` from (`students` `s` join `teachers` `t` on((`s`.`TeacherID` =`t`.`TID`)))

character_set_client: latin1

collation_connection: latin1_swedish_ci1 row in set (0.00 sec)

(4)查看所有的视图信息

MariaDB [hidb]> select *from information_schema.views\G;

mysql> select *from information_schema.views\G;*************************** 1. row ***************************TABLE_CATALOG: NULL

TABLE_SCHEMA: hellodb

TABLE_NAME: v1_students

VIEW_DEFINITION: select `hellodb`.`students`.`Name` AS `name`,`hellodb`.`students`.`Age` AS `age` from `hellodb`.`students`

CHECK_OPTION: NONE

IS_UPDATABLE: YES

DEFINER: root@localhost

SECURITY_TYPE: DEFINER

CHARACTER_SET_CLIENT: latin1

COLLATION_CONNECTION: latin1_swedish_ci*************************** 2. row ***************************TABLE_CATALOG: NULL

TABLE_SCHEMA: hellodb

TABLE_NAME: v2_students

VIEW_DEFINITION: select `s`.`Name` AS `student_name`,`t`.`Name` AS `teacher_name` from (`hellodb`.`students` `s` join `hellodb`.`teachers` `t` on((`s`.`TeacherID`=`t`.`TID`)))

CHECK_OPTION: NONE

IS_UPDATABLE: YES

DEFINER: root@localhost

SECURITY_TYPE: DEFINER

CHARACTER_SET_CLIENT: latin1

COLLATION_CONNECTION: latin1_swedish_ci2 rows in set (0.05 sec)

(5)删除视图

MariaDB [hidb]>drop view v1_students;

Query OK,0 rows affected (0.00 sec)

(6)更新视图数据

mysql> update v2_students set teacher_name='Tie Muzhen' where student_name='da ji';

Query OK,1 row affected (0.00sec)

Rows matched:1 Changed: 1 Warnings: 0mysql> select *from teachers;+-----+------------+-----+--------+

| TID | Name | Age | Gender |

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

| 1 | Liu Bang | 45 | M |

| 2 | Ying Zheng | 94 | M |

| 3 | Wu Zetian | 77 | F |

| 4 | Tie Muzhen | 93 | F |

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

4 rows in set (0.00 sec)

由这个例子我们可以看出,修改视图实际上修改的是基表,那么需要注意的就是有些情况下是不能修改视图的数据的。分为以下几种情况,select字句中不能包含distinct,组函数,union以及group by 等语句。

二、自定义函数

函数有多种,大致分为自定义和内置函数两种,内置函数也有很多,不需要定义,可直接进行调用,那么我们一起来详细的认识一下自定义函数的用法。

(1)自定义函数的创建

create +function 然后加函数名 后跟renturn内容即可。

mysql> CREATE FUNCTION simpleFun() RETURNS VARCHAR(20) RETURN "Hello World!";

Query OK,0 rows affected (0.04 sec)

(2) 查看所有函数信息

mysql> show functionstatus\G;*************************** 1. row ***************************Db: hellodb

Name: simpleFun

Type:FUNCTIONDefiner: root@localhost

Modified:2018-09-06 01:31:30Created:2018-09-06 01:31:30Security_type: DEFINER

Comment:

character_set_client: latin1

collation_connection: latin1_swedish_ci

Database Collation: utf8_general_ci1 row in set (0.00 sec)

(3)查看指定自定义函数的定义

mysql> show create functionsimplefun\G;*************************** 1. row ***************************

Function: simplefun

sql_mode:

CreateFunction: CREATE DEFINER=`root`@`localhost` FUNCTION `simplefun`() RETURNS varchar(20) CHARSET utf8RETURN "Hello World!"character_set_client: latin1

collation_connection: latin1_swedish_ci

Database Collation: utf8_general_ci1 row in set (0.00 sec)

(4)带参自定义函数

mysql> delimiter // 将分割符定义为//mysql> create functionaddtwonumber(x smallint unsigned,y smallint unsigned)-> returns smallint begin

->declare a,b smallint unsigned;-> set a=x,b=y;-> return a+b;-> end//Query OK,0 rows affected (0.03sec)

mysql>delimiter ; 重新定义为;

mysql> select addtwonumber(10,20);+-------------------------------+

| addtwonumber(10,20) |

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

| 30 |

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

1 row in set (0.03 sec)

(5)删除自定义函数

MariaDB [mysql]> drop functionsimplefun;

Query OK,0 rows affected (0.00 sec)

三、触发器trigger

触发器是基于两个表之间的联系,一个表发生变化触动触发器然后引起的另一个表也发生变化。

先建两个表

mysql> create table student_info( stu_id int(11) primary key auto_increment,-> stu_name varchar(255) defaultnull);

Query OK,0 rows affected (0.01sec)

create table student_count( student_count int(11) default 0);

Query OK,0 rows affected (0.01sec)

mysql> insert into student_count values(0);

Query OK,1 row affected (0.00 sec) 表的基本操作已完成,接下来就是建立触发器了。

(1)触发器创建

mysql> create trigger trigger_student_count_insert after insert on student_info for each row update student_count set student_count=student_count+1;

Query OK,0 rows affected (0.01sec) 这里需要注意的是触发器的名字尽量起与之相关的,容易看懂。

mysql> insert into student_info values (1,'wsy');

Query OK,1 row affected (0.00sec)

mysql> select *from student_count;+---------------+

| student_count |

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

| 1 |

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

1 row in set (0.00 sec)

(2)查看现有触发器

mysql>SHOW TRIGGERS\G;*************************** 1. row ***************************Trigger: trigger_student_count_insert

Event: INSERT

Table: student_info

Statement: update student_count set student_count=student_count+1Timing: AFTER

Created: NULL

sql_mode:

Definer: root@localhost

character_set_client: latin1

collation_connection: latin1_swedish_ci

Database Collation: utf8_general_ci1 row in set (0.00 sec)

(3)删除触发器

mysql>DROP TRIGGER trigger_student_count_insert;

四、存储过程

存储过程:存储过程保存在mysql.proc表中

(1)创建一个无参存储过程

mysql> delimiter //mysql> create procedure showtime() begin select now(); -> end //Query OK,0 rows affected (0.00 sec)

(2)  创建一个含参存储过程

mysql>create procedure deletebyld(in uid smallint unsigned,out num smallint unsigned) begin delete from hellodb.students where stuid=uid; select row_count() into num; end//mysql>delimiter ;

mysql> call deletebyld(2,@line);

Query OK,0 rows affected (0.02sec)

mysql> select @line;+-------+

| @line |

+-------+

| 1 |

+-------+

1 row in set (0.00 sec)

(2)存储过程的调用

mysql>call showtime;+---------------------+

| now() |

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

| 2018-09-06 02:15:54 |

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

1 row in set (0.00sec)

Query OK,0 rows affected (0.00 sec)

(2)查看指定的存储过程创建

mysql>show create procedure showtime\G;

(3)删除存储过程

mysql> drop procedure showtime;

(4)查看存储过程列表

mysql>SHOW PROCEDURE STATUS\G;*************************** 1. row ***************************Db: hellodb

Name: showtime

Type: PROCEDURE

Definer: root@localhost

Modified:2018-09-06 02:15:37Created:2018-09-06 02:15:37Security_type: DEFINER

Comment:

character_set_client: latin1

collation_connection: latin1_swedish_ci

Database Collation: utf8_general_ci1 row in set (0.00 sec)

(5)存储过程的优势

存储过程把经常使用的SQL语句或业务逻辑封装起来,预编译保存在数据库中, 当需要时从数据库中直接调用,省去了编译的过程 

提高了运行速度

同时降低网络数据传输量

有关MySQL的相关函数及触发器内容就介绍到这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值