在SQL中设置字段默认值使用DEFAULT关键字。例如:ALTER TABLE users ADD COLUMN age INT DEFAULT 18; 这会为age字段设置默认值为18。
从MySQL官方文档
要为表中的列指定默认值,请使用ALTER TABLE ... ALTER COLUMN ... SET DEFAULT语句,或者在CREATE TABLE语句中定义列时指定DEFAULT值。例如:ALTER TABLE mytable ALTER j SET DEFAULT 'a';
PostgreSQL方式
创建表时:CREATE TABLE products (product_no integer DEFAULT nextval('products_product_no_seq'), name text, price numeric DEFAULT 0.0); 修改默认值:ALTER TABLE products ALTER COLUMN price SET DEFAULT 12.00;
SQL Server设置
使用ALTER TABLE ALTER COLUMN语法:ALTER TABLE Person ALTER COLUMN City NVARCHAR(50) NULL DEFAULT 'Seattle'; 或者在CREATE TABLE中:CREATE TABLE Person (ID int IDENTITY PRIMARY KEY, Name nvarchar(40) NOT NULL DEFAULT 'John' );
Oracle数据库
在12c之前:ALTER TABLE mytable MODIFY (column_name DEFAULT default_value); 从12c起支持:ALTER TABLE mytable ADD (column_name data_type DEFAULT default_value);
管理默认属性
查看默认值:MySQL用SHOW CREATE TABLE tablename; PostgreSQL用\d tablename; SQL Server用sp_help 'tablename'; 修改用ALTER TABLE ... ALTER COLUMN ... SET/DROP DEFAULT; 删除默认值:ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
SQLite示例
CREATE TABLE test (a INTEGER DEFAULT 10); INSERT INTO test(a) VALUES(NULL); -- a会是10
FAQ
Q: 如何删除字段默认值?
A: MySQL: ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT; PostgreSQL: ALTER TABLE table_name ALTER COLUMN column_name DROP DEFAULT;
Q: 默认值可以是表达式吗?
A: 是的,如PostgreSQL支持nextval('seq'),SQL Server支持GETDATE()。
Q: 插入NULL会忽略默认值吗?
A: 不,显式插入NULL会设置为NULL,只有不指定列时才用默认值。
Q: 不同数据库语法一样吗?
A: 不太一样,MySQL用ALTER COLUMN SET DEFAULT,PostgreSQL类似但有细微差异。