MySQL的存储过程,索引,视图操作

对MySQL的操作网上有很多,这是我自己的练习随笔,适合初学者。/* 创建数据库test_db */

 

/* 创建数据库test_db */
CREATE DATABASE test_db;

/* 使用test_db数据库 */
USE test_db;

/* 创建t_user表*/
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `user_password` varchar(255) NOT NULL,
  `phone` varchar(255) NOT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=113418 DEFAULT CHARSET=utf8;

/* 创建t_details表 */
DROP TABLE IF EXISTS `t_details`;
CREATE TABLE `t_details` (
  `details_id` bigint(8) NOT NULL AUTO_INCREMENT,
  `details_name` varchar(255) DEFAULT NULL,
  `details_phone` varchar(255) DEFAULT NULL,
  `details_gender` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`details_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/* 删除存储过程 */
DROP PROCEDURE t_proce;

/* 创建存储过程 */
CREATE PROCEDURE t_proce()
begin                                                                 /*开始*/
 
declare num001 , num002 int(11);                                /*定义num001和num002的数据类型为int*/
declare sessionid VARCHAR(50);
 
set num001 = 137 , num002 = 10002000;                            /*设置num001=137,num002=10000001*/
SET sessionid = 'CD9A5B83DB39E152CBE7EE';
while num002 > 10000000 do                                     /*num002大于10000000时一直添加*/
 
insert into t_user(user_name,user_password,phone)
 
values(concat("克隆人" , num001) ,sessionid,  concat(num001 , num002));        /*在t_user表中插入数据*/
 
set num002 = num002-1;             /*设置num002=num002+1*/
 
end while;                                                          /*循环2千次*/
 
end;

/* 调用存储过程 */
CALL t_proce();

/* 同步数据,把t_user表数据同步到t_details中 */
insert into t_details(details_name,details_phone,details_gender) 
select user_name,phone,'男' from t_user;

/* 左连接查询数据 */
SELECT * FROM t_user
LEFT JOIN t_details ON t_details.details_phone = t_user.phone;

/* 删除表中数据 */
TRUNCATE TABLE t_user;
TRUNCATE TABLE t_details;
/* 查看索引 */
SHOW INDEX FROM t_user;
SHOW INDEX FROM t_details;
/* 删除索引 */
DROP INDEX phone ON t_user;
DROP INDEX phone ON t_details;

/* 新建存储过程,重新循环添加数据 */
CREATE PROCEDURE t_proce1()
begin                                                                 /*开始*/
 
declare num001 VARCHAR(50);
declare num002 int(11);                                
declare sessionid VARCHAR(50);
 
SET num001 = '13***';
SET num002 = 1020000;                            
SET sessionid = 'CD9A5B83DB39E152CBE7EE';
while num002 > 1000000 do                                     /*num002一直大于0 所以无限循环添加*/
 
insert into t_user(user_name,user_password,phone)
 
values(concat("克隆人" , num002) ,sessionid,  concat(num001 , num002));        /*在t_user表中插入数据*/
 
set num002 = num002-1;             /*设置num002=num002+1*/
 
end while;                                                          /*当num<1000000时,不再执行插入操作循环结束*/
 
end;

/* 调用存储过程 */
CALL t_proce1();

/* 同步数据,把t_user表数据同步到t_details中 */
insert into t_details(details_name,details_phone,details_gender) 
select user_name,phone,'男' from t_user;

/* 左连接查询数据 */
SELECT * FROM t_user
LEFT JOIN t_details ON t_details.details_phone = t_user.phone;

/* 创建中间表 */
DROP TABLE IF EXISTS `user_details_ext`;
CREATE TABLE `user_details_ext` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `phone_crc_32` bigint(20) NOT NULL,
  `phone` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `phone_crc_32` (`phone_crc_32`) USING BTREE,
  KEY `user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=270332 DEFAULT CHARSET=utf8mb4;


/* 多表联合查询创建视图 */
CREATE VIEW view_user_details
AS
SELECT t_user.*,t_details.details_gender 
FROM t_user
LEFT JOIN t_details ON t_details.details_phone = t_user.phone;

/* 查看创建的视图  */
SELECT * FROM view_user_details;

/* 查看当前时间 */
    SELECT NOW();

/*
 查看当前时间时发现与系统时间不一样
 执行下面的操作语句就好了
*/

show variables like '%zone%';
select @@time_zone;
set global time_zone = '+8:00';
set time_zone = '+8:00';
/* 刷新,立即执行 */
flush privileges;

  

posted @ 2020-09-22 15:13  夜半情深  阅读(102)  评论(0编辑  收藏  举报