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;