精华内容
下载资源
问答
  • MySQL中如何主键默认值设为UUID()

    千次阅读 2020-02-18 23:14:57
    当 id 为 int 类型时,可以直接在创建表时设置id为 id primary key auto_increase,即默认 id 为主键自增长。 当 id 为 varchar 类型时,要设置主键id的唯一默认字符串的值,需要使用UUID()函数,但是mysql中不支持...

    1、问题

    mysql中在设置主键(id)的默认值时,有一下两种情况:

    • 当 id 为 int 类型时,可以直接在创建表时设置id为 id primary key auto_increase,即默认 id 为主键自增长。
    • 当 id 为 varchar 类型时,要设置主键 id 默认值为唯一且不同字符串,这时需要使用UUID()函数,但是mysql中不支持默认值为函数,本文就是为了解决这个问题。

    2、解决方案

    首先,需要先创建一个表,SQL语句如下:

    CREATE TABLE traveller(
     id VARCHAR(50) PRIMARY KEY,-- 要设置默认值为UUID()的主键
     NAME VARCHAR(32),
     sex VARCHAR(20),
     phoneNum VARCHAR(20),
     credentialsType INT,
     credentialsNum VARCHAR(50),
     travellerType INT
    );
    

    在创建完表之后,需要创建一个触发器,从而将主键的默认值设定为UUID()生成的字符串。
    触发器的创建
    在创建好的触发器中编写的代码如下:

    DELIMITER $$
    CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        TRIGGER `ssm`.`id_trigger` -- 触发器名称
        BEFORE INSERT             -- 触发器被触发的时机
        ON `ssm`.`traveller`       -- 触发器所作用的表名称
        FOR EACH ROW BEGIN
    		SET new.id=REPLACE(UUID(),'-',''); -- 触发器执行的逻辑
        END$$
    
    DELIMITER ;
    

    对于触发器的编写做以下总结:

    • create trigger ssm.id_triggerssm.id_trigger为触发器名称,可任意指定。
    • 触发器被触发的时机:在使用 insert/delete/update 这三种SQL语句对于指定表进行操作之前或之后(before/after)。

    在于语句中的表现: BEFORE INSERT ON ssm.traveller 即是在对ssm.traveller表进行 insert 操作之前 触发器被触发。

    • 触发器的执行逻辑:在 begin 和 end 之间的SET new.id = replace(UUID(),’-’,’’); ,即指定新的id值为: UUID()函数生成的字符串中的 ‘-’ 被替换为 ‘’ 之后的字符串。

    在触发器设定好之后,对于traveller表执行以下语句:

    INSERT INTO 
    traveller(NAME,sex,phoneNum,credentialsType,credentialsNum,travellerType) 
    VALUES('jay','男','13222222222',0,'1234567890026',0);
    

    所得到的的结果为:
    所得结果

    若触发器中所写逻辑为:

    SET new.id=UUID(); 
    

    插入后的结果应为:
    原始结果
    从以上对比中,可以知道这两种不同逻辑的区别。

    3、总结

    最后要知道该问题解决后所带来的优点和缺点:

    • 优点:使用UUID()函数生成的唯一标识来作为默认id值,使得用户的 id 更加安全。
    • 缺点:UUID()函数所生成的唯一标识过长,在高并发情况下影响效率,一般在该场景下不推荐使用。
    展开全文
  • 主键为聚集索引

    2017-04-25 15:42:00
    如何设置非主键为聚集索引,只需下面三步: 1.去掉主键字段上面的主键约束,此时该字段不是主键了。 2.创建聚集索引到其它列 create clustered index test_index on tablename(column) 3.重新设置原来的主键字段...

    如何设置非主键为聚集索引,只需下面三步:

    1.去掉主键字段上面的主键约束,此时该字段不是主键了。

    2.创建聚集索引到其它列 create clustered index test_index on tablename(column)

    3.重新设置原来的主键字段为主键,此时会自动建立非聚集索引【因为已经有了聚集索引】 alter table tablename add primary key (id)

    转载于:https://www.cnblogs.com/chenh/p/6762446.html

    展开全文
  • PowerDesigner中如何主键设为自动增加 双击字段,把identity前面的钩打上即可 identity就在Primary key的右边

    PowerDesigner中如何把主键设为自动增加

     双击字段,把identity前面的钩打上即可   
       
    identity就在Primary   key的右边

    展开全文
  • 使用Sequence作为主键是使用Oracle数据库的常见需求,那么如何在Grails工程中设置Domain Class的主键为Sequence呢?答案当然还是自定义映射。 Hibernate已经提供了满足这一需求的做法:org.hibernate.id.enhanced...
    使用Sequence作为主键是使用Oracle数据库的常见需求,那么如何在Grails工程中设置Domain Class的主键为Sequence呢?答案当然还是自定义映射。

    Hibernate已经提供了满足这一需求的做法:org.hibernate.id.enhanced.SequenceStyleGenerator,现在只要找到可以自定义Domain Class主键的方法就行了。这种需求对于Grails来说简直就是小菜一碟。
    参见原文
    [url=http://www.groovyq.net/node/123]如何把Domain Class的主键设为Sequence?[/url]
    展开全文
  • 我的问题是这样的: 我知道添加字段用一种办法就是:alter table 表名 add 字段 字段类型 1、还有其他办法么?...2、如何在添加的时候顺便设为主键 3、如何删除字段? 我是新手,有懂的教我下哦,谢谢啦!~
  • 我看了下源表cmdcenter_duban_taizhang 这张表虽然有rowguid字段,但是表结构设置的时候没有将其设置为主键。所以问题就出在这里。 所以目前的重复数据是:各字段完全重复(包括rowguid)的数据。但是rowguid确实是java...
  • 在MySQL数据库中有如下六种触发器: Before Insert After Insert Before Update After Update Before Delete After Delete (2)如何主键默认值设为UUID() 1、问题 mysql中在设置主键(id)的默认值时,有一下两...
  • 如何在powerdesigner中给一主键设为自增型auto_increment 在你所要设为自增型的键上(比如你的id)双击,弹出一个Column Properties对话框,右下角有一个Identify的选择框,选中它OK,就可以了。 再去查看Preview...
  • 1,先增加一个和主键相同类型的字段ID1,将...4,将ID约束设为主键,删除ID1字段   注:SQL server 自增主键插入指定数据 set identity_insert 表名 ON --允许对自增列Id插入指定数据 insert into table_name(...
  • ![图片说明]... !... ...sqlserver中主键的标示规范设为‘是’后,当删除其中一行后,后面的主键如何从新排序?(如图) 如上图当将第3第4行删除后如何将第5行的主键编号重新编号为3?
  • 在MySQL中如何使非主键字段自增长

    千次阅读 2017-12-10 17:11:50
    我在为学校做一个实现用户能对图片的上传下载网站时,由于要求用户注册时使用自己的学号作为自己的账号,所以在MySQL数据库中只能将学号(user_id)这个字段设为主键,但是在管理的用户的时候用学号的话显然不太方便,...
  • 当前的表中主键设为;corp_id和stuff_qr_code;需要删除这两个主键;并设置id为主键 type StuffPos struct { ID int64 CorpID int64 `gorm:"primary_key;index;not null"` StuffQrCode string `gorm:"primary_...
  • 我有一张用户表,一张联系人表,现在希望在联系人表里面将两个互为联系人的ID设为联合主键,应该怎么实现
  • 数据库为mysql,主键设为string型的fileName,然后在hbm.xml中设置<id> 到session.save()时出现下列异常: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned ...
  • 1、把主键定义为自动增长标识符类型在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值。例如: create table customers(id int auto_increment primary key notnull, name varchar(15)...
  • 设为自动增加以后就不用管他了,插入的时候只用插入其他内容 比如你有个学生(student )表,ID自增,他还有姓名(name)和年龄(age)属性 那么插入的时候只要insert into student (name,age) values('张三',25) ; ...
  • 当表中将字段id设为主键并自动增加的情况下该如何插入数据并没有说明。下面还是以mysql为例进行说明: 插入操作,在上篇的基础上,把写的userDataDaoImp.xml略作修改即可: 1)采用useGeneratedKeys=“true” ...

空空如也

空空如也

1 2 3 4 5
收藏数 97
精华内容 38
关键字:

如何设为主键