SQL Server基础知识

1、SQL Server表名为什么要加方括号?

这个不是必须要加,但表名或字段名如果引用了sqlserver中的关键字,数据库会不识别这到底是关键字还是表名(或字段名)时就必须要加。

比如,一个表名叫user,user在sqlserver中属于关键字,那么查询的时候必须要这样:

select * from [user]

否则就会报错。

同理,如果user属于字段名,也同样要加,如

select * from 表名 where [user]=1

2、SQL中的go,begin,end

  

go 向 SQL Server 实用工具发出一批 Transact-SQL 语句结束的信号。go是把t-sql语句分批次执行。(一步成功了才会执行下一步,即一步一个go)

BEGIN 和 END 语句用于将多个 Transact-SQL 语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条 Transact-SQL 语句的语句块的任何地方,都可以使用 BEGIN 和 END 语句。

例如,当 IF 语句仅控制一条 Transact-SQL 语句的执行时,不需要使用 BEGIN 或 END 语句:

IF (@@ERROR <> 0)
SET @ErrorSaveVariable = @@ERROR

如果 @@ERROR 为 0,则仅跳过 SET 语句。

用 BEGIN 和 END 语句可以使 IF 语句在计算结果为 FALSE 时跳过语句块:

IF (@@ERROR <> 0)
BEGIN
SET @ErrorSaveVariable = @@ERROR
PRINT 'Error encountered, ' +
CAST(@ErrorSaveVariable AS VARCHAR(10))
END

BEGIN 和 END 语句必须成对使用:任何一个均不能单独使用。BEGIN 语句单独出现在一行中,后跟 Transact-SQL 语句块。最后,END 语句单独出现在一行中,指示语句块的结束。

3、mysql语句转换为sqlserver

  alter table order_detail add constraint FK_Relationship_1 foreign key (book_id)
references book (id) on delete restrict on update restrict;
SQL Server 的语法如下:

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
指定如果已创建表中的行具有引用关系,并且被引用行已从父表中删除,则对这些行采取的操作。默认值为 NO ACTION。

NO ACTION
数据库引擎将引发错误,并回滚对父表中行的删除操作。

CASCADE
如果从父表中删除一行,则将从引用表中删除相应行。

SET NULL
如果父表中对应的行被删除,则组成外键的所有值都将设置为 NULL。若要执行此约束,外键列必须可为空值。

SET DEFAULT
如果父表中对应的行被删除,则组成外键的所有值都将设置为默认值。若要执行此约束,所有外键列都必须有默认定义。如果某个列可为空值,并且未设置显式的默认值,则将使用 NULL 作为该列的隐式默认值。

MySQL 里面的 on delete restrict
切换到 SQL Server , 可以切换为 ON DELETE NO ACTION
也可以不写,因为 默认值为 NO ACTION。

3、 mysql的on delete restrict与on ordelete cascade区别

  外键约束对子表的含义: 
  如果在父表中找不到候选键,则不允许在子表上进行insert/update 

外键约束对父表的含义: 
  在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句, InnoDB支持5种方式, 分列如下 
  
  . cascade方式 
   在父表上update/delete记录时,同步update/delete掉子表的匹配记录 
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用 

  . set null方式 
   在父表上update/delete记录时,将子表上匹配记录的列设为null 
   要注意子表的外键列不能为not null 
   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用 

  . No action方式 
   如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持 

  . Restrict方式 
   同no action, 都是立即检查外键约束 

  







原文地址:https://www.cnblogs.com/maxiaofang/p/4800803.html