0%

将a表的某些列插入b表的某些列

1
insert into a(ac1,ac2) select bc1,bc2 from b where ...;

重命名表

1
ALTER TABLE table_name RENAME TO new_table_name;

重命名字段

1
ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name;

修改字段类型

1
ALTER TABLE tableName modify(columnName 类型);

增加多个字段

1
2
3
alter table test1 add (name varchar2(30) default ‘无名氏’ not null,
age integer default 22 not null,
has_money number(9,2));
Read more »

@SneakyThrows是否可以大量使用?

不建议大量使用,异常还是要研究地做好各种catch和处理,在单元测试中为了效率可以使用。

@AllArgsConstructor

生成所有成员变量的有参构造器,同时因为Spring的新特性:
In the newest Spring release, it’s constructor does not need to be annotated with @Autowired annotation.

所以成员变量会被自动注入。
要注意的是,如果bean中有多个构造器的话,那么就要声明@Autowired给其中一个构造器,不然Spring不会默认去选择构造器。

@RequiredArgsConstructor

Required arguments are final fields and fields with constraints such as {@code @NonNull}.
RequiredArgsConstructor是针对final成员变量去生成有参构造器。

@UtilityClass

1
2
3
4
5
6
7
8
9
10
11
/**
* An annotation to create utility classes.
*
* If a class is annotated with {@code @UtilityClass}, the following things happen to it:<ul>
* <li>It is marked final.</li>
* <li>If any constructors are declared in it, an error is generated. Otherwise, a private no-args constructor is generated; it throws a {@code UnsupportedOperationException}.</li>
* <li>All methods, inner classes, and fields in the class are marked static.</li>
* <li><em>WARNING:</em> Do not use non-star static imports to import these members; javac won't be able to figure it out. Use either:
* <code>import static ThisType.*;</code> or don't static-import.</li>
* </ul>
*/

被@UtilityClass定义的类会被视为工具类,该类会被编译成final类型,同时生成一个私有的无参构造器,禁止被实例化,此外,该类的所有方法,内部类和变量都会被编程成静态类型。

Read more »

为什么加索引后会使写入、修改、删除变慢?

事物都是有两面的, 索引能让数据库查询数据的速度上升, 而使写入数据的速度下降,原因很简单的, 因为平衡树这个结构必须一直维持在一个正确的状态, 增删改数据都会改变平衡树各节点中的索引数据内容,破坏树结构, 因此,在每次数据改变时, DBMS必须去重新梳理树(索引)的结构以确保它的正确,这会带来不小的性能开销,也就是为什么索引会给查询以外的操作带来副作用的原因。

什么情况下要同时在两个字段上建索引?

有一种例外可以不使用聚集索引就能查询出所需要的数据, 这种非主流的方法 称之为「覆盖索引」查询, 也就是平时所说的复合索引或者多字段索引查询。 文章上面的内容已经指出, 当为字段建立索引以后, 字段中的内容会被同步到索引之中, 如果为一个索引指定两个字段, 那么这个两个字段的内容都会被同步至索引之中。

先看下面这个SQL语句

1
2
3
4
//建立索引
create index index_birthday on user_info(birthday);
//查询生日在1991年11月1日出生用户的用户名
select user_name from user_info where birthday = '1991-11-1'

这句SQL语句的执行过程如下

  • 首先,通过非聚集索引index_birthday查找birthday等于1991-11-1的所有记录的主键ID值

  • 然后,通过得到的主键ID值执行聚集索引查找,找到主键ID值对就的真实数据(数据行)存储的位置

  • 最后, 从得到的真实数据中取得user_name字段的值返回, 也就是取得最终的结果

我们把birthday字段上的索引改成双字段的覆盖索引

1
create index index_birthday_and_user_name on user_info(birthday, user_name);
Read more »