Skip to content

Instantly share code, notes, and snippets.

@englandbaron
Created September 17, 2019 09:34
Show Gist options
  • Save englandbaron/db0fa3d95e276e31102ab3b36d0489a6 to your computer and use it in GitHub Desktop.
Save englandbaron/db0fa3d95e276e31102ab3b36d0489a6 to your computer and use it in GitHub Desktop.
-- MySQL dump 10.17 Distrib 10.3.18-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: work
-- ------------------------------------------------------
-- Server version 10.3.18-MariaDB-1:10.3.18+maria~bionic-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Current Database: `work`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `work` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE `work`;
--
-- Table structure for table `db1`
--
DROP TABLE IF EXISTS `db1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `db1` (
`USERNAME` varchar(30) NOT NULL,
`MONEY` varchar(100) NOT NULL,
PRIMARY KEY (`USERNAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `db1`
--
LOCK TABLES `db1` WRITE;
/*!40000 ALTER TABLE `db1` DISABLE KEYS */;
INSERT INTO `db1` VALUES ('zetian','[4,100] - [5,30] - [11,70]');
/*!40000 ALTER TABLE `db1` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `db2`
--
DROP TABLE IF EXISTS `db2`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `db2` (
`username` varchar(100) NOT NULL,
`goods` varchar(100) NOT NULL,
`money` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `db2`
--
LOCK TABLES `db2` WRITE;
/*!40000 ALTER TABLE `db2` DISABLE KEYS */;
INSERT INTO `db2` VALUES ('zetian','4','100');
/*!40000 ALTER TABLE `db2` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `test_country`
--
DROP TABLE IF EXISTS `test_country`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test_country` (
`country_code` char(3) NOT NULL COMMENT 'numeric',
`country_name` varchar(100) NOT NULL COMMENT 'ISO 3166-1 country name',
`alpha3` char(3) NOT NULL COMMENT 'alpha-3',
`alpha2` char(2) NOT NULL COMMENT 'alpha-2',
`division` varchar(100) NOT NULL COMMENT 'country division',
PRIMARY KEY (`country_code`),
UNIQUE KEY `uq1` (`alpha3`),
UNIQUE KEY `uq2` (`alpha2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='ISO 3166-1 country';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `test_country`
--
LOCK TABLES `test_country` WRITE;
/*!40000 ALTER TABLE `test_country` DISABLE KEYS */;
/*!40000 ALTER TABLE `test_country` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Dumping routines for database 'work'
--
/*!50003 DROP FUNCTION IF EXISTS `SPLIT_STR` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `SPLIT_STR`(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
) RETURNS varchar(255) CHARSET utf8mb4
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, "") ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 DROP PROCEDURE IF EXISTS `TABLEMIGRATION` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `TABLEMIGRATION`(in name varchar(30))
begin
declare _money VARCHAR(30);
declare part1 VARCHAR(30);
declare part2 VARCHAR(30);
declare part3 VARCHAR(30);
select MONEY into _money from db1 where USERNAME = name;
select _money;
select split_str(_money,' - ',1) into part1;
select split_str(_money,' - ',2) into part2;
select split_str(_money,' - ',3) into part3;
set part1 = replace(replace(part1,'[',''),']','');
set part2 = replace(replace(part2,'[',''),']','');
set part3 = replace(replace(part3,'[',''),']','');
-- select concat("|",part1,"|");
-- select concat("|",part2,"|");
-- select concat("|",part3,"|");
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part1,',',1),split_str(part1,',',2));
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part2,',',1),split_str(part2,',',2));
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part3,',',1),split_str(part3,',',2));
end ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2019-09-17 9:26:22
问题:完成业务表的升级,将db1中的MONEY实现物品的分类并存储到db2新表中
db1:
USERNAME|MONEY |
--------|--------------------------|
zetian |[4,100] - [5,30] - [11,70]|
db2:
username|goods|money|
--------|-----|-----|
zetian |4 |100 |
zetian |5 |30 |
zetian |11 |70 |
工具函数:SPLIT_STR
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `SPLIT_STR`(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
) RETURNS varchar(255) CHARSET utf8mb4
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
CHAR_LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, "") ;;
DELIMITER ;
例子:
MariaDB [work]> select SPLIT_STR("aaa,,bbb,,ccc",",,",2);
+----------------------------------+
| SPLIT_STR("aaa,,bbb,ccc",",,",2) |
+----------------------------------+
| bbb |
+----------------------------------+
1 row in set (0.001 sec)
存储过程:TABLEMIGRATION
DELIMITER ;;
CREATE DEFINER=`root`@`%` PROCEDURE `TABLEMIGRATION`(in name varchar(30))
begin
declare _money VARCHAR(30);
declare part1 VARCHAR(30);
declare part2 VARCHAR(30);
declare part3 VARCHAR(30);
select MONEY into _money from db1 where USERNAME = name;
select _money;
select split_str(_money,' - ',1) into part1;
select split_str(_money,' - ',2) into part2;
select split_str(_money,' - ',3) into part3;
set part1 = replace(replace(part1,'[',''),']','');
set part2 = replace(replace(part2,'[',''),']','');
set part3 = replace(replace(part3,'[',''),']','');
-- select concat("|",part1,"|");
-- select concat("|",part2,"|");
-- select concat("|",part3,"|");
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part1,',',1),split_str(part1,',',2));
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part2,',',1),split_str(part2,',',2));
INSERT INTO `work`.db2 (username,goods,money) VALUES (name,split_str(part3,',',1),split_str(part3,',',2));
end ;;
DELIMITER ;
例子:
MariaDB [work]> call TABLEMIGRATION('zetian');
+----------------------------+
| _money |
+----------------------------+
| [4,100] - [5,30] - [11,70] |
+----------------------------+
1 row in set (0.001 sec)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment