GVKun编程网logo

mysql 添加外键的 4 种方式(mysql添加外键的语句)

1

这篇文章主要围绕mysql添加外键的4种方式和mysql添加外键的语句展开,旨在为您提供一份详细的参考资料。我们将全面介绍mysql添加外键的4种方式的优缺点,解答mysql添加外键的语句的相关问题,

这篇文章主要围绕mysql 添加外键的 4 种方式mysql添加外键的语句展开,旨在为您提供一份详细的参考资料。我们将全面介绍mysql 添加外键的 4 种方式的优缺点,解答mysql添加外键的语句的相关问题,同时也会为您带来 Spring MVC 处理异常有 3 种方式、Docker 容器进入的 4 种方式、eclipse 安装 activiti 插件的 2 种方式、Java 中初始化 List 集合的 6 种方式!的实用方法。

本文目录一览:

mysql 添加外键的 4 种方式(mysql添加外键的语句)

mysql 添加外键的 4 种方式(mysql添加外键的语句)

今天开始复习,在过后的几天里开始在博客上记录一下平时疏忽的知识点,温故而知新 屁话不多 -- 直接上货

创建主表: 班级

CREATE TABLE class(cid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(15) NOT NULL)

INSERT INTO class VALUES (NULL,'' 六年级一班 '')
INSERT INTO class VALUES (NULL,'' 六年级二班 '')

第一种://1. 在属性值后面直接添加(有点小问题)

CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT REFERENCES class(cid),
PRIMARY KEY(sid)
);

// 添加数据进行测试
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3)    // 约束不生效,原因待查
INSERT INTO student VALUES (NULL,'' 卧槽 '',4)     // 不敢相信,在测试一次

这种方式,测试不知道为什么,居然添加进去了  WTF?  在网上百度无果,自学群无回复  暂时先搁置在这儿

第二种://2. 在 sql 语句末端添加

CREATE TABLE student(
sid INT AUTO_INCREMENT,
sname VARCHAR(10),
s_cid INT,
PRIMARY KEY(sid),
FOREIGN KEY (s_cid) REFERENCES class(cid)
);

// 插入数据测试一下
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3)   // 约束生效  插入失败

外键约束生效

第三种://3.fk 的使用

这种是值下课自己手动收集总结的,理解还不是很到位,一番测试还是弄懂了一点,表中的  fk_子表_父表

CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT ,
PRIMARY KEY(sid),
CONSTRAINT fk_student_class FOREIGN KEY(s_cid) REFERENCES class(cid)
);

// 测试一波 OK
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3)  // 约束生效  插入失败

第四种://4. 在建表后添加外键  (教学类容)

CREATE TABLE student(sid INT AUTO_INCREMENT,
sname VARCHAR(10) NOT NULL,
s_cid INT ,
PRIMARY KEY(sid)
);

// 添加外键约束:  ALTER TABLE student ADD FOREIGN KEY (s_cid) REFERENCES class (cid);

// 测试
INSERT INTO student VALUES (NULL,'' 王大锤 '',2)
INSERT INTO student VALUES (NULL,'' 胡汉三 '',3)  // 约束生效   插入失败

总结到此结束,有疏忽之处,望大家指出修正

 Spring MVC 处理异常有 3 种方式

Spring MVC 处理异常有 3 种方式

 Spring MVC 处理异常有 3 种方式

(1)实现 Spring 的异常处理接口 HandlerExceptionResolver 自定义自己的异常处理器

 

1. 创建自己的异常处理

public class MyExceptionHandler implements HandlerExceptionResolver 

      if(ex instanceof BusinessException) {  

            return new ModelAndView("error-business", model);  

        }else if(ex instanceof ParameterException) {  

            return new ModelAndView("error-parameter", model);  

        } else {  

            return new ModelAndView("error", model);  

        }  

}

 

2. 添加到容器中,servletDespatcher

<bean id="exceptionHandler"/> 

 

 

(2)使用 @ExceptionHandler 注解实现异常处理

1.1

    public class BaseController {  

        /** 基于 @ExceptionHandler 异常处理 */  

        @ExceptionHandler  

        public String exp(HttpServletRequest request, Exception ex) {  

            request.setAttribute("ex", ex);  

              

            // 根据不同错误转向不同页面  

            if(ex instanceof BusinessException) {  

                return "error-business";  

            }else if(ex instanceof ParameterException) {  

                return "error-parameter";  

            } else {  

                return "error";  

            }  

        }  

    }  

1.2

   @ExceptionHandler({MyException.class})   

    public String exception(MyException e) {   

        System.out.println(e.getMessage());   

        e.printStackTrace();   

        return "exception";   

    }   

2.

    public class TestController extends BaseController  

     (3)使用 Spring MVC 提供的简单异常处理器 SimpleMappingExceptionResolve

1.

    <bean>  

        <!-- 定义默认的异常处理页面,当该异常类型的注册时使用 -->  

        <property name="defaultErrorView" value="error"></property>  

        <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为 exception -->  

        <property name="exceptionAttribute" value="ex"></property>  

        <!-- 定义需要特殊处理的异常,用类名或完全路径名作为 key,异常也页名作为值 -->  

        <property name="exceptionMappings">  

            <props>  

                <prop key="cn.basttg.core.exception.BusinessException">error-business</prop>  

                <prop key="cn.basttg.core.exception.ParameterException">error-parameter</prop>  

      

                <!-- 这里还可以继续扩展对不同异常类型的处理 -->  

            </props>  

        </property>  

    </bean>  

2.

 

<bean id="exceptionResolver">     

         <property name="exceptionMappings">     

             <props>     

                 <prop key="java.lang.Exception">errors/error</prop>     

                 <prop key="java.lang.Throwable">errors/err</prop>     

             </props>     

         </property>     

         <property name="statusCodes">     

             <props>     

                 <prop key="errors/error">500</prop>     

                 <prop key="errors/404">404</prop>     

             </props>     

         </property>     

         <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->     

         <property name="warnLogCategory" value="WARN"></property>     

         <!-- 默认错误页面,当找不到上面 mappings 中指定的异常对应视图时,使用本默认配置 -->     

         <property name="defaultErrorView" value="errors/error"></property>     

         <!-- 默认 HTTP 状态码 -->     

         <property name="defaultStatusCode" value="500"></property>     

     </bean>     

 

 

最后在 web.xml 中定义

 

<error-page>  

    <exception-type>java.lang.Throwable</exception-type>  

    <location>/500.jsp</location>  

</error-page>  

<error-page>  

    <error-code>500</error-code>  

    <location>/500.jsp</location>  

</error-page>  

<error-page>  

    <error-code>404</error-code>  

    <location>/404.jsp</location>  

</error-page>  

Docker 容器进入的 4 种方式

Docker 容器进入的 4 种方式

在使用 Docker 创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入 Docker 容器有好几多种方式,这里我们就讲一下常用的几种进入 Docker 容器的方法。

进入 Docker 容器比较常见的几种做法如下:

  • 使用 docker attach

  • 使用 SSH

  • 使用 nsenter

  • 使用 exec

一、使用 docker attach 进入 Docker 容器

  Docker 提供了 attach 命令来进入 Docker 容器。

 

  接下来我们创建一个守护态的 Docker 容器,然后使用 docker attach 命令进入该容器。

  1. $ sudo docker run -itd ubuntu:14.04 /bin/bash  

 

  然后我们使用 docker ps 查看到该容器信息,接下来就使用 docker attach 进入该容器

  1. $ sudo docker attach 44fc0f0582d9  


  可以看到我们已经进入到该容器中了。

 

  但在,使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。

 

因为这个原因,所以 docker attach 命令不太适合于生产环境,平时自己开发应用时可以使用该命令。

eclipse 安装 activiti 插件的 2 种方式

eclipse 安装 activiti 插件的 2 种方式

1.eclipse 在线安装,help -> install -> new software 》add 输入

Name: Activiti BPMN 2.0 designer   
Location: http://activiti.org/designer/update/

PS: 经过测试,发现已经无法使用。

2. 使用离线方式下载

    下载地址:https://www.activiti.org/designer/archived/activiti-designer-5.18.0.zip;下载到本地后使用 eclipse 安装,help -> install -> new software》add

Name: Activiti BPMN 2.0 designer   
Location: jar:file:/D:/bingoWork/activiti-designer-5.18.0.zip!/

PS: 推荐可用,其他版本的同理。如果下载 jar 包如果浏览器的下载速度不较慢,或者不行,建议使用迅雷试下。我也是浏览器下载不行,用迅雷飞快,秒速。迅雷还是比较给力的哈。

Java 中初始化 List 集合的 6 种方式!

Java 中初始化 List 集合的 6 种方式!

List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。

如果想学习 Java 工程化、高性能及分布式、深入浅出。微服务、Spring,MyBatis,Netty 源码分析的朋友可以加我的 Java 高级交流:854630135,里面有阿里大牛直播讲解技术,以及 Java 大型互联网技术的视频免费分享给大家。

1、常规方式

List<String> languages = new ArrayList<>();
languages.add("Java");
languages.add("PHP");
languages.add("Python");
System.out.println(languages);

这种就是我们平常用的最多最平常的方式了,没什么好说的,后面缺失的泛型类型在 JDK 7 之后就可以不用写具体的类型了,改进后会自动推断类型。

2、Arrays 工具类

List<String> jdks = asList("JDK6", "JDK8", "JDK10");
System.out.println(jdks);

注意,上面的 asList 是 Arrays 的静态方法,这里使用了静态导入。这种方式添加的是不可变的 List, 即不能添加、删除等操作,需要警惕。。

import static java.util.Arrays.asList;

如果要可变,那就使用 ArrayList 再包装一下,如下面所示。

List<String> numbers = new ArrayList<>(Arrays.asList("1", "2", "3"));
numbers.add("4");
System.out.println(numbers);

包装一下,这就是可变的 ArrayList 了。

3、Collections 工具类

List<String> apples = Collections.nCopies(3, "apple");
System.out.println(apples);

这种方式添加的是不可变的、复制某个元素 N 遍的工具类,以上程序输出:

[apple, apple, apple]

老规则,如果要可变,使用 ArrayList 包装一遍。

List<String> dogs = new ArrayList<>(Collections.nCopies(3, "dog"));
dogs.add("dog");
System.out.println(dogs);

还有初始化单个对象的 List 工具类,这种方式也是不可变的,集合内只能有一个元素,这种也用得很少啊。

List<String> cat = Collections.singletonList("cat");
System.out.println(cat);

还有一个创建空 List 的工具类,没有默认容量,节省空间,但不知道实际工作中有什么鸟用。

List<String> cat = Collections.emptyList("cat");

4、匿名内部类

List<String> names = new ArrayList<>() {{
 add("Tom");
 add("Sally");
 add("John");
}};
System.out.println(names);

这种使用了匿名内部类的方式,一气喝成,是不是很高大上?栈长我曾经也使用过这种方式,不过我觉得这种看似高级,实现也没什么卵用。

5、JDK8 Stream

List<String> colors = Stream.of("blue", "red", "yellow").collect(toList());
System.out.println(colors);

Stream 是 JDK 8 推出来的新概念,比集合还要更强大,还可以和集合互相转换。

上面同样使用了静态导入:

import static java.util.stream.Collectors.toList;

6、JDK 9 List.of

List<String> cups = List.of("A", "B", "C");
System.out.println(cups);

这是 JDK 9 里面新增的 List 接口里面的静态方法,同样也是不可变的。

在接口中实现静态方法和默认方法是 JDK 8 中添加的新特性,

好了,今天就给大家介绍到这里了,这 6 种,你知道几种?另外,Map, Set 也有类似的初始化的方法,大家有兴趣的可以试一下。

你还知道哪些绝招呢?欢迎留言分享一下。。。

今天关于mysql 添加外键的 4 种方式mysql添加外键的语句的介绍到此结束,谢谢您的阅读,有关 Spring MVC 处理异常有 3 种方式、Docker 容器进入的 4 种方式、eclipse 安装 activiti 插件的 2 种方式、Java 中初始化 List 集合的 6 种方式!等更多相关知识的信息可以在本站进行查询。

本文标签: