精华内容
下载资源
问答
  • 向ActiveRecord MySQL2适配器添加一个:uuid列,该列存储在一个16字节的二进制列中。 这正是它需要的空间。 安装 将此行添加到您的应用程序的Gemfile中: gem 'activerecord-mysql-uuid-column' 然后执行: $ ...
  • Mysql uuid

    2021-07-12 16:43:06
    mysql设置uuid触发器后,当添加新的数据的时候,在id赋值的情况下,那默认填写的是uuid函数的值还是自己赋的值。目前结果是uuid产生的值。如果是uuid的值,那么怎么设置在id赋值时,不触发uuid触发器。
  • MySQL中有一个UUID() 函数,通常用UUID做唯一标识,需要在数据库中进行存储。使用此函数可以让MySQL生成一个UUID值,并以VARCHAR(36)类型的可读形式返回。如图1:图1UUID值是非常随机的,因此常常被用来当做主键值...

    在MySQL中有一个UUID () 函数,通常用UUID做唯一标识,需要在数据库中进行存储。使用此函数可以让MySQL生成一个UUID值,并以VARCHAR(36)类型的可读形式返回。如图1:

    8ffc54af7ed32416d9ce62f093cf0c71.png

    图1

    UUID值是非常随机的,因此常常被用来当做主键值(PRIMARY KEY),而且这些以UUID作为主键的数据可以很容易的从不同的数据库中汇聚到一起。但是对于像MySQL的InnoDB存储引擎来说,使用UUID作为主键(PRIMARY KEY)会带来一些问题。

    1、问题阐述

    问题一:UUID的长度问题

    UUID的长度为36个字符。假设数据库的字符集为UTF8,那么UUID的最大长度为2+3*26=110字节。如果这样的UUID作为主键的话,不仅会是主键的尺寸很大,而且会使二级索引的尺寸变大,原因是MySQL中的二级索引的value存的是PRIMARY KEY。由于主键和二级索引的尺寸很大,所以不利于在内存中操作

    问题二:UUID的格式问题

    MySQL的UUID ()使用的是version 1的UUID,该类型的UUID的特点是基于时间,它是一个128位的数字,由5个十六进制数字组成的utf8字符串表示,我们以图1中的UUID值为例:

    432a4ec8-3642-11e9-805a-0050568238b5,每对字符实际上是一个在00-FF范围内的十六进制数; 总共有16个数字,前三个数字432a4ec8-3642-11e9是由时间戳生成。但是,最左边的组变化最快(每微秒10次)。我们可以验证,如图2

    c182e86726b8929da7c991a2eaf70f7a.png

    图2

    因为UUID是不连续的随机数,所以insert操作是随机的,数据被离散存储,造成innodb频繁的页分裂,使得insert的操作十分低效。

    2、结合问题定制方案

    既然UUID作为主键带有这样那样的问题,难道说让我们在设计表结构时要放弃使用UUID吗?答案是否定的。我们可以通过采用binary(16)数据类型和重新安排UUID的顺序来解决之前提到的两个问题。

    首先,BINARY(16) 这个二进制形式数据类型使用16个字节,比人类可读形式(“文本”形式)使用的VARCHAR(36)小的多。注意:只是二进制!没有字符集,没有排序,只有十六个字节。也许在某些应用程序中,文本形式仍然是必需的。那么我们可以使用虚拟列(MySQL5.7的新特性,虚拟列不占用存储空间)来存放文本形式的UUID。

    然后,还有如何巧妙地重新排列二进制形式的字节的问题。我们在之前的问题二中已经了解到,MySQL的UUID()使用version1,最左边三个以破折号分隔的组是8字节的时间戳,最左边的第一组是时间戳的低四个字节; 第二组是中间两个字节时间戳,第三组是两个字节的高位时间戳,最左边的第一组变化最快。

    因此,在我们存储UUID之前,重新安排UUID,使得快速变化的部分放到最后,例如:

    把432a4ec8-3642-11e9-805a-0050568238b5重组为11e9-3642-432a4ec8-805a-0050568238b5

    这种结构比起之前的结构更容易被cache缓存,同时存储上会更加连续。

    3、方案验证

    1)创建两张表

    -- 使用原生的uuid作为主键

    create table test_uuid (id_binvarchar(36) PRIMARY KEY, name varchar(200)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

    -- 使用重组后的uuid做为主键

    create table test_uuid_ordered (id_bin binary(16) PRIMARY KEY, name varchar(200)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

    2)在mysql中创建转换函数uuidtobin

    DELIMITER //

    CREATE FUNCTION uuidtobin(_uuid varchar(36))

    RETURNS BINARY(16)

    LANGUAGE SQL  DETERMINISTIC  CONTAINS SQL  SQL SECURITY INVOKER

    RETURN

    UNHEX(CONCAT(

    SUBSTR(_uuid, 15, 4),

    SUBSTR(_uuid, 10, 4),

    SUBSTR(_uuid,  1, 8),

    SUBSTR(_uuid, 20, 4),

    SUBSTR(_uuid, 25) ));

    //

    DELIMITER ;

    3)编写执行测试程序,分别使用uuid()写入数据到test_uuid中和调用函数uuidtobin(UUID())写入数据到test_uuid_ordered中,一次插入1万行数据到相应的表中

    6d1ba9c68ba9f39fcbf614d41be8efea.png

    4)测试结果

    数据尺寸

    横轴-插入次数 x 10,000

    纵轴-数据文件尺寸(单位MB)

    03a1f1105e9236035426fb213a732764.png

    UUID表的用varchar(36)存储的文件大小几乎比有序UUID表用BINARY(16)存储的文件大45%

    实际处理时间

    横轴-插入次数 x 10,000

    纵轴-实际时间(单位 秒)

    d6627e8180be002cfaa8309871b5788b.png

    5)最后添加虚拟列id_text存放“未重新排列”的顺序的UUID文本,可以方便将文本格式用于一些错误日志记录,调试等。

    alter table test_uuid_ordered add

    id_text varchar(36) generated always as

    (

    insert(

    insert(

    insert(

    insert(

    hex(

    concat(substr(id_bin,5,4),substr(id_bin,3,2),

    substr(id_bin,1,2),substr(id_bin,9,8))

    ),

    9,0,'-'),

    14,0,'-'),

    19,0,'-'),

    24,0,'-')

    ) virtual;

    展开全文
  • mysql生成uuid

    2021-01-21 12:33:20
    但是mysql不支持,可以通过触发器实现。下面是创建一个产品表的sql语句。 CREATE TABLE `product` ( `id` varchar(36) NOT NULL, `productNum` varchar(50) NOT NULL, `productName` varchar(50) DEFAULT NULL, `...

    oracel创建uuid为主键的表时可以直接指定default uuid();但是mysql不支持,可以通过触发器实现。下面是创建一个产品表的sql语句。

    CREATE TABLE `product` (
      `id` varchar(36) NOT NULL,
      `productNum` varchar(50) NOT NULL,
      `productName` varchar(50) DEFAULT NULL,
      `cityName` varchar(50) DEFAULT NULL,
      `DepartureTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `productPrice` double DEFAULT NULL,
      `productDesc` varchar(500) DEFAULT NULL,
      `productStatus` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `product` (`id`,`productNum`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    
    CREATE TRIGGER `product_before_insert` BEFORE INSERT ON `product` FOR EACH ROW 
    BEGIN
    IF new.id is NULL THEN
    		SET new.id = UUID();
    END IF; 
    END;
    

    除了使用sql语句直接创建触发器之外,还可以使用navicat可视化界面对已创建的表添加触发器,如下图所示:
    navicat创建触发器
    触发器的语法格式一定要注意,下面是我踩过的坑,老报语法错误。 有问题的sql语句如下:

    CREATE TABLE `product` (
      `id` varchar(32),
      `productNum` varchar(50) NOT NULL,
      `productName` varchar(50) DEFAULT NULL,
      `cityName` varchar(50) DEFAULT NULL,
      `DepartureTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      `productPrice` double DEFAULT NULL,
      `productDesc` varchar(500) DEFAULT NULL,
      `productStatus` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `product` (`id`,`productNum`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
    CREATE TRIGGER product_after_insert BEFORE INSERT ON product FOR EACH ROW 
    BEGIN
      IF new.id IS NULL THEN
            SET new.id = SELECT(UUID())
        END IF 
    END
    

    sql语句结尾没加分号 ;(end if 和end后面)
    触发器名称和表名称没加 ``
    设置id长度为32时,会报错 输入too long

    展开全文
  • Mysql的uuid返回主键,在user类以及表中添加uuid1属性, <!-- selectKey:用于配置主键返回 keyProperty:要绑定的pojo属性 resultType:属性数据类型 order:指定什么时候执行,BEFORE之前 --> ...

    其他和之前相同:user.xml

    <insert id="insertUser" parameterType="com.mybatis.pojo.User" >
            
           INSERT INTO USER
    		            (`username`,
    		             `birthday`,
    		             `sex`,
    		             `address`)
    		VALUES (#{username},
    		        #{birthday},
    		        #{sex},
    		        #{address});
       </insert>

    自增返回:

    <!-- useGeneratedKeys:标识插入使用自增id
    		 keyProperty:与useGeneratedKeys配套使用,用于绑定主键接收的pojo属性
    	 -->
    	 <insert id="insertUserKey" parameterType="com.mybatis.pojo.User" useGeneratedKeys="true" keyProperty="id">
    	 	<!-- selectKey:用于配置主键返回
    	 		 keyProperty:要绑定的pojo属性
    	 		 resultType:属性数据类型
    	 		 order:指定什么时候执行,AFTER之后
    	 	-->
    
    
    		<!-- <selectKey keyProperty="id" resultType="int" order="AFTER">
    			 SELECT LAST_INSERT_ID()
    		</selectKey> -->
    INSERT INTO USER
    		            (`username`,
    		             `birthday`,
    		             `sex`,
    		             `address`
    		             )
    		VALUES (#{username},
    		        #{birthday},
    		        #{sex},
    		        #{address}
    		        );
    	</insert>

    Mysql的uuid返回主键,在user类以及表中添加uuid1属性,

    <insert id="insertUser" parameterType="com.mybatis.pojo.User">
            <!-- selectKey:用于配置主键返回
                 keyProperty:要绑定的pojo属性
                 resultType:属性数据类型
                 order:指定什么时候执行,BEFORE之前
            -->
            <selectKey keyProperty="uuid1" resultType="string" order="BEFORE">
                SELECT UUID()
            </selectKey>
            INSERT INTO USER
            (`username`,
            `birthday`,
            `sex`,
            `address`,
            `uuid1`)
            VALUES (#{username},
            #{birthday},
            #{sex},
            #{address},
            #{uuid1});
        </insert>

    test

     @Test
        public void testInsertUser() throws IOException {
    
            // 创建SqlSession对象
            SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();
            User user = new User();
            user.setUsername("张鸡儿");
            user.setAddress("榆林土龙");
            user.setBirthday(new Date());
            user.setSex("1");
            // 执行插入
            sqlSession.insert("user.insertUser", user);
            System.out.println(user);
            // 提交事务
            sqlSession.commit();
            // 释放资源
            sqlSession.close();
        }

     

    展开全文
  • mysql添加id-uuid 触发器

    2019-10-02 08:13:28
    /* Navicat MySQL Data Transfer Source Server : 爬虫 Source Server Version : 50173 Source Host : 101.201.78.86:3306 Source Database : tw_census Target Server Type...
    /*
    Navicat MySQL Data Transfer
    
    Source Server         : 爬虫
    Source Server Version : 50173
    Source Host           : 101.201.78.86:3306
    Source Database       : tw_census
    
    Target Server Type    : MYSQL
    Target Server Version : 50173
    File Encoding         : 65001
    
    Date: 2017-12-22 15:58:57
    */
    
    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for app_channel
    -- ----------------------------
    DROP TABLE IF EXISTS `app_channel`;
    CREATE TABLE `app_channel` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `app_id` varchar(32) NOT NULL,
      `channel_id` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for app_info
    -- ----------------------------
    DROP TABLE IF EXISTS `app_info`;
    CREATE TABLE `app_info` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `app_name` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) NOT NULL,
      `app_code` varchar(32) NOT NULL,
      `app_del` int(6) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `id` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for app_pay
    -- ----------------------------
    DROP TABLE IF EXISTS `app_pay`;
    CREATE TABLE `app_pay` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `user_id` varchar(32) NOT NULL,
      `app_id` varchar(32) NOT NULL,
      `channel_id` varchar(32) NOT NULL,
      `server_id` varchar(32) NOT NULL,
      `commodit` text,
      `price` int(11) NOT NULL,
      `pay_type` int(11) NOT NULL,
      `pay_cp_id` varchar(64) NOT NULL,
      `order_status` int(11) DEFAULT NULL COMMENT '支付状态 0:未付款,1:已付款未领取 2:已付款已领取道具',
      `pay_time` datetime NOT NULL,
      `user_k` int(32) NOT NULL,
      `aorl` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for app_server
    -- ----------------------------
    DROP TABLE IF EXISTS `app_server`;
    CREATE TABLE `app_server` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `app_id` varchar(32) NOT NULL,
      `server_id` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for app_user
    -- ----------------------------
    DROP TABLE IF EXISTS `app_user`;
    CREATE TABLE `app_user` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `u_name` varchar(32) NOT NULL,
      `cp_id` varchar(32) NOT NULL,
      `server_id` varchar(32) NOT NULL,
      `channel_id` varchar(32) DEFAULT NULL,
      `app_id` varchar(32) DEFAULT NULL,
      `level` int(11) DEFAULT NULL,
      `game_coin` int(32) DEFAULT NULL,
      `diamond_coin` int(32) DEFAULT NULL,
      `create_ip` varchar(32) DEFAULT NULL,
      `create_time` datetime NOT NULL,
      `user_k` int(11) NOT NULL,
      `aorl` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `id` (`id`),
      KEY `Channel_id` (`channel_id`),
      KEY `Appid` (`app_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for channel_info
    -- ----------------------------
    DROP TABLE IF EXISTS `channel_info`;
    CREATE TABLE `channel_info` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `channel_name` varchar(32) NOT NULL,
      `channel_code` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) DEFAULT NULL,
      `partner` varchar(32) DEFAULT NULL,
      `aorl` int(6) NOT NULL,
      `channel_del` int(6) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `id` (`id`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for channel_server
    -- ----------------------------
    DROP TABLE IF EXISTS `channel_server`;
    CREATE TABLE `channel_server` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `channel_id` varchar(32) NOT NULL,
      `server_id` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for login_90_only_history
    -- ----------------------------
    DROP TABLE IF EXISTS `login_90_only_history`;
    CREATE TABLE `login_90_only_history` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `use_id` varchar(32) NOT NULL,
      `app_id` varchar(32) NOT NULL,
      `channel_id` varchar(32) NOT NULL,
      `Server_id` varchar(32) NOT NULL,
      `login_time` datetime NOT NULL,
      `user_k` int(32) DEFAULT NULL,
      `aorl` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for login_history
    -- ----------------------------
    DROP TABLE IF EXISTS `login_history`;
    CREATE TABLE `login_history` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `use_id` varchar(32) NOT NULL,
      `login_time` datetime NOT NULL,
      `app_id` varchar(32) NOT NULL,
      `channel_id` varchar(32) NOT NULL,
      `server_id` varchar(32) NOT NULL,
      `user_k` int(32) DEFAULT NULL,
      `aorl` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for server_info
    -- ----------------------------
    DROP TABLE IF EXISTS `server_info`;
    CREATE TABLE `server_info` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `server_name` varchar(32) NOT NULL,
      `create_time` datetime NOT NULL,
      `create_user` varchar(32) DEFAULT NULL,
      `aorl` int(6) NOT NULL,
      `partner` varchar(32) DEFAULT NULL,
      `server_del` int(6) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `id` (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for sys_account
    -- ----------------------------
    DROP TABLE IF EXISTS `sys_account`;
    CREATE TABLE `sys_account` (
      `id` varchar(32) NOT NULL DEFAULT '1',
      `sys_admin` varchar(32) DEFAULT NULL,
      `ps` varchar(32) DEFAULT NULL,
      `key_sen` varchar(32) DEFAULT NULL,
      `lev` int(32) DEFAULT NULL,
      `type` int(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for test
    -- ----------------------------
    DROP TABLE IF EXISTS `test`;
    CREATE TABLE `test` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(32) DEFAULT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Table structure for test11
    -- ----------------------------
    DROP TABLE IF EXISTS `test11`;
    CREATE TABLE `test11` (
      `Id` int(11) NOT NULL AUTO_INCREMENT,
      `zd1` varchar(255) DEFAULT NULL,
      `zd` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`Id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_app_channel`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_app_channel` BEFORE INSERT ON `app_channel` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_app_info`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_app_info` BEFORE INSERT ON `app_info` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_app_pay`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_app_pay` BEFORE INSERT ON `app_pay` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_app_server`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_app_server` BEFORE INSERT ON `app_server` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_app_user`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_app_user` BEFORE INSERT ON `app_user` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_channel_info`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_channel_info` BEFORE INSERT ON `channel_info` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_channel_server`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_channel_server` BEFORE INSERT ON `channel_server` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_login_90_only_history`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_login_90_only_history` BEFORE INSERT ON `login_90_only_history` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_login_history`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_login_history` BEFORE INSERT ON `login_history` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_server_info`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_server_info` BEFORE INSERT ON `server_info` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;
    DROP TRIGGER IF EXISTS `tri_auto_uuid_sys_account`;
    DELIMITER ;;
    CREATE TRIGGER `tri_auto_uuid_sys_account` BEFORE INSERT ON `sys_account` FOR EACH ROW BEGIN
     if new.id = '1' THEN set new.id = (select REPLACE(uuid(), '-', ''));
     end if;
    END
    ;;
    DELIMITER ;

     

    转载于:https://www.cnblogs.com/lazyball/p/8086643.html

    展开全文
  • 使用如下代码创建了一个...触发器成功添加了但是添加记录时并未生效是什么原因呢? <p style="text-align:center"><img alt="" src="https://img-ask.csdnimg.cn/upload/1622187115170.png" /></p>  </p>
  • DataX-Mysql主键UUID类型切分主键

    千次阅读 2020-08-05 23:02:36
    之前公司在使用datax时,需要从rds同步数据到hive,但是数据库中的主键id是uuid类型的字符串,使用datax默认的字符串分隔方式,其实会有很大的问题,所以官方也不推荐使用。 二. 分析源码 跟踪底层源码最终可以...
  • sqllite 有没有类似 sqlserver的 newid MySQLuuid的函数啊?
  • 主要介绍了Mysql中存储UUID去除横线的方法,本文出了3个Mysql函数实现去除去UUID中的横线,需要的朋友可以参考下
  • MySQL UUID的生成使用

    千次阅读 2017-03-20 17:32:21
    我们都知道在java中可以使用UUID来生成永久唯一(永不会...但是用mysqluuid()函数 ,生成的uuid是36位的,其中包含32个字符以及4个分隔符(-), 样式如:a4382707-5e9a-1035-bedb-4d6a2ea6baae 往往这个分隔符对
  • mysql 生成UUID 存储过程的基本概念

    千次阅读 2017-09-22 13:17:09
    -- MD5 32位 SHA1 40位 她们都是单向加密 SELECT MD5('ADMIN'),SHA1('ADMIN'),PASSWORD('ADMIN'); ...SELECT UUID(),LENGTH(UUID()); SELECT UUID(); SELECT FORMAT(12131321,2)
  • MySQL UUID函数的详解

    2015-05-22 15:34:12
    MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l 都可以实现生成唯一值的功能; l UUID是可以生成...
  • MySQL添加数据时,同时生成UUID

    千次阅读 2020-02-27 18:08:05
    code是product表中的主键,使用UUID保持唯一性, insert into product(code, productNum, productName) values(REPLACE(UUID(), '-', ''), 001, '计算机')
  • The slave I/O thread stops because master and slave have equal MySQL server UUIDs ...
  • 由此可见,虚拟机与宿主机是互通的 6、如果想在虚拟机中访问网络,增加一块NAT网卡 1)【虚拟机】–【设置】–【添加】设置为NAT模式,如下图 之后,我们的虚拟机即可访问网络 二、修改MySQLUUID 复制虚拟机导致的...
  • mysql数据库如何创建uuid通过触发器创建uuid 通过触发器创建uuid mysql中使用UUID()创建uuid 命令行新增触发器操作: delimiter // CREATE TRIGGER 触发器名称 BEFORE(BEFORE执行操作前,AFTER执行操作后) UPDATE...
  • MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l 都可以实现生成唯一值的功能; l UUID是可以生成...
  • MySQL UUID函数和自增序列详解

    千次阅读 2015-05-05 09:39:04
    MySQL UUID函数的详解 MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点: l 都可以实现生成唯一值的功能; l UUID是可以生成...
  • mysql主键自增和UUID的区别

    万次阅读 2020-06-29 23:35:21
    1、自增主键 在进行数据库插入时,位置相对固定(B+树中的右下角)增加数据插入...另外,附一个测试表你们,表名带uuid的就是用uuid作为主键。大家看一下就知道性能差距了: 4、总结 InnoDB使用聚集索引,数据记录
  • UUID做主键,其他字段相同,插入100万条数据,用了3.5个小时 自增主键,其他字段相同,插入相同的100万条数据,用了16分钟 2.查询方面 UUID做主键,select count() from info 查询数量花了2.86秒 自增主键,...
  • mysql uuid默认值问题

    2012-01-11 10:49:11
    刚接触mysql,现在我表的ID列添加默认值时这样写: ID BINARY(16) DEFAULT UNHEX(REPLACE(UUID(),'-','')) NOT NULL, 在导入的时候提示错误。 怎么该ID列添加一个UUID类型的默认值呢?我的版本是5.5.19
  • MySQL中存储UUID的最佳实践

    千次阅读 2019-03-06 16:15:41
    MySQL中有一个UUID () 函数,通常用UUID做唯一标识,需要在数据库中进行存储。使用此函数可以让MySQL生成一个UUID值,并以VARCHAR(36)类型的可读形式返回。如图1: 图1 UUID值是非常随机的,因此常常被用来当做主...
  • @Id @Column(name = "`wid`") private String id; 把上面加了自动生成uuid,变为下面 ... @GenericGenerator(name = "uuid", strategy = "uuid2") //项目变更需要 private String id; 原设想是新建...
  • mysql设置uuid触发器后,当添加新的数据的时候,在id赋值的情况下,那默认填写的是uuid函数的值还是自己赋的值?目前结果是uuid产生的值。如果是uuid的值,那么怎么设置在id赋值时,不触发uuid触发器。
  • mysql批量插入不同的uuid

    千次阅读 2019-09-25 08:47:55
    迁移数据,需要更改一个字段为uuid 但是用replace(uuid(),‘-’,‘’)发现,uuid是一样的, 网上找文章说 使用 md5(uuid()) 完美解决 试了一下 确实可以 ...
  • 我们通过添加触发器来设置自动生成UUID主键。 3.点击Triggers,打开触发器设计界面 4.在BEFORE INSERT 点击加号按钮,添加一个触发器,即在插入一条记录之前,自动生成一个UUID主键 代码添加在BEGIN和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,576
精华内容 11,830
关键字:

给mysql添加uuid

mysql 订阅