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;