在MySQL中,建表语句中的默认值(Default Value)是指当插入新记录时,如果没有为某个字段提供值,系统会自动为该字段赋予的值。默认值可以是常量、表达式或者函数。
MySQL中的默认值类型主要包括:
'default_value'。NOW()表示当前时间。UUID()生成唯一标识符。CURRENT_TIMESTAMP作为创建时间和更新时间的默认值。'active'。AUTO_INCREMENT自增主键。CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'active'
);问题1:默认值设置错误
原因:可能是由于语法错误或者默认值类型不匹配导致的。
解决方法:检查建表语句的语法,确保默认值类型与字段类型匹配。
-- 错误示例
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT 'now', -- 错误,默认值应为函数
status VARCHAR(20) DEFAULT 'active'
);
-- 正确示例
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 正确,默认值为函数
status VARCHAR(20) DEFAULT 'active'
);问题2:默认值不生效
原因:可能是由于插入语句中显式地为该字段提供了值,或者插入语句中没有使用DEFAULT关键字。
解决方法:确保插入语句中没有显式地为该字段提供值,或者使用DEFAULT关键字。
-- 错误示例
INSERT INTO users (username, email, created_at, status) VALUES ('user1', 'user1@example.com', NOW(), 'active');
-- 正确示例
INSERT INTO users (username, email) VALUES ('user1', 'user1@example.com'); -- 使用默认值
INSERT INTO users (username, email, created_at, status) VALUES ('user1', 'user1@example.com', DEFAULT, DEFAULT); -- 显式使用默认值