使用存儲過程能夠保證數據庫升級腳本能夠重複執行而不會報錯。數據庫
CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL COMMENT '非自增id', `account` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `account_pinyin` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT 'account的拼音,用於account排序。', `password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `salt` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '鹽值', `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '手機號,不可爲null,默認值爲'''',可用於登陸', `email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '郵箱,不可爲null,默認值爲'''',可用於登陸', `deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '用戶是否刪除。0:未刪除;1:刪除', `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `unique_account` (`account`), UNIQUE KEY `unique_mobile` (`mobile`), UNIQUE KEY `unique_email` (`email`), KEY `index_updated_at` (`updated_at`), KEY `index_account_pinyin` (`account_pinyin`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一、存儲過程判斷索引是否存在spa
-- 判斷索引是否存在,不存在則建立索引 DROP PROCEDURE IF EXISTS add_index; DELIMITER // CREATE PROCEDURE add_index() BEGIN DECLARE target_database VARCHAR(100); DECLARE target_table_name VARCHAR(100); DECLARE target_column_name VARCHAR(100); DECLARE target_index_name VARCHAR(100); set target_table_name = 'tb_user'; set target_column_name = 'account_pinyin'; set target_index_name = 'index_account_pinyin'; SELECT DATABASE() INTO target_database; IF NOT EXISTS (SELECT * FROM information_schema.statistics WHERE table_schema = target_database AND table_name = target_table_name AND index_name = target_index_name) THEN set @statement = CONCAT("ALTER TABLE ", target_table_name, " ADD INDEX ", target_index_name, "(", target_column_name, " ASC )"); PREPARE STMT FROM @statement; EXECUTE STMT; END IF; END // DELIMITER ; -- 注意 DELIMITER 與分號之間有空格 CALL add_index();
二、存儲過程判斷字段是否存在code
-- 判斷字段是否存在,不存在則增長 DROP PROCEDURE IF EXISTS add_column; DELIMITER // CREATE PROCEDURE add_column() BEGIN DECLARE target_database VARCHAR(100); DECLARE target_table_name VARCHAR(100); DECLARE target_column_name VARCHAR(100); DECLARE target_index_name VARCHAR(100); set target_table_name = 'tb_user'; set target_column_name = 'new_column'; SELECT DATABASE() INTO target_database; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema = target_database AND table_name = target_table_name AND column_name = target_column_name) THEN set @statement = CONCAT("ALTER TABLE ", target_table_name, " ADD COLUMN ", target_column_name, " VARCHAR(45) NULL"); PREPARE STMT FROM @statement; EXECUTE STMT; END IF; END // DELIMITER ; -- 注意 DELIMITER 與分號之間有空格 CALL add_column();
有問題歡迎留言交流。orm
技術交流羣:282575808blog
--------------------------------------排序
聲明: 原創文章,未經容許,禁止轉載!索引
--------------------------------------get