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