精华内容
下载资源
问答
  • Oracle如何创建条件索引
    千次阅读
    2018-07-23 17:39:26

    首先讲述一个业务场景:

    数据库商品表中有goods_id,goods_name,goods_price,status四个字段,goods_id是自增主键,status是状态,只有0,1两种可能,默认为1,goods_name是商品名称。要求状态为1 的商品名称不允许重复,状态为0的可以无限重复。

    首先创建表:

    -- Create table
    create table TB_GOODS
    (
      goods_id    VARCHAR2(64) not null,
      goods_name  VARCHAR2(256) not null,
      goods_price VARCHAR2(64) not null,
      status      VARCHAR2(1) not null
    );
    
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table TB_GOODS
      add constraint PK_TB_GOODS primary key (GOODS_ID);

    如何实现业务场景:

    -- Create/Recreate indexes 
    create unique index TB_GOODS_UNIQUE_INDEX on TB_GOODS (GOODS_NAME, DECODE(TO_NUMBER(STATUS),1,STATUS,GOODS_ID));

    通过使用Oracle提供的decode函数实现:

    如果状态为1则设定唯一索引为goods_name,status

    如果状态不为1则设定唯一索引为goods_name,goods_id

    这样,便可以随意插入状态为0的,商品名称相同的数据了。

    更多相关内容
  • 这个需求应该也比较常见,在不同的条件创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬...

    这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。

    倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬编码一些东西做if判断。那么现在有个@Conditional注解后,事情就简单多了。用法很简单,直接上代码。

    新建一个springboot项目,添加一个Configuration标注的类,我们通过不同的条件表达式来创建bean。

    package com.tianyalei.condition;
    
    import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Conditional;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Created by wuweifeng on 2017/10/11.
     */
    @Configuration
    public class Config {
    
        @Conditional(MyCondition.class)
        @Bean
        public String condition() {
            System.err.println("自定义的condition的match方法返回值为true时,才会进入该方法创建bean");
            return "";
        }
    
        /**
         * 该Abc class位于类路径上时
         */
        @ConditionalOnClass(Abc.class)
        @Bean
        public String abc() {
            System.err.println("ConditionalOnClass true");
            return "";
        }
    
    //    @ConditionalOnClass(Abc.class)
    //    @Bean
    //    public Abc newAbc() {
    //        System.err.println("ConditionalOnClass true");
    //        return new Abc();
    //    }
    
        /**
         * 存在Abc类的实例时
         */
        @ConditionalOnBean(Abc.class)
        @Bean
        public String bean() {
            System.err.println("ConditionalOnBean is exist");
            return "";
        }
    
        @ConditionalOnMissingBean(Abc.class)
        @Bean
        public String missBean() {
            System.err.println("ConditionalOnBean is missing");
            return "";
        }
    
        /**
         * 表达式为true时
         */
        @ConditionalOnExpression(value = "true")
        @Bean
        public String expresssion() {
            System.err.println("expresssion is true");
            return "";
        }
    
        /**
         * 配置文件属性是否为true
         */
        @ConditionalOnProperty(
                value = {"abc.property"},
                matchIfMissing = false)
        @Bean
        public String property() {
            System.err.println("property is true");
            return "";
        }
    }
    

    这里面有个空类Abc.class,你可以就创建个叫Abc的类,里面是空的就行。

    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.type.AnnotatedTypeMetadata;
    
    /**
     * Created by wuweifeng on 2017/10/11.
     */
    public class MyCondition implements Condition {
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            //判断当前系统是Mac,Windows,Linux
            return conditionContext.getEnvironment().getProperty("os.name").contains("Mac");
        }
    }


    @Conditional(MyCondition.class)
    这句代码可以标注在类上面,表示该类下面的所有@Bean都会启用配置
    也可以标注在方法上面,只是对该方法启用配置


    除了自己自定义Condition之外,Spring还提供了很多Condition给我们用
    @ConditionalOnBean(仅仅在当前上下文中存在某个对象时,才会实例化一个Bean)
    @ConditionalOnClass(某个class位于类路径上,才会实例化一个Bean)
    @ConditionalOnExpression(当表达式为true的时候,才会实例化一个Bean)
    @ConditionalOnMissingBean(仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean)
    @ConditionalOnMissingClass(某个class类路径上不存在的时候,才会实例化一个Bean)
    @ConditionalOnNotWebApplication(不是web应用)

    以上是一些常用的注解,其实就是条件判断,如果为true了就创建Bean,为false就不创建,就这么简单。

    这些注解里的条件可以是多个,也可以赋默认值,也可以标注在类上,如果标注在类上,则对类里的所有@Bean方法都生效。

    其中@ConditionalOnProperty是指在application.yml里配置的属性是否为true,其他的几个都是对class的判断。

    我在配置里加上abc.property = true这个配置就可以测试上面的代码了。

    然后再来一个对类进行多个条件标注的例子:

    package com.tianyalei.condition;
    
    import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * Created by wuweifeng on 2017/10/11.
     */
    @Configuration
    @ConditionalOnProperty(
            value = {"abc.property"},
            matchIfMissing = false
    )
    @ConditionalOnClass(Abc.class)
    public class Multi {
        @Bean
        @ConditionalOnMissingBean({Abc.class})
        public String check() {
            System.err.println("multi check");
            return "check";
        }
    }
    
    OK,代码很简单,运行看看结果

    可能上面的那些你用的地方不常见,那我来举一个我正在使用的例子。我的应用是基于SpringCloud的,在线上部署时有eureka来做注册中心,而在本地环境下,我的应用是单机的,不需要eureka,但是代码里已经引入了eureka了,每次启动就会自动去连接eureka,然后控制台就开始报错。虽然不影响功能,但是看着一直不停的报错也是不顺眼。

    那么我就可以使用Condition注解来解决它。

    /**
     * @author wuweifeng wrote on 2017/11/25.
     * 根据部署环境动态决定是否启用eureka
     */
    @Component
    @ConditionalOnProperty(value = "open.eureka")
    @EnableDiscoveryClient
    public class JudgeEnableDiscoveryClient {
    }
    
    我把EnableDiscoveryClient这个注解单独放个类里,里面什么也不写,条件就是application.yml里配置的open.eureka
    如果我只想让线上的环境开启eureka,那么我就在application-prod.yml里配上open.eureka=true,其他的yml什么也不写就行了。这样本地启动时就相当于没有开启EnableDiscoveryClient。


    使用场景还是蛮多的,具体的看情况,但是需要记住有这么个注解,以便不时之需。





    展开全文
  • MySQL创建表和约束条件(四)

    千次阅读 多人点赞 2019-11-15 14:09:16
    古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。 上一章简单介绍了 MySQL的数据类型(三),如果没有看过,请观看上一章 ...在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择...

    古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。

    上一章简单介绍了 MySQL的数据类型(三),如果没有看过,请观看上一章

    一. 创建表

    上一章时,我们学习了 MySQL的数据类型, 就像Java 知道了 int,string 之后,就该学习类了, 现在,我们知道了数据类型,就该去学习表 Table了。

    在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择数据库, 再进行创建, 否则会提示 “No database selected” 的错误。

    创建表语句:

    		create table 表名(
    				列名1  数据类型  [列级别约束条件] [默认值],
    				列名2  数据类型  [列级别约束条件] [默认值],
    				......
    				列名n  数据类型  [列级别约束条件] [默认值],
    
    				[表级别约束条件]
    	
    		);
    

    其中 表名,列名1,列名2,列名n 就像Java 里面的变量一样,不能用关键字。 但与Java 不同的是, MySQL不区分大小写。 这一点,与HTML一样。

    一.一 查询该数据库下所有的表

    使用 show tables; 命令进行查询该数据库下的表。

    要先使用 use 数据 库名先选择数据库。 使用 yuejl数据库。

    有图片。

    查询所具有的表 show tables;

    有图片。

    这个表 t 是上一章在测试timestamp时创建的。

    一.二 创建一个简单的表 temp1

    创建一个简单的表, 里面只有一个字段 name, 类型是 varchar 类型, 长度是10.

    不要忘记 先 use 数据库名 来选择数据库。

    按照上面的创建表的语句进行创建:

     create table t2(
        name varchar(10)
       );
    

    有图片

    一.三 创建一个复杂的表 temp2

    创建一个复杂的表,与老蝴蝶常用的User.java 类一样,具有 id(int类型),name(varchar类型),sex(varchar类型),age(int类型),description(varchar类型) 五个字段。

    (创建时,要按照一定的层次进行书写,这样显的帅气。)

    create table t3(
         id int(11),
         name varchar(20),
        sex varchar(10),
         age int(3),
        description varchar(100)
       );
    

    有图片。

    一.四 展示所有的表

    用 show tables; 命令进行展示

    有图片。

    刚才的两个表 t2,t3 放置到这里面了。

    一.五 创建表时常见错误

    1 . 表名已经存在, 会报 表已经存在的错误
    有图片。

    2 . 列名最后一个 写添加了 , 号, 报错。

    有图片

    3 . 列与列之间,没有加 ,号报错

    有图片。

    要想 用sql语句创建表时,不报错,只有多练,多写。 前期学习者建议用sql去创建表,不建议使用数据库连接工具去创建表。

    二. 约束条件

    二.一 约束条件的由来

    我们在创建表的命令时, 用这么两个东西, 列级别约束条件和表级别约束条件。 约束条件是干什么用的呢? 用什么作用效果呢?

    数据库是存储,管理和操作数据的的仓库, 而表是真正存储数据的, 更准确的说,所有的数据都是放置在表里面的。 我们希望在存储数据之前,就希望能对数据进行一下验证, 就像 Web网站里面的前端验证和后端数据验证, 登录过滤器,权限过滤器一样, 使正确的数据才能够正常的插入,使错误的数据不能够正常插入,提示报错, 使表有个自我检查的功能。 数据库设计者们发现有这么几个常用的小验证,小约束:

    1 . 这个列上面的属性值 必须要存在。 这就是非空约束

    2 . 这个列上面的属性值必须要唯一,不能重复。 这就是唯一约束

    3 . 这个列或者这两个列可以唯一确定这一行,这一行能够通过这个列或者这两列与 其他的行区别开来。 这就是主键约束

    4 . 这个列上的值如果没有手动填充值,数据库表默认提供一下,如性别,没有填写,默认是男。 这就是默认值约束

    5 . 这个列的值是往上增加的,并且与它上一行的值有关系。 如 num次数, 它上一行的值是1, 它这一行的值是2, 它下一行的值是 3 ,下下一行的值是4。 希望这个1,2,3,4 是表自己递增的, 并不是手动插入的。 这就是自增约束。

    6 . 这个列上的值,一定来源于其他表中的值,并不是凭空出现的。发生在两个表之间。 如员工的部门属性的值,一定来源于部门表中的值。 这就是外键约束

    7 . 这个列上的值,只能是规定好的值,不能是其他以外的值。 如性别, 只能是男或者女。 手动添加其他值,包括 保密,未知,太监,人妖 之类的,都不能正确插入。 这叫做检查约束(MySQL数据库中不起作用)。

    其中,1,2,3,4,5,7 是发生在一个表内的约束, 而6是发生在两个表之间的约束。

    上面专业的说法,叫做 数据完整性。

    数据完整性分为三个部分:

    1 . 实体完整性

    2 . 域完整性

    3 . 引用完整性

    实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。

    限制字段中的数据必须乎合预设的数据类型。

    参照的完整性不允许关系中有不存在的实体引用。

    使用约束,可以很方便的保证插入数据的正确性,避免逻辑错误数据的出现,但不能保证业务错误数据的出现。 业务错误数据,需要通过业务流程控制来避免。

    二.二 约束条件的分类

    • 主键约束 Primary Key (简称 PK)
    • 非空约束 Not Null
    • 唯一约束 Unique
    • 外键约束 Foreign Key (简称 FK)
    • 默认约束 Default
    • 检查约束 Check(MySQL中不起作用)
    • 自增约束 AUTO_INCREMENT

    下面,老蝴蝶分别对其进行详细的讲解。

    三. 主键约束 Primary Key

    主键约束 分为两种, 一种是 单字段主键, 另外一种是多字段联合主键。

    三.一 单字段主键

    1 . 在创建字段时, 指定 列级别约束条件

     			列名  数据类型   Primary Key  [默认值]
    

    如:

    create table pk4(
         id int(11) primary key,
       	 name varchar(10)
        );
    

    有图片。

    2 . 在创建完所有列之后, 指定 表级别约束条件

    	[constraint 约束名] primary key (列名)
    

    其中, 约束名通常命名为: PK_表名。 常常省略 constraint 约束名, 直接用 primary key (列名)

     create table pk5(
        id int(11),
        name varchar(10),
        primary key (id)
       );
    

    有图片。

    三.二 多字段联合主键

    多字段联合主键只能使用 表级别约束条件

    	[constraint 约束名]  primary key (列名1,列名2)
    

    也常常省略 constraint 约束名。

    如 创建学生与课程 的成绩表。 其中,学生编号和课程编号是联合 主键。

     create table pk6(
        stuId int(11),  -- 学生编号
         courseId int(11), -- 课程编号
         score double(5,2),
        primary key (stuId,courseId)
      );
    

    在这里插入图片描述

    三.三 演示主键约束

    用 pk4 表做例子吧。 (关于数据的插入,后面章节会详细讲解)

    1 . 先插入一个编号为 1,名称为两个蝴蝶飞 的记录。

    insert into pk4(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . 再插入一个编号为1,名称为老蝴蝶的记录。

    insert into pk4(id,name) values(1,'老蝴蝶');
    

    有图片。

    编号 id是重复的,不能重复性插入, 会报错。

    四. 非空约束 not null

    只能指定一个单字段为非空约束,没有联合字段做为非空约束。 可以让多个字段都为非空约束。

    	列名  数据类型  not null [默认值]
    

    四.一 创建非空约束

    活学活用,将前面的主键约束再练习一遍。

      create table n7(
        id int(11) primary key,
        name varchar(20) not null
       );
    


    注意,只有这一种写法。 没有 not null (name) 作为表级别约束条件的, 只能放在列级别约束。

    四.二 演示非空约束

    1 . name有值, 正常插入

    insert into n7(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . name 没有值 或者插入值为 null

    insert into n7(id) values(2);
    

    有图片。

    insert into n7(id,name) values(2,null);
    

    有图片。

    五. 唯一约束 Unique

    可以为空,MySQL也允许其他的列也可以为null.这一点不像SQL Server 数据库。

    五.一 创建列约束条件的 唯一约束

    命令:

    	列名  数据类型  unique 
    

    创建语句:

    create table u8(
        id int(11) primary key,
        name varchar(20) unique
    );
    

    有图片。

    五.二 创建表约束条件的 唯一约束

    也可以创建表级别的唯一约束

    [constraint 唯一约束名] unique (列名)
    

    创建语句:

    	create table u9(
        	 id int(11) primary key,
       		 name varchar(20),
        	unique (name)
        );
    

    在这里插入图片描述

    五.二 演示唯一约束

    以 u8 表为例。

    1 .先插入一条数据, id为1, name为两个蝴蝶飞

    insert into u8(id,name) values(1,'两个蝴蝶飞');
    

    有图片。

    2 . 再创造一条数据, id为3, name仍然为两个蝴蝶飞。 name 重复了。

    insert into u8(id,name) values(3,'两个蝴蝶飞');
    

    在这里插入图片描述

    3 . 但可以插入一条空的值, 如name 的值插入为 null

    insert into u8(id,name) values(4,null);
    

    有图片。

    但 null的值,可以有多个。 再插入 id为5,名称仍然为null 的。

    insert into u8(id,name) values(5,null);
    

    有图片。

    查询一下: select * from u8;

    有图片。

    说明,唯一约束可以插入多个 null的值,并不是唯一的null值。

    六. 默认约束 default

    命令:

    	列名  数据类型  default 默认值
    

    默认约束是,如果不填入这个属性值,就用默认值代替,如果填入了,哪怕填入的值是空,也用填入的值。

    六.一 创建默认约束

    令 性别默认是 男.

    create table d10(
        id int(11) primary key,
         name varchar(20),
         sex varchar(10) default '男'
       );
    

    在这里插入图片描述

    六.二 演示默认约束

    1 . 插入一条正常的数据, 性别是男。

     insert into d10(id,name,sex) values(1,'两个蝴蝶飞','男');
    

    有图片。

    2 . 插入一条正常的数据,性别是女.

     insert into d10(id,name,sex) values(2,'精灵妹','女');
    

    有图片。

    3 . 插入一条数据,不指定性别。

     insert into d10(id,name) values(3,'老蝴蝶');
    

    有图片。

    4 . 插入一条数据,性别为null 值。

    insert into d10(id,name,sex) values(4,'岳泽霖',null);
    

    在这里插入图片描述

    5 . 查询刚才的数据 select * from d10;

    有图片。

    七 检查约束 check (MySQL数据库被分析,但是会被忽略)

    七.一 MySQL 创建列级别约束 (不起作用)

    命令:

    	列名  数据类型 check (sql表达式)
    

    可以放置值列表, 表示插入的值必须在值列表里面。 也可以放置sql表达式,表示插入的值必须符合sql表达式

    1 . 创建和演示 性别只能是男或者女

    create table d11(
         id int(11) primary key,
         name varchar(20),
         sex varchar(10) check(sex in ('男','女'))
       );
    

    有图片。

    插入性别是男 数据。

    insert into d11(id,name,sex) values(1,'两个蝴蝶飞','男');
    

    有图片

    插入性别是保密的数据

    insert into d11(id,name,sex) values(2,'老蝴蝶','保密');
    

    有图片。

    发现,竟然可以插入, 检查约束并没有起作用。

    去谷歌一下, 里面提到了 MySQL 检查约束不起作用的问题。

    CHECK
    The CHECK clause is parsed but ignored by all storage engines. See Section 1.8.2.3, “Foreign Key Differences”

    但MySQL 可以使用其他的方式来代替, 如enum 枚举类型,或者触发器。 但老蝴蝶这儿不讲解。

    为了系统的连贯性,另外检查约束 check 确实我也不太懂,所以决定用 Oracle 数据库来讲解。 Oracle 数据库支持 检查约束 Check.

    以下的内容,都是用Oracle 进行创建的。 plsql工具。

    七.二 Oracle 创建列级别约束 (起作用)

    1 . 创建和演示性别只能是男或者女

    创建表:

     create table t1(
           id int primary key,
           name varchar2(20),
           sex varchar(10) check(sex in ('男','女')) -- 也可以用  check(sex='男' or sex='女')
         );
    

    插入数据:

    	insert into t1(id,name,sex) values(1,'两个蝴蝶飞','男'); -- 正常插入
         insert into t1(id,name,sex) values(2,'老蝴蝶','保密'); -- 会提示错误
    

    有图片。

    检查约束好使。

    2 . 创建和演示 年龄必须大于18岁 小于60

    创建表:

    create table t2(
               id int primary key,
               name varchar2(20),
               age int check(age>=18 and age<=60)
          );
    

    插入数据:

    	 insert into t2(id,name,age) values(1,'两个蝴蝶飞',20); -- 正常插入
          
          insert into t2(id,name,age) values(2,'岳泽霖',16); -- 会提示错误
          
          insert into t2(id,name,age) values(3,'老蝴蝶',62); --会提示错误
    

    有图片。

    检查约束好使。

    七.三 Oracle 创建表级别约束 (起作用)

    与列级别约束 基本类似 。

    创建表:

     create table t3(
               id int primary key,
               name varchar2(20),
               sex varchar(10),
               check(sex in ('男','女')) -- 也可以用  check(sex='男' or sex='女')
           );
    

    插入数据:

     	  insert into t3(id,name,sex) values(1,'两个蝴蝶飞','男'); -- 正常插入
          insert into t3(id,name,sex) values(2,'老蝴蝶','保密'); -- 会提示错误
    

    年龄的那个类似:

    创建表:

    create table t4(
               id int primary key,
               name varchar2(20),
               age int,
               check(age>=18 and age<=60)
          );
    

    插入数据:

    	 insert into t4(id,name,age) values(1,'两个蝴蝶飞',20); -- 正常插入
          
          insert into t4(id,name,age) values(2,'岳泽霖',16); -- 会提示错误
          
          insert into t4(id,name,age) values(3,'老蝴蝶',62); --会提示错误
    

    八. 自增约束 AUTO_INCREMENT

    自增约束,只能用于整数类型,默认开始值是1,每次增加1,用于数据库生成不重复的主键。(但在高并发环境下,这种方式生成的主键不一定正确)

    	列名  数据类型  AUTO_INCREMENT
    

    八.一 创建自增约束

     create table a12(
         id int(11) primary key auto_increment,
         name varchar(20)
       );
    

    有图片

    八.二 演示自增约束

    1 . 插入第一个数据,不插入id 的值

    insert into a12(name) values('两个蝴蝶飞');
    

    有图片。

    2 . 插入第二个数据,不插入id的值

    insert into a12(name) values('老蝴蝶');
    

    有图片

    3 . 查询数据

    有图片。

    九. 外键约束 Foreign Key

    外键约束不像上面的那些约束,是发生在一个表之间的, 外键约束 Foreign Key 是发生在两个表之间的, 这两个表,一个叫主表(父表), 一个叫从表(子表)。 其中,在子表里面定义外键约束, 引用主表中的主键。 外键可以是一列也可以是多列, 但一般都是一列。 一个表里面可以给多个列都定义外键。 就像 员工的课程成绩表一样, 员工编号是员工表的外键, 课程编号是课程表的外键。 外键是参数完整性, 里面的值可以为null值, 但如果不为null值, 则必须是主表主键的某个值。 注意,子表的外键必须引用的是主表的主键,主表的 unqiue 属性都不行,必须是主键。

    九.一 创建外键约束 Foreign Key

    命令:

    	[constraint 外键约束名] foreign key (列名)  references 主表名(主键列名)
    

    是表级别的约束条件。

    建议是用户自己手动添加外键约束名, constraint 外键约束名 不省略。

    常见的部门和员工表。 即员工表里面的部门编号一定是部门表的主键。

    1 . 创建部门表 dept

    create table dept(
        id int(11) primary key,
        name varchar(20)
        );
    

    有图片。

    2 .创建员工表 user

    create table user(
        id int(11) primary key,
         name varchar(20),
         description varchar(100),
         deptId int(11),
         constraint fk_user_deptId foreign key(deptId) references dept(id)
        );
    

    有图片。

    创建外键成功。

    九.二 外键约束演示

    1 . 先往部门表里面插入两条数据

    insert into dept(id,name) values(1,'信息部'),(2,'开发部');
    

    有图片。

    2 .往user 表里面插入 部门编号为 1的数据, 是正确的数据

     insert into user(id,name,description,deptId) values(1,'两个蝴蝶飞','一个快乐的程序员',1);
    

    有图片。

    3 . 往user 表里面插入部门编号为3的数据。 没有这个部门,是错误的数据。

     insert into user(id,name,description,deptId) values(2,'老蝴蝶','一个快乐的程序员',3);
    

    有图片。

    报外键约束的错误。 子表中插入父表中主键没有的属性值会报错。

    4 . 删除父表中的数据, 即删除父表中 部门编号为1的那条数据

    delete from dept where id=1;
    

    有图片。

    因为父表中的数据在子表中被引用了,所以是无法直接删除的, 可以先将子表中引用的那条数据删除,或者将deptId 更新成null, 再删除父表中的数据才可以。

    update user set deptId=null where id=1;
    
    delete from dept where id=1;
    

    有图片。

    十. 查看表结构

    十.一 describe 表名/desc 表名 查看

    describe user;
    

    有图片。

    也可以用简写的形式 : desc 表名

    desc user;
    

    有图片。

    侧重点是各个列的信息。

    其中:

    1. filed      指的是列名
    2. type     指的是列名的数据类型
    3. null     表示该列是否可以存储null值
    4. key     是否已经编制索引。 PRI 表示主键,UNI 表示 unique 索引的一部分, MUL 表示可允许出现多次
    5. Default      是否有默认值
    6. extra:     该列的附加信息, 如AUTO_INCREMENT

    十.一 show create table 表名 查看

    show create table user\G	
    

    有图片。

    会将创建 table 时的sql 语句打印出来, 还包括引擎和编码格式。

    侧重点是sql 创建语句。

    加\G 不加 \G 都可以, 加\G 可以使显示结果更加直观。



    谢谢!!!
    展开全文
  • conditon:条件 三、例子 其中bill和linux是人名 1、定义person类: 2、定义条件类 @Conditional中包含condition数组,所以定义两个条件类 其中: 【 Environment environment = context.getEnvironment()...

    一、源码

    二、 作用

    conditon:条件

    三、例子

    其中bill和linux是人名

    1、定义person类:


    2、定义条件类

    @Conditional中包含condition数组,所以定义两个条件类

    其中:

    【    Environment environment = context.getEnvironment();

           String property = environment.getProperty("os.name");

    可以获得操作系统的名字;】

    package com.atguigu.condition;
    
    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.env.Environment;
    import org.springframework.core.type.AnnotatedTypeMetadata;
    
    //判断是否linux系统
    public class LinuxCondition implements Condition {
    
    	/**
    	 * ConditionContext:判断条件能使用的上下文(环境)
    	 * AnnotatedTypeMetadata:注释信息
    	 */
    	@Override
    	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    		// TODO是否linux系统
    		//1、能获取到ioc使用的beanfactory
    		ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
    		//2、获取类加载器
    		ClassLoader classLoader = context.getClassLoader();
    		//3、获取当前环境信息
    		Environment environment = context.getEnvironment();
    		//4、获取到bean定义的注册类
    		BeanDefinitionRegistry registry = context.getRegistry();
    		
    		String property = environment.getProperty("os.name");
    		
    		//可以判断容器中的bean注册情况,也可以给容器中注册bean
    		boolean definition = registry.containsBeanDefinition("person");
    		if(property.contains("linux")){
    			return true;
    		}
    		
    		return false;
    	}
    
    }
    
    package com.atguigu.condition;
    
    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.env.Environment;
    import org.springframework.core.type.AnnotatedTypeMetadata;
    
    //判断是否windows系统
    public class WindowsCondition implements Condition {
    
    	@Override
    	public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    		Environment environment = context.getEnvironment();
    		String property = environment.getProperty("os.name");
    		if(property.contains("Windows")){
    			return true;
    		}
    		return false;
    	}
    
    }
    

     3、配置类MainConfig2.java

    如果是windows系统,就会返回true,此时就加载bill对象;

    如果是linux系统,就会返回true,此时就加载linux对象;

    注,如果定义在方法上:

    4、测试

    	@Test
    	public void test03(){
    
                    nnotationConfigApplicationContext applicationContext = new                 
            AnnotationConfigApplicationContext(MainConfig2.class);
    
    		Map<String, Person> persons = applicationContext.getBeansOfType(Person.class);
    		System.out.println(persons);
    		
    	}

    结果:

    说明:当前是Windows系统,所以创建了bill对象。

     

     

    ======以下于你或许是个好消息======

     

    好消息就是:欢迎访问下面的博客网站哈哈哈......

     

    网站名称:Java学习笔记网 (点击进入)

    url:https://www.javaxxbj.com/ (点击进入)

    网站特点:

    1. java主要网站的导航目录
    2. 你可以记录自己的博客,并可以控制显示和隐藏,可利于管理啦!!!
    3. 可以添加收藏各个网站的链接!!!
    4. 甚至也可以文章收藏,点赞,关注,查看我的消息等功能哦!!1

    看一小点点的截图:

    或可一试哦!

    展开全文
  • 这个需求应该也比较常见,在不同的条件创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。 倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬...
  • 我想创建一个新列,根据col1的index来选择col2的item, 例如: ``` index col1 col2 col3 1 [1,2] [apple, peer, oragne, banana] [apple,peer] 2 [2] [pancake, soda] [soda] ``` 请问应该如何操作?
  • 一、创建DNS服务器: 1、打开“服务器管理器”,点击“添加角色和功能”: 2、点击下一步: 3、点击下一步: 4、点击下一步: 5、勾选“DNS服务器”: 6、点击下一步: 7、点击下一步: 8、...
  • 只有当特定名称或者类型的Bean存在于BeanFactory时才创建某个Bean : @Configuration public class ConditionalOnBeanConfig { ... // 创建一个Bean,名称是 beanA,不需要满足什么前置条件, } ...
  • 结合使用注解@ConditionalOnClass和@Bean,可以仅当某些类存在于 classpath 上时候才创建某个Bean: @Configuration public class ConditionOnClassConfig { @Bean @ConditionalOnClass(value={java.util....
  • FLUENT创建周期性边界条件方法 -

    千次阅读 2020-12-23 21:17:38
    1. 指定计算域的Rotational Axis(Cell Zone Conditions中,设为Frame Motion),其中,rotation-axis origin设为0,0,0。... [yes]回车 然后FLUENT自动检测,如果没问题就报告periodic zone已经成功创建
  • 创建索引的条件和注意事项

    千次阅读 2016-09-21 12:16:14
    索引的理解和创建索引应该注意的条件
  • SQL Server 创建表及其约束条件

    万次阅读 多人点赞 2016-09-21 19:55:10
    创建数据库: CREATE DATABASE my_db; 2.创建表: CREATE TABLE Persons ( Id_P int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ) 数据...
  • Spring 创建条件化的bean(满足一定条件才会实例化该bean) 应用场景: 要求在特定的环境变量下创建该bean 希望某个bean被声明时候才会创建该bean 希望一个或者多个bean只有在应用的类路径下包含特定的数据库才创建 ...
  • 数据库-创建数据库-创建数据表

    千次阅读 2022-03-20 17:22:53
    一.创建数据库
  • PostgreSQL中创建条件的唯一索引

    千次阅读 2018-05-20 00:04:01
    下面例子印证了这种操作方式,得出的结论是,PG中的唯一索引是可以增加where条件过滤的:postgres=# create table t1 (id int); CREATE TABLE postgres=# create unique index idx_id_unq on t1(id) where id &...
  • 1.在非静态内部类条件下不能逐步创建对象,要先创建一个外部类对象,再创建内部类对象。 个人理解:因为类还没加载即还没分配内存,内部所有非静态成员都没分配内存,不可能直接创建一个非静态内部类对象。 2.在静态...
  • 结合使用注解@ConditionalOnMissingBean和@Bean,可以做到只有特定名称或者类型的Bean不存在于BeanFactory中时才创建某个Bean : @Configuration public class ConditionalOnMissingBeanConfig { @Bean ...
  • @Conditional 可以根据条件创建不同的bean,   1 判断条件的类需要实现condition ,来设置判断的条件 2 自定义一个接口, 3 让不同的bean都实现这个接口,并返回不同的结果(是用于判断的条件) 4 在配置类中...
  • 用函数 BAPI_SALESORDER_CREATEFROMDAT2创建SO的时候,遇见个问题,就是如图: 会多出来一个类型,搞了半天,发现是一个函数里的一个参数,我没有设置EXPORTING参数:  LOGIC_SWITCH 的字段PRICING = 'G'. "复制...
  • WinForm 创建窗口句柄时出错

    千次阅读 2020-07-04 17:10:44
    问题的具体描述:根据条件设置移除和加入不同的控件,当前控件不满足条件时,将控件移除,然后加入新的控件。 代码如下: if (this.Panel.Controls.Contains(this.R_Parameter)) { this.Panel.Controls.Remove...
  • 查询表主键约束 select * from dba_constraints ...REV_TOMATERIAL_REPORTLOSS_ITEM和REV_TOMATERIAL_REPORTLOSS_DET表,他两生成的主键约束都是PK_REV_TOMATERIAL_REPORTLOSS_1,就会相同,就会创建表失效
  • linux创建用户组命令

    千次阅读 2021-05-09 04:05:48
    Linux 系统是下可以通过命令创建用户,当然也可以创建用户组,下面由学习啦小编为大家整理了linux创建用户组命令的相关知识,希望对大家有帮助!linux下创建用户组命令——groupadd命令其格式如下:代码:groupadd ...
  • 结合使用注解@ConditionalOnMissingClass和@Bean,可以仅当某些类不存在于 classpath 上时候才创建某个Bean: @Configuration public class ConditionOnMissingClassConfig { @Bean @...
  • 我现在需要创建一个视图A,视图里面是三个视图BCD,根据一个页面传来的值判断不同的值查询不同的视图,这个值不少表中的字段。语法该怎么写?大神们帮帮忙啊!!
  • 13、创建触发器(CREATE TRIGGER)

    千次阅读 2020-10-17 17:31:20
    触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 基本语法 在 MySQL 5.7 中,可以使用 CREATE TRIGGER ...
  • SQL数据库创建表约束(Constraints)

    万次阅读 2019-04-14 22:41:27
    SQL 约束(Constraints) ...约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。 SQL CREATE TABLE + CONSTRAINT 语法 CREATE TABLEtable_name (column_name...
  • mysql如何创建多个联合索引

    千次阅读 2021-01-18 19:09:07
    MySQL中索引规则:1、需要加索引的字段,要在where条件中2、数据量少的字段不需要加索引3、如果where条件中是OR关系,加索引不起作用4、符合最左原则什么是联合索引?联合索引又叫复合索引。对于复合索引,Mysql从左...
  • Vue创建项目步骤

    万次阅读 多人点赞 2019-09-23 10:24:30
    2、进入项目目录,创建一个基于webpack模板的新项目: vue init webpack 项目名 3、切换到项目,进入项目 cd 项目名,然后在安装依赖 cnpm install 安装成功后,项目文件夹中回多出一个目录 node_modules ...
  • 做过采购订单创建操作的童鞋们,应该会发现,创建采购订单时,不只是条件类型的组合会带出来,有一些条件类型的值会也自动带出来。看过我写MM-PA解析的童鞋,应该知道条件分为常规条件、信息记录相关的条件、框架...
  • linux创建文件

    万次阅读 多人点赞 2018-03-23 09:11:17
    可以使用cat创建一个新的文件 命令:cat&gt;&gt;filename 使用cat创建文件时,以系统默认的文件属性作为新文件的属性,并接受键盘输入作为文件的内容。输入结束时按Ctrl+d退出并保存文件。 另外,使用cat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,706,508
精华内容 682,603
关键字:

创建公司的条件