SQL Server学习笔记一(2008)

1、关键字'CASCADE' 附近有语法错误

使用CASCADE关键字来强制删除已被引用的关系(及其引用方)。在实践过程中,使用SQL Server执行“ DROP TABLE Course CASCADE”却被提示有语法错误。事实上报错的原因在于SQL Server不支持在删除过程中使用CASCADE关键字SQL Server在删除表时并不区分RESTRICT或是CASCADE。既然不支持,那为何又能识别CASCADE为关键字呢?事实上在SQL Server中CASCADE关键字用于在建表操作时预先建立级联关系(通常和DENY关键字配合使用,所以报有语法错),建表后执行DROP操作时就不需要用户再指定删除模式了。因此标题的那句“CASCADE”完全是用错了地方,应予以删除若因外键问题报错则应先将引用方删除或创建前使用CASCADE关键字确立级联关系。

2、primary key与unique区别

一.主键:为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。

二,相同点:Unique key与primarykey 约束都强调唯一性。

三,  不同点:

1.一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY ;

2.unique key 约束只针对非主键列,允许有空值。Primarykey 约束针对主键列,不允许有空值。

3、 primary key = unique +not null

UNIQUEKEY的用途:主要是用来防止数据插入的时候重复的。

四.例子:防止重复插入数据,如防止name字段插入重复数据。

1.设置unique索引

2.执行sql添加ignore关键字:

String sql="insertignore into tb_test(id,name,age) values(null,?,?)";

注意:假设表中已经存在重复数据,无法在name字段添加unique索引;

3、SQL约束

约束的分类

  在SQLServer中,有3种不同类型的约束。

  1、实体约束

    实体约束是关于行的,比如某一行出现的值就不允许出现在其他行,例如主键。

  2、域约束

    域约束是关于列的,对于所有行,某一列有那些约束,例如CHECK约束。

  3、参照完整性约束

    如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,例如外键。

二、约束命名

  在学习约束之前,首先来了解下为约束命名需要注意哪些地方。

  SQLServer在我们不提供名称时,会自动创建名称,但是由系统自动创建的名称并不是特别有用。

  例如,系统生成的主键名称可能是这样的:PK_Employees_145C0A3F。 

  PK代表主键(primary key),Employees代表在Employees表中,而剩下的“145C0A3F”部分是为了保证唯一性而随机生成的值。只有通过脚本创建才会得到这种值,如果是通过Managerment Studio创建表,那么就直接是PK_Employees。

  对于系统自动生成的Check约束名称如:CK_Customers_22AA2996。CK代表这是一个Check约束,Customers代表是在Customers表中,后面的22AA2996还是一个随机数。如果一个表中有多个Check约束,则命名可能如下:

  CK_Customers_22AA2996

  CK_Customers_25869641

  CK_Customers_267ABA7A

  如果你需要修改这些约束其中的一个,那么你很难分辨这些约束到底是哪一个。

  因此,为了能够一眼看上去就知道这个约束是用来干什么的,我们应该使用一种简单明了的短语来进行命名。

  例如要确保某一列电话号码格式正确的约束,我们可以使用命名CK_Customers_PhoneNo这样的短语来命名。

  总之命名要做到以下几点:

  1、一致性

  2、通俗易懂

  3、满足以上两个条件的情况下简化名称。

1主键约束

   主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。由于主键在关系数据库中的重要性,因此它是所有键和约束中最重要的。

   下面来说说主键的创建方式

  1、在创建表的时候创建主键约束。

create table customer
(
    customerId        int identity    not null
        primary key,  --创建主键约束
    CustomerName    nvarchar(30)    not null
);

  怎么样,非常简单吧!

  2、在已存在的表上创建主键约束

  现在假设已经存在了一张表,但是还没有主键约束:

alter table person
    add constraint PK_Employee_Id  --外键名称
    primary key(personId)  --personId 字段名

  alter名称告诉SQLServer如下信息:

  1、添加了一些内容到表中(也可以删除表中的某些内容)

  2、添加了什么内容(一个约束)

  3、对约束的命名(允许以后直接访问约束)

  4、约束的类型(主键约束)

5、约束应用于哪个列。

***主键的唯一性**********************

3、复合主键的创建

  如果实在ManagementStudio中,创建复合主键,只需要按住Ctrl键,选中两个列,然后设置为主键就OK了,非常简单。下面主要讲述使用T-SQL创建复合主键的方法:

ALTERTABLE 表名 WITHNOCHECK ADD

CONSTRAINT[PK_表名] PRIMARYKEY NONCLUSTERED

(

[字段名1],

[字段名2]

)

  在多对多联系中,常常会有一张表来描述其他两张表的关系,就以此读者和书为例子:

ALTERTABLE ReaderAndBook

ADD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值