今天给各位分享SQL基础知识约束(实例)的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
NOT NULL 约束强制字段始终包含值。这意味着如果不向字段添加值,则无法插入新记录或更新记录。
以下SQL 强制“Customers”表的“CustomerID”列和“Name”列不接受NULL 值:
CREATE TABLE 客户(客户ID INT NOT NULL、姓名VARCHAR(10) NOT NULL、地址VARCHAR(50) NULL、城市VARCHAR(20) NULL、邮政编码CHAR(6) NULL、省份VARCHAR(20) NULL);一旦这两个列中插入了空值NULL,系统就会报错信息。例如,我们插入以下信息:
INSERT INTO dbo.Customers (姓名、地址、城市、邮政编码、省份)VALUES (NULL,’花城大道1号’,’广州市’,’51000′,NULL)(提示:可以向左滑动代码或正确的)
结果:
独特的限制
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和PRIMARY KEY 约束都为一列或一组列提供唯一性保证。
PRIMARY KEY 约束已自动定义UNIQUE 约束。
请注意,每个表可以有多个UNIQUE 约束,但每个表只能有一个PRIMARY KEY 约束。
CREATE TABLE 时的SQL UNIQUE 约束
创建“Orders”表时,以下SQL 在“OrderID”列上创建UNIQUE 约束:
MySQL:
CREATE TABLE dbo.Orders(订单ID INT NOT NULL、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、运输ID INT NULL、UNIQUE(订单ID));SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Orders(订单ID INT NOT NULL UNIQUE、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、运输ID INT NULL);唯一的约束是受约束的列。插入新数据时,如果和现有列的值相同,就会报错。
INSERT INTO dbo.Orders(订单ID、客户ID、员工ID、订单日期、发货ID)值( 1001,1,2,’2018-11-21 19:21:32′,1),( 1001,2,3,’ 2018 -11-22 11:22:32′,5) 结果:
要命名UNIQUE 约束并为多个列定义UNIQUE 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Orders( 订单ID INT NOT NULL、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、送货ID INT NULL、CONSTRAINT uc_OrderID UNIQUE (订单ID、送货ID));
ALTER TABLE 时的UNIQUE 约束
要在创建表时在“订单ID”列上创建UNIQUE 约束,请使用以下SQL:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE OrdersADD UNIQUE (订单ID) 要命名UNIQUE 约束并为多个列定义UNIQUE 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE CustomersADD CONSTRAINT uc_CustomerID UNIQUE(客户ID、名称)
删除UNIQUE 约束
要删除UNIQUE 约束,请使用以下SQL:
MySQL:
ALTER TABLE OrdersDROP INDEX uc_OrderIDSQL Server/Oracle/MS 访问:
ALTER TABLE CustomersDROP CONSTRAINT uc_CustomerID
主键约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一值。
主键列不能包含NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
CREATE TABLE 时的主键约束
创建“Customers”表时,以下SQL 在“CustomerID”列上创建PRIMARY KEY 约束:
MySQL:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL,名称VARCHAR(10) NULL,地址VARCHAR(50) NULL,城市VARCHAR(20) NULL,邮政编码CHAR(6) NULL,省份VARCHAR(20) NULL,主键(客户ID));
SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL 主键、姓名VARCHAR(10) NULL、地址VARCHAR(50) NULL、城市VARCHAR(20) NULL、邮政编码CHAR(6) NULL、省份VARCHAR(20) NULL) ;
要命名PRIMARY KEY 约束并在多个列上定义PRIMARY KEY 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL 主键、姓名VARCHAR(10) NULL、地址VARCHAR(50) NULL、城市VARCHAR(20) NULL、邮政编码CHAR(6) NULL、省份VARCHAR(20) NULL、 CONSTRAINT pk_CustomerID PRIMARY KEY (客户ID, 姓名));注意:上例中只有一个主键PRIMARY KEY (pk_CustomerID)。但是,pk_CustomerID 的值由两列(客户ID 和名称)组成。
ALTER TABLE 时的PRIMARY KEY 约束
要在创建表时在“客户ID”列上创建PRIMARY KEY 约束,请使用以下SQL:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE CustomersADD PRIMARY KEY (客户ID) 要命名PRIMARY KEY 约束并为多个列定义PRIMARY KEY 约束,请使用以下SQL 语法:
删除PRIMARY KEY 约束
要删除PRIMARY KEY 约束,请使用以下SQL:
MySQL:
ALTER TABLE CustomersDROP PRIMARY KEYSQL Server/Oracle/MS Access:
ALTER TABLE CustomersDROP CONSTRAINT pk_CustomerID
外键约束
一个表中的外键指向另一表中的主键。
让我们通过一个例子来解释外键。请看下面两个表:
“客户”表:
“订单”表:
请注意,“订单”表中的“客户ID”列指向“客户”表中的“客户ID”列。
“客户”表中的“客户ID”列是“客户”表中的主键。
“订单”表中的“CustomerID”列是“订单”表中的外键。
FOREIGN KEY 约束用于防止破坏表之间连接的行为。
FOREIGN KEY 约束还可以防止非法数据插入到外键列中,因为它必须是它指向的表中的值之一。
CREATE TABLE 时的外键约束
创建“Orders”表时,以下SQL 在“Customer ID”列上创建FOREIGN KEY 约束:
MySQL:
CREATE TABLE 订单(订单ID INT NOT NULL、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、运输ID INT NULL、PRIMARY KEY(订单ID)、FOREIGN KEY(客户ID)REFERENCES 客户(客户ID)) SQL Server/Oracle/MS 访问:
CREATE TABLE 订单(订单ID INT NOT NULL PRIMARY KEY、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、运输ID INT NULL、FOREIGN KEY(客户ID)REFERENCES 客户(客户ID))
要命名FOREIGN KEY 约束并为多个列定义FOREIGN KEY 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
CREATE TABLE Orders( 订单ID INT NOT NULL、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL、运输ID INT NULL、PRIMARY KEY(订单ID)、CONSTRAINT fk_CusOrders FOREIGN KEY(客户ID)REFERENCES 客户ID))
ALTER TABLE 中的外键约束
创建“Orders”表后,要在“Customer ID”列上创建FOREIGN KEY 约束,请使用以下SQL:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE OrdersADD FOREIGN KEY (Customer ID) REFERENCES Customers (Customer ID) 要命名FOREIGN KEY 约束并为多个列定义FOREIGN KEY 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE OrdersADD CONSTRAINT fk_CusOrdersFOREIGN KEY(客户ID) REFERENCES 人员(客户ID)
删除FOREIGN KEY 约束
要删除FOREIGN KEY 约束,请使用以下SQL:
MySQL:
ALTER TABLE OrdersDROP FOREIGN KEY fk_CusOrdersSQL Server/Oracle/MS 访问:
ALTER TABLE OrdersDROP CONSTRAINT fk_CusOrders
默认约束
DEFAULT 约束将默认值插入到列中。
如果未指定其他值,则默认值将添加到所有新记录中。
CREATE TABLE 时的默认约束
创建“Customers”表时,以下SQL 在“City”列上创建DEFAULT 约束:
My SQL/SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL,姓名VARCHAR(10) NULL,地址VARCHAR(50) NULL,城市VARCHAR(20) NULL DEFAULT ‘北京’,邮政编码CHAR(6) NULL,省份VARCHAR(20)无效的);
DEFAULT 约束也可用于使用GETDATE() 等函数在SQL Server 中插入系统值:
CREATE TABLE dbo.Orders(订单ID INT NOT NULL、客户ID INT NULL、员工ID INT NULL、订单日期DATETIME NULL DEFAULT GETDATE()、送货ID INT NULL);
ALTER TABLE 时的DEFAULT 约束
要在创建表时在“City”列上创建DEFAULT 约束,请使用以下SQL:
MySQL:
ALTER TABLE CustomersALTER city SET DEFAULT ‘北京城市’SQL Server/MS Access:
ALTER TABLE CustomersADD CONSTRAINT DF_Customers DEFAULT(‘北京市’) FOR City–注释
–customers是表名
–城市已列出
–DF_Customers 是我们创建的默认约束的名称。约束名称一般为:约束类型缩写_表名。
甲骨文:
ALTER TABLE CustomersMODIFY city DEFAULT ‘北京市’
删除DEFAULT 约束
要删除DEFAULT 约束,请使用以下SQL:
MySQL:
ALTER TABLE CustomersALTER City DROP DEFAULTSQL Server/Oracle/MS Access:
ALTER TABLE 客户ALTER COLUMN 城市DROP DEFAULT
检查约束
CHECK约束用于限制列中值的范围。
如果在单个列上定义CHECK 约束,则该列只允许使用特定值。
如果在表上定义了CHECK 约束,则该约束会根据该行中其他列的值来限制特定列中的值。
创建表时检查约束
创建“Customers”表时,以下SQL 在“CustomerID”列上创建CHECK 约束。 CHECK 约束规定“CustomerID”列必须仅包含大于0 的整数。
MySQL:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL,名称VARCHAR(10) NULL,地址VARCHAR(50) NULL,城市VARCHAR(20) NULL,邮政编码CHAR(6) NULL,省份VARCHAR(20) NULL,CHECK (客户ID0)) ;
SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL CHECK (客户ID0)、名称VARCHAR(10) NULL、地址VARCHAR(50) NULL、城市VARCHAR(20) NULL、邮政编码CHAR(6) NULL、省份VARCHAR(20) NULL) ;要命名CHECK 约束并为多个列定义CHECK 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
CREATE TABLE dbo.Customers(客户ID INT NOT NULL、名称VARCHAR(10) NULL、地址VARCHAR(50) NULL、城市VARCHAR(20) NULL、邮政编码CHAR(6) NULL、省份VARCHAR(20) NULL、CONSTRAINT chk_Customers CHECK(客户ID0 AND city=’北京’));
ALTER TABLE 期间检查约束
要在创建表时在“CustomerID”列上创建CHECK 约束,请使用以下SQL:
MySQL/SQL Server/Oracle/MS Access:
ALTER TABLE CustomersADD CHECK (Customer ID0) 要命名CHECK 约束并为多个列定义CHECK 约束,请使用以下SQL 语法:
MySQL/SQL Server/Oracle/MS 访问:
ALTER TABLE CustomersADD CONSTRAINT chk_Customers CHECK (客户ID0 AND city=’北京’)
删除CHECK 约束
要检查约束,请使用以下SQL:
SQL Server/Oracle/MS 访问:
ALTER TABLE CustomersDROP CONSTRAINT chk_CustomersMySQL:
ALTER TABLE CustomersDROP CHECK chk_Customers
注解
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/121198.html
用户评论
别留遗憾
终于找到一篇讲 SQL 基础知识约束的博客了!看完这篇文章,我对数据约束的概念和应用有了更深入的理解,那些例子都很贴近实际情况,受益匪浅。我之前总是觉得约束很麻烦,现在看来它们其实很好用,可以有效地维护数据库完整性。 👍
有11位网友表示赞同!
南宫沐风
学习 SQL 的时候常常会碰到约束,但是总感觉不太明白作用。这篇文章讲的比较清楚,用实例进行解释也很生动,一下子就明白了!还是要注意学习这些基础知识,以后做数据开发时一定派上用场。
有20位网友表示赞同!
∞◆暯小萱◆
这篇博文写的很不错,对SQL的基础知识进行了很好的阐述,特别是关于限制条件的例子,让我更加直观地明白了它们的作用。现在感觉再写数据库脚本的时候会更加的轻松了!
有11位网友表示赞同!
箜篌引
文章内容确实对理解 SQL 基础知识很有帮助,特别是对于入门的小白来说非常有用。但是一些术语的解释感觉略显简略,希望能更深入地讲解一下。
有11位网友表示赞同!
夏以乔木
数据约束真的很重要,这篇文章提醒我要从写代码一开始就做好数据的规范控制。例如在添加一个数据库字段的时候,就应该考虑使用合适的限制条件来确保数据类型和范围的一致性。
有15位网友表示赞同!
哥帅但不是蟋蟀
讲真,看这文章还是有点费劲, SQL 基础知识本来就比较抽象,加上例子也显得过于繁琐了,读起来不太通畅。希望以后能够用更生动的语言和图片来讲解,更容易理解!
有11位网友表示赞同!
箜明
我觉得这篇博文太注重理论知识的解释了,缺乏实践操作指导。最好能结合一些实际项目案例进行演示,这样更加贴近我们的学习需求。
有16位网友表示赞同!
男神大妈
SQL 相关的约束类型比较多,这篇文章整理得很清楚,而且用例子说明得也不错!以后在做数据库设计的时候可以用到这篇博文。
有17位网友表示赞同!
早不爱了
终于明白什么叫做数据完整性和一致性了!谢谢作者的细致讲解。有了这些约束知识,我相信可以写出更 robust 的数据库脚本!
有16位网友表示赞同!
惦着脚尖摘太阳
这篇文章只是讲了一些非常基础的东西啊,我还想深入了解一些更高级的数据约束机制,例如外键约束和触发器等。希望以后文章能涵盖更多内容!
有5位网友表示赞同!
一笑抵千言
对于刚接触 SQL 的人来说,这篇博文可能会有些难懂,建议可以先把一些基本的语法介绍一下,再讲解约束的概念。
有6位网友表示赞同!
隔壁阿不都
数据约束是写 SQL 最重要的方面之一,这篇文章的讲解很有帮助,让我对这个知识点更加深入的理解了,强烈推荐给所有学习SQL 的朋友们!
有17位网友表示赞同!
玻璃渣子
我之前总觉得约束只是代码中的一个小细节,其实它关系到数据的完整性和一致性。这篇博文让我开眼界,以后我会更加重视数据约束的设计和编写。
有5位网友表示赞同!
煮酒
数据库表的设计很重要啊, 只能用这篇文章例子说明一些基本情况,我还想了解针对不同场景的数据约束设计,例如电商网站、社交平台等等的数据库表设计案例!
有13位网友表示赞同!
自繩自縛
文章写得不错,很清晰地讲解了不同类型的 SQL 数据约束。不过我觉得对于每个约束类型来说,可以添加更多实用的代码例子,这样对理解更加深化。
有6位网友表示赞同!
容纳我ii
SQL 基础知识很重要,这篇博文讲的很好用,让我掌握了一些基础的数据库设计技能! 👍
有16位网友表示赞同!
冷落了♂自己·
文章讲解得很棒!终于明白为什么数据约束这么重要了,它能够有效地维护数据库的数据质量和完整性。以后我也要把数据约束融入到我的编程习惯中。
有6位网友表示赞同!
我就是这样一个人
学习 SQL 真不容易啊!这篇博文虽然只是一些基础知识,但我还是感觉很有帮助,感谢作者的辛苦分享!
有10位网友表示赞同!
白恍
这篇文章没有提到一些高级的数据约束,例如数据库触发器。我希望以后文章可以介绍更加深入的内容。
有15位网友表示赞同!