sql server:默认约束不起作用

um6iljoc  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(478)

我的代码有个小问题。我添加了一个默认约束,但由于某些原因它不想工作。我的代码:

CREATE TABLE oc.students 
(
    stud_id INT PRIMARY KEY IDENTITY (1,1),
    first_name VARCHAR(50) NOT NULL,
    mid_name VARCHAR(50),
    last_name VARCHAR(50) NOT NULL,
    DOB DATE,
    email VARCHAR (255) NOT NULL,
    country VARCHAR(50) NOT NULL,
    phone VARCHAR(20),
    reg_date DATE NOT NULL
);

ALTER TABLE oc.students
ADD DEFAULT GETDATE() FOR [reg_date];

INSERT INTO oc.students (first_name, mid_name, last_name, DOB, email, country, phone, reg_date)
VALUES ('John', '', 'Smith', '1986-12-24', 'js@gmail.com', 'Malta', 123456789, '')

SELECT * 
FROM oc.students

结果:

有什么问题吗?

aamkag61

aamkag611#

'' 以及 NULL 是不一样的(好吧,在除oracle以外的任何数据库中)。第一个字符串恰好没有字符。第二个是sql常量值,它具有“unknown value”的语义,通常用于缺少的值。
您正在插入 '' 这被解释为 0 ,转换为基准日期。实际上,这个术语是epoch,它是a用来开始计算日期/时间值的日期。
如果需要默认值,可以使用:

VALUES (
    'John',
    '',
    'Smith',
    '1986-12-24',
    'js@gmail.com',
    'Malta',
    123456789,
    DEFAULT
    )

或者,更常见的情况是,该列被省略了:

INSERT INTO oc.students (
                    first_name,
                    mid_name,
                    last_name,
                    DOB,
                    email,
                    country,
                    phone)
VALUES (
    'John',
    '',
    'Smith',
    '1986-12-24',
    'js@gmail.com',
    'Malta',
    123456789
    )

相关问题