当前位置: 首页 > news >正文

MySQL(49)如何使用DEFAULT指定默认值?

在MySQL中,DEFAULT 关键字用于为列指定一个默认值,当插入一条记录时,如果没有为该列提供值,则会使用该默认值。DEFAULT 可以用于不同的数据类型,包括数值类型、字符串类型、日期和时间类型等。

1. 基本语法

CREATE TABLE table_name (column_name data_type DEFAULT default_value
);

2. 使用场景

  • 数值类型:可以指定一个数值作为默认值。
  • 字符串类型:可以指定一个字符串作为默认值。
  • 日期和时间类型:可以指定一个日期或时间值作为默认值。
  • 布尔类型:可以指定 TRUEFALSE 作为默认值。

3. 示例代码

以下是一些示例代码,展示了如何使用 DEFAULT 指定默认值创建表,并插入和检索数据。

数值类型的DEFAULT

创建一个包含数值类型列的表:

CREATE DATABASE test_default_db;
USE test_default_db;CREATE TABLE employees (emp_id INT AUTO_INCREMENT PRIMARY KEY,emp_name VARCHAR(50) NOT NULL,emp_age INT DEFAULT 30,  -- 默认年龄为30emp_salary DECIMAL(10, 2) DEFAULT 5000.00  -- 默认工资为5000.00
);

插入数据:

-- 插入数据,不提供默认值的列
INSERT INTO employees (emp_name) VALUES 
('Alice'),
('Bob');

检索数据:

SELECT emp_id, emp_name, emp_age, emp_salary FROM employees;

检索结果:

+--------+----------+---------+------------+
| emp_id | emp_name | emp_age | emp_salary |
+--------+----------+---------+------------+
|      1 | Alice    |      30 |   5000.00  |
|      2 | Bob      |      30 |   5000.00  |
+--------+----------+---------+------------+
字符串类型的DEFAULT

创建一个包含字符串类型列的表:

CREATE TABLE products (product_id INT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(100) NOT NULL,product_description TEXT DEFAULT 'No description available'  -- 默认描述为 'No description available'
);

插入数据:

-- 插入数据,不提供默认值的列
INSERT INTO products (product_name) VALUES 
('Laptop'),
('Smartphone');

检索数据:

SELECT product_id, product_name, product_description FROM products;

检索结果:

+-----------+-------------+---------------------------+
| product_id| product_name| product_description       |
+-----------+-------------+---------------------------+
|         1 | Laptop      | No description available  |
|         2 | Smartphone  | No description available  |
+-----------+-------------+---------------------------+
日期和时间类型的DEFAULT

创建一个包含日期和时间类型列的表:

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,customer_id INT NOT NULL,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 默认时间为当前时间delivery_date DATE DEFAULT '2023-12-31'  -- 默认交货日期为2023-12-31
);

插入数据:

-- 插入数据,不提供默认值的列
INSERT INTO orders (customer_id) VALUES 
(1),
(2);

检索数据:

SELECT order_id, customer_id, order_date, delivery_date FROM orders;

检索结果:

+---------+-------------+---------------------+--------------+
| order_id| customer_id | order_date          | delivery_date|
+---------+-------------+---------------------+--------------+
|       1 |           1 | 2023-10-05 16:30:00 | 2023-12-31   |
|       2 |           2 | 2023-10-05 16:35:00 | 2023-12-31   |
+---------+-------------+---------------------+--------------+
布尔类型的DEFAULT

创建一个包含布尔类型列的表:

CREATE TABLE tasks (task_id INT AUTO_INCREMENT PRIMARY KEY,task_name VARCHAR(100) NOT NULL,is_completed BOOLEAN DEFAULT FALSE  -- 默认未完成
);

插入数据:

-- 插入数据,不提供默认值的列
INSERT INTO tasks (task_name) VALUES 
('Write documentation'),
('Fix bug');

检索数据:

SELECT task_id, task_name, is_completed FROM tasks;

检索结果:

+--------+--------------------+--------------+
| task_id| task_name          | is_completed |
+--------+--------------------+--------------+
|      1 | Write documentation|            0 |
|      2 | Fix bug            |            0 |
+--------+--------------------+--------------+

4. 更复杂的示例:用户管理系统

以下是一个更复杂的示例,展示了如何在用户管理系统中使用 DEFAULT

创建用户表
CREATE TABLE users (user_id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,signup_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  -- 默认注册时间为当前时间status ENUM('active', 'inactive', 'pending') DEFAULT 'pending',  -- 默认状态为 pendinglogin_attempts INT DEFAULT 0  -- 默认登录尝试次数为0
);
插入用户数据
-- 插入用户数据,不提供默认值的列
INSERT INTO users (username, password) VALUES 
('john_doe', 'password123'),
('jane_smith', 'securepassword');
检索用户数据
-- 检索用户数据
SELECT user_id, username, signup_date, status, login_attempts FROM users;
检索结果
+---------+-------------+---------------------+----------+----------------+
| user_id | username    | signup_date         | status   | login_attempts |
+---------+-------------+---------------------+----------+----------------+
|       1 | john_doe    | 2023-10-05 16:40:00 | pending  |              0 |
|       2 | jane_smith  | 2023-10-05 16:45:00 | pending  |              0 |
+---------+-------------+---------------------+----------+----------------+

5. 注意事项

  • 数据约束:确保默认值符合该列的数据类型和约束条件。例如,默认值必须在枚举类型(ENUM)的可选值范围内。
  • 性能影响:合理使用默认值可以简化数据插入操作,但在设计表结构时仍需考虑性能影响和业务需求。
  • 隐式行为:在某些情况下,未提供默认值的列在插入数据时会变为 NULL,这可能会导致数据完整性问题,因此建议明确指定默认值。

小结

  • DEFAULT 关键字:用于为列指定默认值,当插入记录时如果没有为该列提供值,则使用该默认值。
  • 适用数据类型:适用于数值类型、字符串类型、日期和时间类型、布尔类型等。
  • 实际应用:通过指定默认值,可以简化数据插入操作,提高数据完整性和一致性。

通过理解 DEFAULT 关键字的用途和特点,可以更好地设计和优化数据库表,确保数据插入操作符合业务需求。上述示例展示了如何在实际应用中使用 DEFAULT 关键字设计数据库表,并插入和检索数据。

http://www.xdnf.cn/news/758827.html

相关文章:

  • 配置Ollama环境变量,实现远程访问
  • 怎么样提高研发质量?
  • 七.MySQL内置函数
  • Practice 2025.6.1—— 二叉树进阶面试题(2)
  • 研读论文《Attention Is All You Need》(13)
  • 【笔记】MSYS2 安装 Python 构建依赖记录Cython + Ninja + Meson + meson-python
  • 七、物理.
  • Flickr30k_Entities数据集
  • 【项目记录】登录认证(下)
  • 6.运算放大器—电源抑制比(五)
  • 2002-2022年 城市市政公用设施水平、环境、绿地等数据-社科经管实证数据
  • 殷咏梅教授:OptiTROP-Breast05亮相2025 ASCO,中国原创TROP2 ADC为mTNBC一线治疗带来新希望
  • 2024年数维杯国际大学生数学建模挑战赛B题空间变量协同估计方法研究解题全过程论文及程序
  • ZIP Cracker版本更新了
  • java中IO流分为几种
  • 深入Java NIO:构建高性能网络应用
  • AAA基础配置
  • LeetCode - 234. 回文链表
  • Roller: 抽奖系统测试的幕后剧本-测试报告
  • Spring AI Image Model、TTS,RAG
  • PINN模型相关原理
  • 【CBAP50技术手册】#32 Organizational Modelling(组织建模):BA(业务分析师)的“变革导航图”
  • 安卓jetpack compose学习笔记-UI基础学习
  • 机电的焊接技术
  • 《中国棒垒球》注册青少年运动员需要什么条件·棒球1号位
  • 【Go-6】数据结构与集合
  • [网页五子棋][对战模块]处理连接成功,通知玩家就绪,逻辑问题(线程安全,先手判定错误)
  • Spring Boot,注解,@ComponentScan
  • linux驱动开发(1)-内核模块
  • rl_sar功能包详解