GVKun编程网logo

SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT(sqlserver外键约束怎么写)

4

在本文中,我们将带你了解SQLSERVER外键约束NOACTION,CASCADE,SETNULL,SETDEFAULT在这篇文章中,我们将为您详细介绍SQLSERVER外键约束NOACTION,CA

在本文中,我们将带你了解SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT在这篇文章中,我们将为您详细介绍SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT的方方面面,并解答sqlserver外键约束怎么写常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的ASP 中用 select case 代替其他语言中的 switch case, default 用 case else、asp.net – DefaultConnection和membership – localsqlserver和defaultconnection之间的连接是什么、Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38e46e4a]、django:MySQL Strict Mode is not set for database connection ''default''

本文目录一览:

SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT(sqlserver外键约束怎么写)

SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULT(sqlserver外键约束怎么写)

大部分的资料是类似下面这样写的:

 

NO ACTION
指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。
CASCADE、SET NULL 和 SET DEFAULT
允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。
ON DELETE CASCADE
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
ON UPDATE CASCADE
指定如果试图更新某一行中的键值 ,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )
ON DELETE SET NULL
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
ON UPDATE SET NULL
指定如果试图更新某一行 ,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
ON DELETE SET DEFAULT
指定如果试图删除某一行 ,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
ON UPDATE SET DEFAULT
指定如果试图更新某一行 ,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。

 


看到以上颜色特殊的文字了吗?按文字的含义是不是ON UPDATE SET NULL、DEFAULT可以在不更改主表键值的情况下(即只要更改非主键的任何一列),子表中相应的外键值就改成null或default了呢?

答案是否定的,必须更改键值才会生效。


于是建议那些原创的、转载的,认真读读字眼,仔细写上文字。虽然实践试试便知,但是作为资料而言,务必追求正确严谨。MSDN干脆就不写键值,全部只写:“如果更新了父表中的相应行”,这样虽然无可厚非,但是却没有道明白:“必须更新键值”。而那些部分写部分不写的资料更让人迷惑。


另外,sqlSERVER 2000只支持 NO ACTION | CASCADE,2005版本以后才支持 SET NULL | SET DEFAULT。

ASP 中用 select case 代替其他语言中的 switch case, default 用 case else

ASP 中用 select case 代替其他语言中的 switch case, default 用 case else

OSC 请你来轰趴啦!1028 苏州源创会,一起寻宝 AI 时代

这篇文章主要介绍了 ASP 中用 select case 代替其他语言中的 switch case, default 用 case else , 需要的朋友可以参考下



 

asp 中不能用 switch 语句,要用 select case 语句了

简单的介绍一下

选择报表的工作一样,如果语句。然而不同的是,他们可以检查多个值。当然,你有
多个相同的,如果.. else 语句,但是这并不总是最好的方法。
选择语句允许一个程序来计算表达式,并试图匹配表达式的值案件标签。如果找到匹
配,程序执行相关的声明。对于 SELECT 语句的语法如下:

select case expression 
  case label_1
   statements_1
  case label_2
   statements_2
  ...
  case else
   statements_n
end select

该计划首先查找与匹配的表达式的值标签的情况,然后条控制转移到该条款,执行相
关的声明。如果没有找到匹配的标签,程序查找任择案 Else 子句,如果发现,将控制
转移到该条款,执行相关的声明。如果没有 Case Else 子句发现,程序继续执行的声明
后选择结束。利用休息时间,避免因进入下一个代码自动执行。
让我们考虑一个例子:

<%@ language="vbscript">
<%
Dim Flower
Flower = "rose"
select case flower
 case "rose"
   response.write(flower & " costs $2.50")
 case "daisy"
   response.write(flower & " costs $1.25")
 case "orchild"
   response.write(flower & " costs $1.50")
 case else 
   response.write("There is no such flower in our shop")
end select
%>

例子 1、

<%
''/*ASP中用select case代替其他语言中的switch case, default用case else*/
dim today
today = 5
select case today
 case 0 
 str = "星期天"
 case 1
 str = "星期一"
 case 2
 str = "星期二"
 case 3
 str = "星期三"
 case 4
 str = "星期四"
 case 5
 str = "星期五"
 case 6
 str = "星期六"
 case 7, 8, 9
 str = "today的值是7,8,或9"
 case else
    str = "未知"
end select
 
response.write str
response.End()
%>
 
/*------------输出结果--------
星期五
------------*/

实例 2、

board=request("board")
 select case board   
     case "1"
     boardName = "技术版"
     case "2"
     boardName = "信息版"   
     case "3"
     boardName = "客服星空"
     case "4"
     boardName = "灌水区"
     case "5"
     boardName = "市场营销"
     case "6"
     boardName = "经理论坛"
     case "7"
     boardName = "影音论坛"
     case "8"
     boardName = "延伸服务"
     case "9"
     boardName = "东北片区"
     case "10"
     boardName = "市场动态"
     case "11"
     boardName = "群发交流"
     case "12"
     boardName = "hombre"
     case "14"
     boardName = "论坛"
     case "15"
     boardName = "在线答疑"
         case else
        boardName = ""
end select

注意:case "1" 后面不能有冒号,boardName = "技术版" 后面不能有分号,而且不能出现 break 语句

asp.net – DefaultConnection和membership – localsqlserver和defaultconnection之间的连接是什么

asp.net – DefaultConnection和membership – localsqlserver和defaultconnection之间的连接是什么

嗯…我真的无法理解这一点.

在web.config我有:

<connectionStrings>
   <clear /> <!--- need this to prevent using LocalsqlServer from machine.config or somewhere becouse it is not present when when publish to hosting -->
   <add name="DefaultConnection" providerName="System.Data.sqlClient" connectionString="Data Source=.\sqlEXPRESS;Initial Catalog=aspnet-Goaly-20120615111028;Integrated Security=sspI" />  
</connectionStrings>

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <!-- I think this line is telling asp.net that I want the membership working agains defaultconnection,and not LocalsqlServer connection????? -->
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider,System.Web.Providers,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minrequiredPasswordLength="6" minrequiredNonalphanumericCharacters="0" passwordAttemptwindow="10" applicationName="/" />
  </providers>
</membership>

但后来却在抱怨:

The connection name 'LocalsqlServer' was not found in the applications configuration or the connection string is empty.

当我在设置选项卡中使用VS2012 RC的发布时,我得到一个ModelContext和一个DefaultConnection,那么这应该如何工作呢?

我想要的只是在与modelcontext创建的表相同的数据库中获取成员资格表.

这应该是如此,但我必须过分复杂一些.

谢谢你的帮助.

问候

larsi

解决方法

在 forumsasp后面的帖子中提到了它
添加< / clear>在membership元素和rolemangaer元素(如果存在于web.config中)中的连接字符串之前的标记将解决该问题.

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
   <clear/> <!-- solves the issue -->    
   <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider,PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minrequiredPasswordLength="6" minrequiredNonalphanumericCharacters="0" passwordAttemptwindow="10" applicationName="/" />
  </providers>
</membership>

您也可以使用sqlMetal.exe将成员资格表添加到现有数据库.

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38e46e4a]

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38e46e4a]

  先是在日志里出现了

Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38e46e4a]

  看网上的博客,以为是XML中事务标签配错了,检查了好一阵子,发现并没有错。

 

  接下来看日志中的报错

MySQLIntegrityConstraintViolationException: Column ''id'' in field list is ambiguous

  违反唯一建约束???

  然后我去代码里查看,发现是代码逻辑写错了,

public ServerResponse<String> checkValid(String str, String type) {
        if (StringUtils.isNotBlank(type)) {
            if (Const.USERNAME.equals(type)) {
                int resultCount = userMapper.checkUsername(str);
                if (resultCount > 0) {
                    return ServerResponse.createByErrorMessage("用户名已存在");
                }
            }
            if (Const.EMAIL.equals(type)) {
                int resultCount = userMapper.checkEmail(str);
                if (resultCount > 0) {
                    return ServerResponse.createByErrorMessage("Email已存在");
                }
            }
        } else {
            return ServerResponse.createByErrorMessage("参数错误");
        }

        return ServerResponse.createBySuccessMessage("校验成功");
    }
                if (resultCount > 0) {
                    return ServerResponse.createByErrorMessage("用户名已存在");
                }

      本来是从数据找到一条数据,说明数据库里已经有该用户,不应该放行,我把条件写成了等于0,使这条重复的记录进入数据库,造成违反唯一键

django:MySQL Strict Mode is not set for database connection ''default''

django:MySQL Strict Mode is not set for database connection ''default''

?: (mysql.W002) MySQL Strict Mode is not set for database connection ''default''
        HINT: MySQL''s Strict Mode fixes many data integrity problems in MySQL, such as data truncation upon insertion, by escalating warnings into errors. It is strongly recommended you activate it. See: https://docs.djangoproject.com/en/2.1/ref/databases/#mysql-sql-mode

增加黄色配件的配置:

DATABASES = {
''default'': {
# ''ENGINE'': ''django.db.backends.sqlite3'',
# ''NAME'': os.path.join(BASE_DIR, ''db.sqlite3''),
''ENGINE'': ''django.db.backends.mysql'',
''NAME'': ''erebus'',
''USER'': ''root'',
''PASSWORD'': ''root'',
''HOST'': ''127.0.0.1'',
''PORT'': ''3306'',
''OPTIONS'': {
"init_command": "SET sql_mode=''STRICT_TRANS_TABLES''",
}

}
}



参考:https://www.jianshu.com/p/bc41a8bf9d9b

关于SQLSERVER外键约束NO ACTION,CASCADE,SET NULL,SET DEFAULTsqlserver外键约束怎么写的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ASP 中用 select case 代替其他语言中的 switch case, default 用 case else、asp.net – DefaultConnection和membership – localsqlserver和defaultconnection之间的连接是什么、Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@38e46e4a]、django:MySQL Strict Mode is not set for database connection ''default''等相关内容,可以在本站寻找。

本文标签: