首页 > 数据库 >SQL约束

SQL约束

时间:2023-03-11 16:22:21浏览次数:35  
标签:varchar 约束 KEY SQL TABLE NULL 255

1、约束

1.1 约束
在 SQL 中,约束是规定表中的数据规则。若存在违反约束的行为,行为就会被阻止。它能帮助管理员更好地管理数据库,并且确保数据库中数据的正确性和有效性。例如在后台的数据库设计中对要输入的数据进行核查或判断,再决定是否写入数据库,这都是约束的应用。

1.1、非空约束NOT NULL

NOT NULL 约束强制列不接受 NULL 值,强制字段始终包含值,这意味着,如果不向字段添加值,就无法插入新纪录或者更新记录。
下面的 SQL 强制 ID 列、 LastName 列以及 FirstName 列不接受 NULL 值:

CREATE TABLE `Persons` (
    `ID` int NOT NULL,
    `LastName` varchar(255) NOT NULL,
    `FirstName` varchar(255) NOT NULL,
    `Age` int
);

在一个已创建的表的 Age 字段中添加 NOT NULL 约束如下所示:

ALTER TABLE `Persons`
	MODIFY `Age` int NOT NULL;

在一个已创建的表的 Age 字段中删除 NOT NULL 约束如下所示:

ALTER TABLE `Persons`
	MODIFY `Age` int NULL;

注意
不要把 NULL 值与空串相混淆。NULL 值是没有值,

它不是空串。如果指定' '(两个单引号,其间没有字符),这
在 NOT NULL 列中是允许的。空串是一个有效的值,它不是无
值。NULL 值用关键字 NULL 而不是空串指定。

1.2唯一约束UNIQUE

在前面的学习中我们知道了 NOT NULL 约束是强制列不接受 NULL 值。
在有些情况下,我们不希望一个表中出现重复的记录,这时候我们需要用到 UNIQUE 约束来解决这些问题。

  • UNIQUE约束唯一标识数据库表中的每条记录
  • UNIQUE 和 主键约束均为列或列集合提供了唯一性的保证
  • 主键约束会自动定义一个UNIQUE约束,或者说主键约束是一种特殊的UNIQUE约束。但是二者有明显的区别:每个表可以有多个UNIQUE约束,但是只能有一个主键约束。

1.2.1CREATE TABLE 时的 UNIQUE 约束

MySQL

CREATE TABLE `Persons`
(
`P_Id` int NOT NULL,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255),
`Address` varchar(255),
`City` varchar(255),
UNIQUE (`P_Id`)
)

SQL Server | Oracle | MS Access

CREATE TABLE `Persons`
(
`P_Id` int NOT NULL UNIQUE,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255),
`Address` varchar(255),
`City` varchar(255)
)

命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束:
MySQL / SQL Server / Oracle / MS Access

CREATE TABLE `Persons`
(
`P_Id` int NOT NULL,
`LastName` varchar(255) NOT NULL,
`FirstName` varchar(255),
`Address` varchar(255),
`City` varchar(255),
CONSTRAINT uc_PersonID UNIQUE (`P_Id`,`LastName`)
)

1.2.2 ALTER TABLE 时的 UNIQUE 约束

当表已被创建时,在P_id列创建UNIQUE约束:
MySQL / SQL Server / Oracle / MS Access

ALTER TABLE `Persons`
	ADD UNIQUE (`P_Id`)

当表已被创建时,需命名UNIQUE约束,并定义多个列的UNIQUE约束:
MySQL / SQL Server / Oracle / MS Access

ALTER TABLE `Persons`
ADD CONSTRAINT uc_PersonID UNIQUE (`P_Id`,`LastName`)

1.2.3撤销UNIQUE约束

如需撤销 UNIQUE 约束 :

MySQL

ALTER TABLE `Persons`
DROP INDEX uc_PersonID

SQL Server / Oracle / MS Access

ALTER TABLE `Persons`
DROP CONSTRAINT uc_PersonID

1.3主键约束PRIMARY KEY

PRIMARY KEY 约束唯一标识数据库表中的每条记录 ,简单的说,PRIMARY KEY = UNIQUE + NOT NULL ,从技术的角度来看,PRIMARY KEY 和 UNIQUE 有很多相似之处。但还是有以下区别:

NOT NULL UNIQUE 可以将表的一列或多列定义为唯一性属性,而 PRIMARY KEY 设为多列时,仅能保证多列之和是唯一的,具体到某一列可能会重复。
PRIMARY KEY 可以与外键配合,从而形成主从表的关系,而 NOT NULL UNIQUE 则做不到这一点

如:
表一:用户id(主键),用户名
表二:银行卡号id(主键),用户id(外键)
则表一为主表,表二为从表

  • 更大的区别在逻辑设计上。
    PRIMARY KEY 一般在逻辑设计中用作记录标识,这也是设置 PRIMARY KEY 的本来用意,而 UNIQUE 只是为了保证域/域组的唯一性。

1.3.1CREATE TABLE时添加PRIMARY KEY 约束

标签:varchar,约束,KEY,SQL,TABLE,NULL,255
From: https://www.cnblogs.com/atwood-pan/p/17206318.html

相关文章

  • sqlite 常见命令及操作
    sqlite系统命令sqlitetest.db                         创建test.db文件并进入sqlite3sqlite>.database  ......
  • sqlite3 命令行
    进入sqlite3命令行模式安装好sqlite3之后,在linux命令行中输入sqlite3,进入sqlite3的命令行模式。root@172:/#sqlite3SQLiteversion3.23.12018-04-1017......
  • 10 Best MySQL Client GUI Interface – Free Download
    10BestMySQLClientGUIInterface–FreeDownloadThoseMySQLclientGUIinterfaceiseasysoftwareforwindowstouseforcontrollingdatabaseiswarehoused......
  • SQL中截取字符串方法
    1left(str,length)#从左边开始截取str,length是截取的长度23right(str,length)#从右边开始截取str,length是截取的长度45substring(str,substr,m)#返回字符subs......
  • SQL函数——时间函数
    1、使用NOW()、CURDATE()、CURTIME()获取当前时间在这里我有一个问题想问问大家,你们平时都是怎么样子获取时间的呢?是不是通过手表、手机、电脑等设备了解到的,那么你们......
  • mysql主从数据不同步,重新配置主从同步
    主从数据不一致,重新配置主从同步也是一种解决方法。1.从库停止主从复制stopslave;2.对主库数据库加锁flushtableswithreadlock;3.备份主库数据mysqldump......
  • mysql8.0.6+小版本升级
    概述mysql开源的数据库,发现漏洞及时升级mysql。mysql8.0.6+支持直接替换二进制内部完成升级开干envcentos7.xmysql8.0.6+8.0.6+支持in-place-upgrae升级备份->替......
  • 《SQL与数据库基础》19. 日志
    目录日志错误日志二进制日志日志格式日志查看日志删除查询日志慢查询日志本文以MySQL为例日志错误日志错误日志是MySQL中最重要的日志之一,它记录了当mysql启......
  • mysql数据库的MDL锁排查
    数据准备:  开启一个事务:   ......
  • mysql慢查询
     没有索引的查询,一般是全表查询  ......