mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写相关的知识,希望对你有一定的参考价值。

如题

mysql设置UUID为主键需要先将数据类型设置为VARCHAR(36),然后插入数据的时候用UUID函数插入UUID。下面我用win10系统下的CMD命令行具体演示一下:

1、打开CMD,输入mysql -uroot -p命令连接mysql,如下图所示

2、通过create创建表,指定ID为varchar(36),并设置为主键,如下图所示

3、在插入数据的时候,调用uuid()函数往主键字段里插入uuid值,如下图所示

4、最后查询插入的数据就可以看到id主键列存放的是uuid类型了,如下图所示

参考技术A

你们的想法是不是,想在建表时为id指定uuid,然后每次插入数据都会自动为每一条数据生成uuid呢?就像auto_increment主键自增一样呢?

我只想说 you are too young!

我一开始是这样做的:

create table product(

id varchar(36) primary key default uuid()

sql语句报错。

后来查了查资料,发现mysql好像并不支持在建表时,为某一字段指定默认函数值。但是在Oracle数据库中,却支持这样干,也就可以实现插入数据时,自动生成uuid。

所以在mysql中只能在插入数据时,将uuid()函数值赋值给id字段。

后来,我又想了一个方案,我可以去写一个触发器,每次在执行插入操作时,都为id字段更新为uuid(),但是这种方式还是存在很多问题的,这里就不说了。

最后说明一点(uuid适不适合作为主键):

uuid号称“全球唯一”,实际上业务中一般不会只用一个uuid就保证某个字段的唯一性,因为它并不能保证唯一性,uuid的组成:

Mac地址+时间戳+自增序列,前两个都可以修改,自增序列在不同机器本身就无法保证唯一。既然无法保证唯一,那么没有任何处理的情况下直接将uuid作为主键,显然也是不合适的。

参考技术B 那直接用语句创建就好了,唯一约束可以理解为是主键
create table test
(id int primary key,
name varchar(10),
age int)

说明:其中primary key就是主键,也就代表此表中id字段是唯一的,不可重复。

怎么设置主键自增

在这段代码里,还有就是插入数据怎么总是插入不了

use online;
create table admin(
id int not null unique,
zh varchar(20) not null unique,
mm varchar(20) not null unique,
primary key(id)
);
insert into admin values(NULL,'111','jack','123');
SELECT * FROM admin s;

以sqlserver为例,可用如下语句设置:

create table test
(id int identity(1,1),primary key(id),
name varchar(10))

其中identity(1, 1)为设置主键自增的部分,前边一个1表示从1开始计数,后边一个1表示每次增加的数量。primary key(id)代表id列为主键。

连续执行如下语句:

insert into test(name) values ('a')
insert into test(name) values ('b')
insert into test(name) values ('b')

如图可见,id列达到了自增的目的。

参考技术A 通过int或bigint设置,自增列的类型应为int或bigint型,可以设置起始和每次递增数。
拓展资料
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。
数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:
(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
数据库管理系统是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
参考技术B sqlserver:选中表右键设计→选中自增列看下边的列属性→找到【标识规范】前边'+'点开→【是标识】设为'是',下边的就自己设了。

mysql:选中表右键设计→选中自增列看下边的列属性→ 英文版的下边是 [auto increment]就是自增的意思→勾上,就行了
参考技术C 主键在工具栏有一个钥匙图标,点击即可设置主键。自增则是在列属性中的标识规范中,将标识规范改为是就行了。追问

那我插入数据出现这个Column count doesn't match value count at row 1
是和没设置主键自增有关系吗?

本回答被提问者采纳

以上是关于mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写的主要内容,如果未能解决你的问题,请参考以下文章

mysql自增长主键,删除数据后,将主键顺序重新排序

mysqL主键重复?

为啥我将主键设置为文本(字符串)时无法检索数据

Mysql什么时候建索引什么时候不适合建索引

SQLserver怎么实现将主键,自动加一的功能呢?

是否可以将主键设置为 DEFERRABLE?