当前位置: 首页 > 编程日记 > 正文

[转]SQL 约束讲解

约束主要包括:

•NOT NULL
•UNIQUE
•PRIMARY KEY
•FOREIGN KEY
•CHECK
•DEFAULT

1、not null :用于控制字段的内容一定不能为空(NULL)。
     用法 :Create table MyTable
               (
                   id varchar(32) not null,
                   name varchar (32)
               )

2、Unique :控件字段内容不能重复,一个表允许有多个 Unique 约束。
      在Sql Server、Orcale、MS Access 支持的添加 Unique 语法
             Create table MyTable
                (
                    id varchar(32) not null unique,
                    name varchar (32)
                )

      在Sql Server、 My Sql 支持的添加 Unique 语法
             Create table MyTable
                (
                    id varchar(32) not null,
                    name varchar (32),
                   unique (id,.....)
                 )

      在Sql Server、Orcale、MS Access、My Sql 都支持的添加 Unique 语法
              Create table MyTable
                  (
                      id varchar(32) not null,
                      name varchar (32),
                     Constraint uniqueName unique(UniqueColumn,.....)
                   )

      :第一种写法(也就是在字段后面直接添加约束),保证每个字段数据唯一性。
           第二种写法(也就是同时添加几个字段为约束),这个是保证几个字段数据同时是唯一的,比如 Unique(id,name) 两个字段为约束,那么当 id 有重复值,而 name 没有重复值的情况下是允许的,只有当两个字段数据都与原数据重复的情况下才是不允许的。
  
   在Sql Server、Oracle、MS Access 删除 Unique 约束语法:drop constraint UniqueName;
   在My Sql 删除 Unique 约束语法:drop index UniqueName;

3、Primary Key :也是用于控件字段内容不能重复,但它在一个表只允许出现一个。
      在Sql Server、Orcale、MS Access 支持的添加Primary Key语法
              Create table myTB1
             (
                 id nvarchar(32) not null primary key,
                 name nvarchar(32)
              )
      在Sql Server、My Sql 支持的添加Primary Key 语法
             Create table myTB1
             (
                 id nvarchar(32) not null,
                 name nvarchar(32),
                 primary key (id)
             )
       在Sql Server、Orcale、MS Access、My Sql 支持的添加Primary Key 语法
             Create table myTB1
             (
                  id nvarchar(32) not null,
                 name nvarchar(32),
                 constraint PrimaryName primary key (id)
              )
在Sql Server、Orcale、MS Access、My Sql 表已存在的情况下,添加表的Primary Key约束语法
              Alter table myTB1
              ADD Primary Key (id,......) --这样的写法,系统会自定义约束名称

              Alter table myTB1
              Add Constaint PrimaryName primary key (id) --这样的写法,自己可以自定义约束名称

在Sql Server、Orcale、MS Access 删除表已存在的 Primary Key 约束的语法:
              Alter table myTB1
              Drop Constraint PrimaryName

在My Sql 删除表已存在的 Primary Key 约束的语法:
              Alter table myTB1
              Drop Primary Key
Unique 与 Primary 的相同之处:UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
Unique 与 Primary 的不同之处:每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束,Unique允许有NULL值,而 Primary key 不允许有NULL值。

:在同一个数据库中,就算在不同的表中,约束名称是不允许相同的。

4、Foreign Key :FOREIGN KEY 约束用于预防破坏表之间连接的动作,FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
   在Sql Server、My Sql 支持的添加Foreign Key语法
              Create table myTB1
              (
                   id nvarchar(32) not null primary key,
                   name nvarchar(32),
                   foreign key(id) references myTB(id)
              )

   在Sql Server、Orcale、MS Access 支持的添加Foreign Key语法
              Create table myTB1
              (
                   id nvarchar(32) not null foreign key references myTB(id),
                   name nvarchar(32)
              )

   在Sql Server、Orcale、MS Access、My Sql 都支持的添加Foreign Key语法
              Create table myTB1
              (
                   id nvarchar(32) not null primary key,
                   name nvarchar(32),
                    Constraint foreignName foreign key(id) references myTB(id)
              )

在Sql Server、Orcale、MS Access、My Sql 的表已存在情况下,向表添加外键约束的语法:
              Alter table myTB1
              Add foreign key(id) references myTB(id) --这样写系统会自定义约束名称

               Alter table myTB1
              Add Constraint foreignName foreign key(id) references myTB(id) --这样写自己可以自定义约束名称

在Sql Server、Orcale、MS Access 中删除外键约束的语法:
              Alter table myTB1
              Drop Constraint foreignName;

在My Sql 中删除外键约束的语法:
              Alter table myTB1
              Drop foreign key foreignName;

5、Check :用于控制字段的值范围。
      在Sql Server、My Sql 支持的添加check 语法
              Create table myCheck
              (
                   id nvarchar(32) not null,
                   age int not null, 
                   check (age>15 and age <30)
              )

       在Sql Server、Orcale、MS Access 支持的添加 check 语法
              Create table myCheck
              (
                   id nvarchar(32) not null,
                   age int not null check (age>15 and age<30)
              )

      在Sql Server、Orcale、MS Access、My Sql 都支持的添加 check 语法
               Create table myCheck
              (
                   id nvarchar(32) not null,
                   age int not null,
                   constraint checkName check (age<15 and age>30)
              )

在Sql Server、Orcale、MS Access、My Sql 的表已存在情况下,向表添加check约束的语法:
              Alter table myCheck
              add check (id='celly'); --这样定义是系统自定义 check约束名称。

              Alter table myCheck
               add constraint checkName check(id='celly'); --这样定义是自己自定义 check约束名称。

在 Sql Server、Orcale、MS Access 删除表已存在的 check 约束的语法:
              Alter table myCheck
              drop constraint checkName

6、Default :用于设置新记录的默认值。

在Sql Server、Orcale、MS Access、My Sql 添加default约束的语法:
              Create table myDefault
              (
                  id int,
                  name nvarchar(32) default 'celly'
              )

在My Sql 的已存在表中添加 字段默认值:
               Alter table myDefault
              Alter [id] set default 0

在 Orcale、MS Access 的已存在表中添加 字段默认值:
              Alter table myDefault
              Alter column [id] set default 0

SQL Server 2005里面添加默认值:

use Book
    go
    alter table TeacherInfo
    add constraint DF_TeacherInfo_Tsex
    default '男' for Tsex
    go

在 My Sql 中删除字段默认值语法:
              Alter table myDefault
              Alter ColumnName drop default



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fancy050821/archive/2009/05/13/4176212.aspx

相关文章:

JSON 转 VO

需求 将获取的json数据直接转为vo 解决 利用net.sf.json.JSONObject的toBean() 确保json中的key值和vo中的字段名称一致 JSONObject jsonObject new JSONObject();UserVO vo new UserVO(); vo (UserVO) net.sf.json.JSONObject.toBean(jsonObject, UserVO.class);参考文档地…

怎样查看一个端口有无开启

有时候我们需要确定一下某个端口有无开启&#xff0c;有两种方法。 方法 1&#xff1a;查看一个端口有无开启的最简单方法 查看端口有无开启&#xff0c;需要在dos里使用命令来完成。这个命令就是&#xff1a; netstat -ano这个命令能显示当前电脑有哪些端口正在使用&#xff0…

一道SQL统计试题

根据上图A表和B表&#xff0c;按照年份和地区生成1至12个月的数据&#xff0c;结果如下&#xff1a; 方法一&#xff1a; select YEAR,AreaName, MAX(case Month when 1 then Money else 0 end) as [1月], MAX(case Month when 2 then Money else 0 end) as [2月], MAX(case Mo…

【单片机】时钟周期 器械周期 指令周期的关系

1、 时钟周期&#xff08;振荡周期&#xff09;&#xff1a;始终周期也称振荡周期&#xff0c;定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的单位。在一个始终周期内&#xff0c;CPU仅完成一个最基本的动作。时钟周期是一个时间的量。始终周期表示了SDRAM&#xf…

Painting A Board --POJ 1691

1、题目类型&#xff1a;暴力法、DFS。 2、解题思路&#xff1a;题意&#xff0c;一块大的矩形区域的被分成多个矩形区域&#xff0c;现在要给不同的区域涂上不同的颜色&#xff0c;有不同颜色的刷子可以提供&#xff0c;每个刷子可以刷一种不同的颜色。每刷一次&#xff0c;将…

《JavaScript高级程序设计》读书笔记【一】

JavaScript介绍 ECMAScript&#xff0c;由ECMA-262定义&#xff0c;提供核心语言功能&#xff1b;  文档对象模型&#xff08;DOM&#xff09;&#xff0c;提供访问和操作网页内容的方法和接口&#xff1b;  浏览器对象模型&#xff08;BOM&#xff09;&#xff0c;提供与浏…

上不了名校?可以在 GitHub 上读他们的课程

今天开始&#xff0c;全国各大区域的高考成绩陆续公布&#xff0c;又到了几家欢喜几家愁的时刻&#xff0c;如果你准备报考计算机相关专业&#xff0c;但是又由于分数不高而苦恼。别担心&#xff0c;在 GitHub 上有着大量的名校教学资源&#xff0c;即使上不了名校&#xff0c;…

【java】各种方法的使用(不定期更新)

疑难杂症篇 1、输入一个字符的方法 问题在于Scanner中没有一个类似于nextInt()之类的函数。 代码实现 char num scanner.next().charAt(0);2、将字符串转化为数字 没啥问题就是记不下来 代码实现&#xff1a; int a1 Integer.parseInt(i1);3、字符串转化为字符数组的方法 …

SQL SERVER 触发器示例

触发器是一种特殊的存储过程。 触发器语法 &#xff1a; CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ DELETE ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS sql_statement [ ...n ] 示…

vc数据库知识

在连接SQL数据库时&#xff0c;数据库的链接: _bstr_t strConn"ProviderSQLOLEDB.1;Data Source.;Initial Catalogdb_test;Integrated SecuritySSPI;Persist Security InfoFalse"; _ConnectionPtr m_pConnection; m_pConnection.CreateInstance(__uuidof(connection)…

jmeter 测试 api 接口方法

双击 “jmeter.bat” 打开 Jmeter 页面&#xff0c;如下图所示。 右击“测试计划”&#xff0c;添加 -> Theaders&#xff08;Users&#xff09; -> 线程组 在线程组中可以设置线程数、并发数、循环数等。 下面开始进行几种 jmeter 的接口测试方法。 1、get 请求配置 右击…

我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性

摘要 MVC经过其1.0和2.0版本的发展&#xff0c;现在已经到了3.0的领军时代&#xff0c;随着技术的不断改进&#xff0c;MVC也越来越成熟。使开发也变得简洁人性化艺术化。 园子里有很多大鸟都对MVC了如指掌&#xff0c;面对问题犹同孙悟空的七十二变一般游刃有余&#xff0c;令…

【java】兴唐第12-14节笔记整理

第十四节课 1、eclipse快捷键 alt shift s给所有属性写get set函数 2、给文件重命名&#xff1a; ctrl F2 3、上转型对象调用方法调用的是子类重写的方法 4、在任何情况下&#xff0c;子类对象都可以访问父类受保护方法&#xff08;protected&#xff09; 注意&#xff1a; …

[ZZ]Map/Reduce hadoop 细节

转自&#xff1a;Venus神庙原文&#xff1a;http://www.cnblogs.com/duguguiyu/archive/2009/02/28/1400278.html 分布式计算&#xff08;Map/Reduce&#xff09; 分布式计算&#xff0c;同样是一个宽泛的概念&#xff0c;在这里&#xff0c;它狭义的指代&#xff0c;按Google …

类加载器双亲委派模式

双亲委派模型的工作流程是&#xff1a;如果一个类加载器收到了类加载的请求&#xff0c;它首先不会自己去尝试加载这个类&#xff0c;而是把请求委托给父加载器去完成&#xff0c;依次向上&#xff0c;因此&#xff0c;所有的类加载请求最终都应该被传递到顶层的启动类加载器中…

Kubernetes 架构(下)【转】

上一节我们讨论了 Kubernetes 架构 Master 上运行的服务&#xff0c;本节讨论 Node 节点。 Node 是 Pod 运行的地方&#xff0c;Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node上运行的 Kubernetes 组件有 kubelet、kube-proxy 和 Pod 网络&#xff08;例如 flannel&#…

【工具软件】Xmind的使用

1、打开历史保存的记录的方法 窗口 - 文本编辑历史 - 恢复 2、批量修改 编辑 - 查找/替换 3、如果子主体很多,而且有文本格式的&#xff0c;可以直接选中父父主题复制粘贴 4、窗口 - 黑匣子 自己做的脑图系统会自动备份。 5、常用快捷键 &#xff08;1&#xff09;创建子主…

小脚本,统计一个目录下满足特定条件文件的代码行数

find -regex .*cc -o -regex .*h | xargs wc -lfind也自带了执行命令的方法&#xff1a;find -regex .*cc -o -regex .*h -exec wc -l {} \; 这种方法的结果不太对&#xff0c;只能统计到满足 -regex .*h 的文件注明一下&#xff1a; find默认从当前目录递归的查找&#xff1b…

CCNA CCNP CCIE所有实验名称完整版

只能仅供参考了&#xff01;具体的实验内容就没了&#xff0c;失望了&#xff01;实验1&#xff1a;通过Console端口访问Cisco路由器  实验2&#xff1a;通过Telnet访问Cisco路由器  实验3&#xff1a;配置终端服务器  实验4&#xff1a;通过浏览器访问路由器  实验5&#…

Real World Haskell 第七章 I/O

几乎所有程序都是用来从外部世界收集数据&#xff0c;处理数据&#xff0c;并把处理结果返回给外部世界的。也就是说&#xff0c;输入和输出对于程序设计来说相当关键。Haskell的I/O系统很强大&#xff0c;表达能力很强也很容易使用&#xff0c;理解它的原理对于学习Haskell来说…

malloc函数分配失败处理的严重性

本次在实际测试情况下&#xff0c;发现程序无缘无故的异常&#xff0c;导致看门狗超时复位&#xff0c;经过排查是malloc函数分配失败的时候&#xff0c;依然对指针进行了操作&#xff0c;导致异常。以前没重视这个问题是因为&#xff0c;总觉的malloc基本都会成功的&#xff0…

kvm--virsh命令行下管理虚拟机

virsh 既有命令行模式&#xff0c;也有交互模式&#xff0c;在命令行直接输入 virsh 就进入交互模式&#xff0c; virsh 后面跟命令参数&#xff0c;则是命令行模式&#xff1b; &#xff08;1&#xff09;基础操作 --- 命令行下管理虚拟机 virsh list 列出当前宿…

【java】兴唐第十八节课

1、java接口的关键字&#xff1a;implements,可实现多个接口&#xff0c;接口接口之间使用逗号分隔。 注&#xff1a; 继承只能继承一个&#xff0c;接口可以实现多个 2、在接口里所有的方法都是抽象方法&#xff0c;不用关键字abstract修饰。 3、接口不能定义变量&#xff0…

转换前台javascript传递过来的时间字符串到.net的DateTime

javascript: var datenew Date().toString();得到的结果类似于:Wed Oct 27 2010 08:53:04 GMT0800 如何在C#中把这个字符串转换为DateTime类型呢&#xff1f;DateTime.ParseExact("Wed Oct 27 16:23:44 UTC0800 2010","ddd MMM dd HH:mm:ss UTCzzzzz yyyy"…

树状数组 | 1057

用哈希&#xff0c;把push的数x作为下标给hashTable&#xff08;实则不存在&#xff0c;直接用tree树状数组记录数据&#xff09;1&#xff0c;pop则是以最后一个数x作为下标-1 。 树状数组和其原理不再赘述&#xff0c;需要注意的是最后的二分搜索&#xff08;实则是lower_bou…

7、vue中将token存到cookie

使用js-cookie工具&#xff1a; 1.npm i js-cookie //安装2.import Cookies from js-cookie //引用 // 存入cookie&#xff1a;Cookies.set(token,value) // 获取cookie&#xff1a;Cookies.set(token) //删除cookie:Cookies.remove(token)转载于:https://www.cnblogs.com/xlfd…

MySQL数据库表名、列名、别名区分大小写的问题

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的&#xff1a; 1、数据库名与表名是严格区分大小写的&#xff1b; 2、表的别名是严格区分大小写的&#xff1b; 3、列名与列的别名在所有的情况下均是忽略大小写的&#xff1b; 4、变量名也是严格区分大小写的&#…

【java】兴唐第十七节课

1、抽象类&#xff1a; 概念:由abstract修饰的类叫抽象类。 特征&#xff1a;在抽象类中有抽象方法 注意&#xff1a; &#xff08;1&#xff09;抽象方法必须定义到抽象类中&#xff0c;即有抽象方法的类一定是抽象类。抽象类的非抽象子类必须实现父类的抽象方法&#xff0c…

条款22: 尽量用“传引用”而不用“传值”

c语言中&#xff0c;什么都是通过传值来实现的&#xff0c;c继承了这一传统并将它作为默认方式。除非明确指定&#xff0c;函数的形参总是通过“实参的拷贝”来初始化的&#xff0c;函数的调用者得到的也是函数返回值的拷贝。正如我在本书的导言中所指出的&#xff0c;“通过值…

C++ RCSP智能指针简单实现与应用

智能指针的实现代码来源博客&#xff1a;《http://blog.csdn.net/to_be_better/article/details/53570910》 修改&#xff1a;添加 get()函数&#xff0c;用以获得原始指针&#xff08;raw pointer&#xff09;。 其余思路来源《Effective C》 智能指针的实现代码如下&#xff…