HCRM博客

为什么在编写SQL约束时总是遇到错误?

在SQL中,约束(Constraints)是用来规定表中的数据规则的机制,如果存在违反约束的数据行为,这些行为会被终止,约束可以在创建表时规定(通过CREATE TABLE语句),或者在表创建之后规定(通过ALTER TABLE语句),以下是几种常见的SQL约束及其使用示例:

1. NOT NULL 约束

为什么在编写SQL约束时总是遇到错误?-图1
(图片来源网络,侵权删除)

NOT NULL 约束强制列不接受NULL值,这意味着如果不向字段添加值,就无法插入新记录或更新记录。

CREATE TABLE Persons (
    PersonID int NOT NULL,
    Name varchar(255) NOT NULL,
    Address varchar(255),
    City varchar(255)
);

在这个例子中,PersonIDName列被强制为非空。

2. UNIQUE 约束

UNIQUE约束确保某列的每行必须有唯一的值。

CREATE TABLE Orders (
    OrderID int NOT NULL,
    CustomerID int,
    EmployeeID int,
    OrderDate datetime,
    ShipmentID int,
    UNIQUE (OrderID)
);

在这个例子中,OrderID列被设置为唯一约束。

3. PRIMARY KEY 约束

为什么在编写SQL约束时总是遇到错误?-图2
(图片来源网络,侵权删除)

PRIMARY KEY约束是NOT NULL和UNIQUE的结合,用于确保某列(或多列)有唯一标识,每个表只能有一个PRIMARY KEY约束。

CREATE TABLE Persons (
    PersonID int PRIMARY KEY,
    Name varchar(255) NOT NULL,
    Address varchar(255),
    City varchar(255)
);

在这个例子中,PersonID列被设置为主键。

4. FOREIGN KEY 约束

FOREIGN KEY约束用于确保一个表中的数据匹配另一个表中的值的参照完整性。

CREATE TABLE Orders (
    OrderID int NOT NULL,
    CustomerID int,
    EmployeeID int,
    OrderDate datetime,
    ShipmentID int,
    CONSTRAINT FK_Customer FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

在这个例子中,CustomerID列被设置为外键,引用Customers表中的CustomerID列。

5. CHECK 约束

为什么在编写SQL约束时总是遇到错误?-图3
(图片来源网络,侵权删除)

CHECK约束用于保证列中的值符合指定的条件。

CREATE TABLE Products (
    ProductID int PRIMARY KEY,
    ProductName varchar(255),
    QuantityPerUnit int,
    Price decimal(8,2) CHECK (Price >= 0)
);

在这个例子中,Price列被设置为检查约束,确保价格大于等于零。

6. DEFAULT 约束

DEFAULT约束用于规定没有给列赋值时的默认值。

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderDate datetime NOT NULL DEFAULT GETDATE()
);

在这个例子中,OrderDate列被设置为默认约束,默认值为当前日期和时间。

常见问题及解决方案

问题1: SQL Server插入数据出现约束失败的情况

解答: 这种情况通常是由于外键约束引起的,插入数据时,外键引用的记录不存在,会导致冲突,可以通过先插入被引用的记录来解决此问题,在课程表中插入课程号前,确保课程号已经存在。

先插入课程号为6的记录
INSERT INTO Courses (Cno, Cname) VALUES (6, 'Math');
再插入其他记录
INSERT INTO Courses (Cno, Cname) VALUES (4, 'English');

问题2: 如何修改已存在的表以添加或删除约束?

解答: 可以使用ALTER TABLE语句来添加或删除约束。

添加NOT NULL约束到City列
ALTER TABLE Persons ALTER COLUMN City varchar(255) NOT NULL;
删除NOT NULL约束从City列
ALTER TABLE Persons ALTER COLUMN City varchar(255);

注意:在添加和删除NOT NULL约束时,使用的命令可能因数据库管理系统的不同而有所不同,SQL Server不支持ALTER COLUMN命令,需要使用MODIFY命令。

分享:
扫描分享到社交APP
上一篇
下一篇