mysql uuid建表_mysql创建数据库时怎么将主键设置为UUID,建表语句怎么写
时间: 2023-08-14 21:10:40 浏览: 646
在 MySQL 中,可以使用 UUID() 函数来生成 UUID 字符串作为主键。以下是创建表并将主键设置为 UUID 的示例 SQL 语句:
```
CREATE TABLE my_table (
id VARCHAR(36) NOT NULL DEFAULT (UUID()),
name VARCHAR(50) NOT NULL,
age INT,
PRIMARY KEY (id)
);
```
在这个例子中,`id` 列使用 `VARCHAR(36)` 类型存储 UUID 字符串,`NOT NULL` 约束确保该列的值不为 NULL,`DEFAULT (UUID())` 指定了默认值为 UUID() 函数生成的 UUID 字符串。PRIMARY KEY 约束将 `id` 列设置为主键。
注意,如果你使用的是 MySQL 8.0 或更高版本,则可以使用 `uuid()` 函数来生成 UUID 字符串。例如:
```
CREATE TABLE my_table (
id VARCHAR(36) NOT NULL DEFAULT (uuid()),
name VARCHAR(50) NOT NULL,
age INT,
PRIMARY KEY (id)
);
```
相关问题
mysql建表语句中default的意思
### MySQL 中 DEFAULT 关键字的作用与用法
#### 1. **DEFAULT 关键字的基本作用**
在 MySQL 的建表语句中,`DEFAULT` 关键字用于为表中的某列指定一个默认值。这意味着当插入新记录时,如果没有显式地为该列赋值,则会自动使用此默认值[^1]。
```sql
CREATE TABLE example_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
age INT DEFAULT 18, -- 如果未提供年龄,默认为18岁
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 默认时间为当前时间戳
);
```
在此示例中,`age` 列设置了默认值 `18`,而 `created_at` 列则将默认值设置为当前时间戳 `CURRENT_TIMESTAMP`。
---
#### 2. **DEFAULT 关键字的适用场景**
- **常量值作为默认值**:可以为列分配固定的数值、字符串或其他静态值。
```sql
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
status ENUM('active', 'inactive') DEFAULT 'inactive' -- 用户状态默认为 inactive
);
```
- **动态表达式作为默认值**:某些情况下,可以使用内置函数(如 `CURRENT_TIMESTAMP` 或 `UUID()`)生成动态默认值[^1]。
```sql
CREATE TABLE logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
message TEXT NOT NULL,
logged_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 记录日志的时间戳
);
```
- **布尔逻辑的默认值表示**:对于布尔类型(通常映射为 TINYINT),也可以为其设置默认值。
```sql
CREATE TABLE settings (
setting_id INT AUTO_INCREMENT PRIMARY KEY,
is_enabled BOOLEAN DEFAULT FALSE -- 默认禁用
);
```
---
#### 3. **注意事项与限制条件**
- **NOT NULL 约束的影响**:如果某列定义了 `NOT NULL` 并且没有设置 `DEFAULT` 值,则在插入数据时必须为此列提供值;否则会出现错误[^1]。
- **唯一性和主键约束**:即使指定了默认值,也不能违反唯一性或主键约束。例如,两个不同的行不能共享相同的主键值。
- **不支持复杂表达式的默认值**:尽管可以使用一些简单的内置函数(如 `CURRENT_TIMESTAMP`),但更复杂的计算表达式目前并不受支持。
---
#### 4. **修改现有表结构以添加默认值**
除了创建新表时指定默认值外,还可以通过 `ALTER TABLE` 修改已存在的表结构来新增或更改默认值。
```sql
-- 添加新的列并指定默认值
ALTER TABLE employees ADD COLUMN hire_date DATE DEFAULT '2023-01-01';
-- 更改已有列的默认值
ALTER TABLE employees ALTER COLUMN department SET DEFAULT 'HR';
```
---
#### 5. **与其他数据库系统的差异比较**
需要注意的是,不同数据库管理系统对默认值的支持程度可能存在细微差别。例如,在 SQL Server 和 Oracle 中,虽然也提供了类似的 `DEFAULT` 功能,但在语法细节上有所区别[^2][^4]。因此,在跨平台迁移时应特别留意这些兼容性问题。
---
### 示例总结
综上所述,MySQL 中的 `DEFAULT` 关键字是一个非常实用的功能,能够有效简化数据录入过程并提高程序健壮性。合理运用它可以减少不必要的手动干预,同时确保数据一致性。
---
mysql生成uuid主键
MySQL生成UUID主键的方法是使用UUID()函数。这个函数会生成一个全局唯一的标识符,可以用作表的主键。通过在创建表时指定主键类型为CHAR(36),并将默认值设置为UUID(),可以实现自动生成UUID主键。例如,可以使用以下语句创建一个具有UUID主键的表:
```
CREATE TABLE t_uuid (
id CHAR(36) PRIMARY KEY DEFAULT UUID(),
r1 INT,
KEY idx_r1(r1)
);
```
这样,每次插入新记录时,MySQL会自动为id列生成一个唯一的UUID值。\[1\]
#### 引用[.reference_title]
- *1* *2* [第17期:索引设计(主键设计)](https://blog.csdn.net/ActionTech/article/details/110470533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [MySQL UUID主键-由PHP或MySQL生成?](https://blog.csdn.net/weixin_28836507/article/details/118808024)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文
相关推荐















