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命令。

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/gz/3787.html

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