深入浅出SQL(7)-ALTER

2023-11-07

该系列文章系个人读书笔记及总结性内容,任何组织和个人不得转载进行商业活动!

 

ALTER:改写历史

 

使用ALTER命令:

    可以修改表,对其套用新的设计方法,且不会影响现有数据;

    本章还会学到规范化的意义,我们要规范化我们的表;

 

由于重新建了本地数据库,相应的练习数据表需要重新建;

    新建数据库:hq_drinks;

    新建表:summer_drinks;

 

建表SQL:

mysql> CREATE TABLE summer_drinks

    -> (

    -> drink_name VARCHAR(30),

    -> cost DEC(4,2),

    -> burdening VARCHAR(50)

    -> );

Query OK, 0 rows affected (0.02 sec)

新建的summer_drinks表:

    包含了三个字段:饮品名称-drink_name、价格-cost、配料-burdening;

mysql> desc summer_drinks;

+------------+--------------+------+-----+---------+-------+

| Field      | Type         | Null | Key | Default | Extra |

+------------+--------------+------+-----+---------+-------+

| drink_name | varchar(30)  | YES  |     | NULL    |       |

| cost       | decimal(4,2) | YES  |     | NULL    |       |

| burdening  | varchar(50)  | YES  |     | NULL    |       |

+------------+--------------+------+-----+---------+-------+

我们需要一些改变:

    我们对该表新插入若干条数据;

    我们现在想对这张表做一些改变,但又不想丢失数据;

 

当前的表内容:

mysql> SELECT * FROM summer_drinks;

+------------------+-------+------------------+

| drink_name       | cost  | burdening        |

+------------------+-------+------------------+

| Apple Juice      | 15.50 | Apple,Water      |

| Orange Juice     | 15.50 | Orange,Water     |

| Banana Juice     | 15.50 | Banana,Water     |

| Strawberry Juice | 15.50 | Strawberry,Water |

+------------------+-------+------------------+

比如,我们想新添加一列表示饮品的量,单位是ml:

    我们可以使用ALTER轻松添加它;

 

添加新列:

mysql> ALTER TABLE summer_drinks

    -> ADD COLUMN milliliter INT;

 

指定新列的安放位置:

    删除刚刚添加的列,重新添加,我们来看看如何指定该列的安放位置;

 

删除指定列:

mysql> ALTER TABLE summer_drinks

    -> DROP COLUMN milliliter;

 

也可以删除多列:

mysql> ALTER TABLE drinks_sum

    -> DROP COLUMN burdening_main,

    -> DROP COLUMN burdening_sub;

 

使用关键字AFTER:

    和之前我们接触的FIRST类似;

mysql> ALTER TABLE summer_drinks

    -> ADD COLUMN milliliter INT AFTER cost;

现在我们再来看下表:

mysql> SELECT * FROM summer_drinks;

+------------------+-------+------------+------------------+

| drink_name       | cost  | milliliter | burdening        |

+------------------+-------+------------+------------------+

| Apple Juice      | 15.50 |       NULL | Apple,Water      |

| Orange Juice     | 15.50 |       NULL | Orange,Water     |

| Banana Juice     | 15.50 |       NULL | Banana,Water     |

| Strawberry Juice | 15.50 |       NULL | Strawberry,Water |

+------------------+-------+------------+------------------+

关键字AFTER:

    紧跟在新添加的列的名称后面;

    AFTER是可选关键字;如果不使用它,新列则会添加到表的最后;

 

类似的我们还有:

    FIRST、AFTER column、BEFORE column、LAST;

    另外还有SECOND、THIRD可供使用;

 

修改表:

    根据前一章关于ALTER的介绍,我么实践了添加新列;现在我们来看看如何修改表;

    对于上边我们新建的summer_drinks表,之所以要修改它,是因为它并不符合我们规范化的要求;

        burdening不满足原子性数据的要求,表没有主键;

        其他名称我们也想统一下;

   

ALTER命令:

    几乎能让你改变表里的一切,而且不需重新插入数据;

    但要小心,如果改变的是列的类型,可能会有遗失数据的风险;

 

承担具体修改的关键字:

1.CHANGE:

    可同时改变现有列的名称和数据类型;(修改数据类型可能会遗失数据)

2.MODIFY:

    修改现有列的数据类型或位置;(修改数据类型可能会遗失数据)

3.ADD:

    在当前表中添加一列——可自选类型;ADD新列的时候,可以指定新列的位置;

4.DROP:

    从表中删除某列;(对应的也会删除数据)    

5.其他关键字,比如RENAME等,实践时会介绍;

 

修改表名:

我们尝试为summer_drinks表起一个更加简洁的名字:

mysql> ALTER TABLE summer_drinks

    -> RENAME TO drinks_sum;

修改列名:

我们尝试修改milliliter列名为meter:

mysql> ALTER TABLE drinks_sum

    -> CHANGE COLUMN milliliter meter INT;

现在,我们为表添加两列:drink_id,drink_des,分别表示饮品的编号和描述;

mysql> ALTER TABLE drinks_sum

    -> ADD COLUMN drink_id CHAR(2) FIRST,

    -> ADD COLUMN drink_des VARCHAR(100);

现在我们的表是这样的:

mysql> SELECT * FROM drinks_sum;

+----------+------------------+-------+-------+------------------+-----------+

| drink_id | drink_name       | cost  | meter | burdening        | drink_des |

+----------+------------------+-------+-------+------------------+-----------+

|     NULL | Apple Juice      | 15.50 |  NULL | Apple,Water      | NULL      |

|     NULL | Orange Juice     | 15.50 |  NULL | Orange,Water     | NULL      |

|     NULL | Banana Juice     | 15.50 |  NULL | Banana,Water     | NULL      |

|     NULL | Strawberry Juice | 15.50 |  NULL | Strawberry,Water | NULL      |

+----------+------------------+-------+-------+------------------+-----------+

重新装备列:

    我们已经掌握了修改表名、修改列名,很好,但还不够,对于我们当前的表结构我们还需要:

    1)添加主键:将drink_id列作为主键,名字替换为更简洁的id,同时列的类型也需要替换为关键字AUTO_INCREMENT需要的整数类型;

    2)数据原子性支持:burdening列,拆分成burdening_main、burdening_sub;

 

ALTER和CHANGE:

    我们来看看如何使用这两个关键字实现主键的需求:

        把drink_id列名修改为id;

        修改id的数据类型为INT;

        添加AUTO_INCREMENT,将其标注为主键;

    同时修改数据类型和名称,使用关键字CHANGE最为合适;

mysql> ALTER TABLE drinks_sum

    -> CHANGE COLUMN drink_id id INT NOT NULL AUTO_INCREMENT,

    -> ADD PRIMARY KEY(id);

Query OK, 4 rows affected (0.06 sec)

CHANGE COLUMN之后是旧列名 之后 紧跟 新列名及其数据类型、限制条件等;在上述命令中我们指定了主键;

 

现在的表是这样的:

mysql> SELECT * FROM drinks_sum;

+----+------------------+-------+-------+------------------+-----------+

| id | drink_name       | cost  | meter | burdening        | drink_des |

+----+------------------+-------+-------+------------------+-----------+

|  1 | Apple Juice      | 15.50 |  NULL | Apple,Water      | NULL      |

|  2 | Orange Juice     | 15.50 |  NULL | Orange,Water     | NULL      |

|  3 | Banana Juice     | 15.50 |  NULL | Banana,Water     | NULL      |

|  4 | Strawberry Juice | 15.50 |  NULL | Strawberry,Water | NULL      |

+----+------------------+-------+-------+------------------+-----------+

如果需要改变两个列,我们可以以一条SQL语句来实现:只需要在ALTER TABLE后放两个CHANGE COLUMN,中间以逗号隔开;

 

注意数据类型也修改了:

    如果把数据改成另一种类型,你可能会丢失数据;

    如果你想改变的数据类型和原始数据类型不兼容,命令则不会执行;但真正的惨剧可能发生在类型兼容的情况下,你的数据可能被截断;

    例如:从varchar(10)改为char(1),数据’Bonzo’将被砍成’B’;

    相同的问题也会出在数字类型上,如精度问题引起的数据丢失;

 

只改变数据类型:

    可以CHANGE COLUMN column column NEWTYPE;但我们有更简单的方式;

    我们可以使用关键字MODIFY,他只会修改列的类型而不会干涉他的名称;

mysql> ALTER TABLE drinks_sum

    -> MODIFY COLUMN drink_des VARCHAR(50);

这里注意:我们指定的新数据类型长度是50,原来是100,我们需要确定新类型不会造成旧数据被截断;

 

改变列的顺序:

    创建表后就无法真正地改变列的顺序了;最多只能在指定位置添加新列,然后删除旧列并指定位置,但这样会丢失数据;

    实际上列的顺序并不会造成问题,因为在SELECT查询中可以指定查询结果的列顺序;硬盘里存储数据的顺序并不重要;

    SELECT column3,column2,column1 FROM table;

 

重新认识DROP:

    更准确的来说,应该叫“卸除”;对于用不到的列,可以把它卸除DROP;

    你的列越多,RDBMS的工作就越累,所占空间也越大;查询变慢、计算机的处理器也会运行得很辛苦;

 

一旦你卸除列,原本存储在该列中的一切内容都会跟着被卸除;因此使用DROP COLUMN时需要务必小心;或许应该先以SELECT选取出列,确定是我们要删除的列;

 

我们可以用一个ALTER TABLE,配合之前我们接触到的RENAME TO、ADD COLUMN、CHANGE COLUMN等子句进行搭配使用,多个子句中间以逗号分割;

 

没有蠢问题:

1.之前说过,MODIFY无法重新排列列的顺序,但是我们的SQL软件工具让我们重新排列他们,有是怎样做到的:

    其实软件在背后做了好多,他会把列的内容复制到临时表中,然后卸除该列,再用ALTER创建同名列名,放到指定位置,而后把临时表的内容复制到新列中,最后再删除临时表;

    一般而言,如果列中已经有内容,而且你使用的软件无法完成上述操作的话,最好不要对列的位置动手动脚,而是使用SELECT时指定顺序;

2.如果已经创建了主键,然后又意外想改成另一列,该怎样做:

    只移除主键;

ALTER TABLE table DROP PRIMARY KEY;

 

    对于AUTO_INCREMENT的处理可以这样:

ALTER TABLE table 

CHANGE your_id your_id INT NOT NULL AUTO_INCREMENT;

——>

ALTER TABLE table 

CHANGE your_id your_id INT NOT NULL;

    然后重新添加即可;

 

之所以这样做是因为:每个表中只有一列可以加上AUTO_INCREMENT,该列必须为整数类型而且不能包含NULL;

 

小结:

1.想要同时改变列的名称和类型时请用CHANGE;

2.只想改变数据类型时请用MODIFY;

3.DROP COLUMN的功能是从表中卸除指名的列;

4.使用RENAME改变表的名称;

5.使用FIRST、LAST、BEFORE column、AFTER column、THIRD、FOUTH等关键字,可以调整列的顺序;

6.有些RDBMS只有在添加新列的时才允许改变列的顺序;

 

数据原子性支持:

    burdening列,拆分成burdening_main、burdening_sub;

    使用SELECT、UPDATE时搭配ALTER TABLE。可以把使用不便,没有原子性的列调整为具有精确原子性的列;

 

具体的做法:

1.寻找模式:

    我们看到 饮料配料 列的文本都是以逗号隔开的主副料,所以burdening列存储的数据都具有相同的模式;

    这一模式有助于我们将其分割为更具原子性的数据;

        把逗号前的数据放在新列burdening_main;逗号后的数据放在burdening_sub;

 

2.抓取逗号左右部分的函数;

一些字符串函数:

1)SELECT最后/前的若干个字符:

RIGHT()和LEFT():

    可以从一个方向选出指定数量的字符;

mysql> SELECT RIGHT(burdening,5) FROM drinks_sum;

+--------------------+

| RIGHT(burdening,5) |

+--------------------+

| Water              |

| Water              |

| Water              |

| Water              |

+--------------------+

4 rows in set (0.00 sec)

2)SELECT逗号前的所有内容:

SUBSTRING_INDEX()可以撷取列值的部分,也称为子字符串(Substring);

    这个函数会找到指定字符或指定字符串前的所有内容;逗号需要用引号括起来;

mysql> SELECT SUBSTRING_INDEX(burdening,',',1) FROM drinks_sum;

+----------------------------------+

| SUBSTRING_INDEX(burdening,',',1) |

+----------------------------------+

| Apple                            |

| Orange                           |

| Banana                           |

| Strawberry                       |

+----------------------------------+

4 rows in set (0.00 sec)

SUBSTRING_INDEX()函数会寻找引号中的参数字符或字符串,取出其前边的所有内容;

最后的参数1,表示的是寻找第几个逗号,如果是2,那取出的将是第二个都好前的所有内容;

 

3)SELECT指定位置后的所有内容:

SUBSTRING:截取子串;

mysql> help SUBSTRING;

Name: 'SUBSTRING'

Description:

Syntax:

SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len),

SUBSTRING(str FROM pos FOR len)

Examples:

mysql> SELECT SUBSTRING('Quadratically',5);

        -> 'ratically'

mysql> SELECT SUBSTRING('foobarbar' FROM 4);

        -> 'barbar'

mysql> SELECT SUBSTRING('Quadratically',5,6);

        -> 'ratica'

mysql> SELECT SUBSTRING('Sakila', -3);

        -> 'ila'

mysql> SELECT SUBSTRING('Sakila', -5, 3);

        -> 'aki'

mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);

        -> 'ki'

 

4)其他字符串辅助函数:

UPPER()、LOWER()、REVERSE():反转字符串里的字符排序、LTRIM()/RTRIM():清除左/右的多余空格;

LENGTH():返回字符串中的字符数量;

LOCATE(search, string):获取search在string中的位置;

mysql> SELECT SUBSTRING(burdening,1,LENGTH(burdening)) FROM drinks_sum;

+------------------------------------------+

| SUBSTRING(burdening,1,LENGTH(burdening)) |

+------------------------------------------+

| Apple,Water                              |

| Orange,Water                             |

| Banana,Water                             |

| Strawberry,Water                         |

+------------------------------------------+

4 rows in set (0.00 sec)
mysql> SELECT SUBSTRING(burdening,1, locate(',',burdening) - 1) FROM drinks_sum;

+---------------------------------------------------+

| SUBSTRING(burdening,1, locate(',',burdening) - 1) |

+---------------------------------------------------+

| Apple                                             |

| Orange                                            |

| Banana                                            |

| Strawberry                                        |

+---------------------------------------------------+

4 rows in set (0.01 sec)

 

值得注意的是:

    字符串的起始字符下标是1;

    字符串函数也不会改变存储在表中的内容,只是把字符串修改后的模样作为查询结果返回;

 

3.以现有列的内容填入新列:

1)我们新加两个列:burdening_main、burdening_sub;

mysql> ALTER TABLE drinks_sum

    -> ADD COLUMN burdening_main VARCHAR(20) AFTER burdening,

    -> ADD COLUMN burdening_sub VARCHAR(20) AFTER burdening_main;

2)使用UPDATE SET新列的值:

mysql> UPDATE drinks_sum

    -> SET burdening_main = SUBSTRING(burdening,1, LOCATE(',',burdening) - 1),burdening_sub = SUBSTRING(burdening,LOCATE(',',burdening) + 1, LENGTH(burdening) - LOCATE(',',burdening));

 

分析:

    我们使用UPDATE一次SET了两个列的值,由于没有WHERE子句,表中的每一行都会被设定为新值;

    当第一次遍历完成表时,这条语句抓出第一条记录的burdening列并套用函数;

    然后这条语句再运行一次,这次抓到第二行的burdening列,继续套用函数,依次类推直到结束没有任何记录符合条件为止;

 

为了确定我们插入的值,我们可以先用SELECT查询:

SELECT SUBSTRING(burdening,1, LOCATE(',',burdening) - 1) FROM drinks_sum;

SELECT SUBSTRING(burdening,LOCATE(',',burdening) + 1, LENGTH(burdening) - LOCATE(',',burdening)) FROM drinks_sum;

总结:

ALTER TABLE:以保留表中现有数据为前提,修改表的名称及整体结构;

ALTER搭配ADD:以你指定的顺序把列添加到表中;

ALTER搭配DROP:从表中卸除列;

ALTER搭配CHANGE:同时修改现有列的名称和类型;

ALTER搭配MODIFY:只修改现有列的类型;

String Functions:这些函数可修改字符串列的内容副本并以查询结果的形式返回,原始数据不会改变;

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入浅出SQL(7)-ALTER 的相关文章

  • 在tomcat中显示Spring-security的SQL错误

    我使用 spring security 框架创建了一个 Web 应用程序 我设置了一个数据库来存储用户及其角色 但 tomcat 给出以下错误 17 sep 2010 11 56 14 org springframework beans f
  • 从 ISO 周中提取日期 (201905) BigQuery

    我需要从 ISO 周数中提取星期日的日期 即 201905 它需要位于 standardSQL 中 因为它将使用不支持旧版本的脚本进行调度 我尝试从 Google Sheets 调整工作公式 但无法弄清楚 Google Sheets 的原始
  • 从Oracle表中删除重复行

    我正在 Oracle 中测试某些内容并使用一些示例数据填充表 但在此过程中我不小心加载了重复记录 因此现在我无法使用某些列创建主键 如何删除所有重复行并只保留其中一行 Use the rowid伪列 DELETE FROM your tab
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • 数据库不存在。确保名称输入正确

    为什么我会出现这个错误 如果您查看屏幕截图 您将看到数据库 仅当我连接到两个数据库引擎时才会发生这种情况 它仅检测下面数据库引擎中的数据库 而不检测突出显示的数据库 除了关闭应用程序并仅打开一个数据库引擎之外 还有其他方法可以使用我的数据库
  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • MS Access:在列中搜索星号/星号

    我正在寻找一种方法来搜索包含字符串数据类型的列 问题是星号或星号是保留符号 以下查询无法正常工作 select from users where instr pattern 如何编写 Access 查询来搜索列中的星号 您可以使用方括号在
  • 为什么 Clojure MySQL 查询结果中出现“M”

    我有一个返回一行的 Clojure 查询 下面是返回行 映射 的部分打印输出 employer percent 0 00M premium 621 44M 这两列在mysql表中分别是decimal 5 2 和decimal 7 2 为什么
  • 在单个查询中设置和选择?

    我想知道是否可以在单个查询中设置和选择 像这样的事情 SET LOCAL search path TO 1 SET LOCAL ROLE user SELECT from posts 你可以这样做 with some set as sele
  • 如何将存储过程中的值返回到 EF

    我试图通过 EF 调用存储过程并从存储过程中检索返回值 我用过this https stackoverflow com questions 6861737 executesqlcommand with output parameter an
  • 查询交叉表视图

    我在 PostgreSQL 中有一个表 如下所示 Item1 Item2 Item3 Item4 Value1 Value2 Value3 Value4 我想要一个查询 该查询将显示如下表 ItemHead ValueHead Item1
  • 如何更新 SQL Server 中 ntext 列中的 XML 字符串?

    有一个包含 2 列的 SQL 表 ID int 和值 ntext 值行中包含各种 xml 字符串 ID Value 1
  • 将数据从 MS SQL 导入 MySQL

    我想从 MS SQL Server 导入数据 通过某种正则表达式运行它以过滤掉内容 然后将其导入 MySQL 然后 对于每个查询 我希望显示来自第三个数据库的相关图像 明智地导入和链接 最简单的方法是什么 谢谢 澄清 它是一个 PHP 应用
  • count 和 groupby 在一个查询中一起使用

    以下查询正在获取页面上的一些产品信息 这很好 但我也想以文本形式显示它出现的产品编号 但是 我使用了groupby但我也想用count on pro id SELECT FROM cart WHERE session id SESSION
  • 确定一个范围是否完全被一组范​​围覆盖

    如何检查范围是否为完全覆盖由一组范围 在以下示例中 WITH ranges id a b AS SELECT 1 0 40 UNION SELECT 2 40 60 UNION SELECT 3 80 100 UNION SELECT 4
  • MySQL 过去 12 个月的月度销售情况,包括没有销售的月份

    SELECT DATE FORMAT date b AS month SUM total price as total FROM cart WHERE date lt NOW and date gt Date add Now interva
  • 如何使用 WHERE x IN 子句编写PreparedStatement 的SQL?

    我有一个如下所示的查询 SELECT last name first name middle initial FROM names WHERE last name IN smith jones brown 我需要能够对 IN 子句中的列表进
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • Java/Hibernate - 异常:内部连接池已达到其最大大小,当前没有可用的连接

    我第一次在大学项目中使用 Hibernate 而且我还是个新手 我想我遵循了我的教授和我阅读的一些教程给出的所有指示 但我不断收到标题中的异常 Exception in thread main org hibernate Hibernate
  • 优化mysql中日期类型字段的查询

    我目前准备了以下查询 select sum amount as total from incomes where YEAR date 2019 and MONTH date 07 and incomes deleted at is null

随机推荐

  • 带通滤波器介数如何确定

    你在MATLAB界面左下角的Start里面选择filter design然后填入你的参数 MATLAB会自动帮你算出你设计的滤波器的阶数
  • 福禄克测试中的电阻参数:LOOP、PAIR UBL、P2P UBL代表什么?

    福禄克测试中的电阻参数 LOOP PAIR UBL P2P UBL分别代表什么 LOOP 直流环路电阻 PAIR UBL 线对电阻差 P2P UBL 线对电阻差的差 IEEE 标准 802 3 2012 规定导线之间的直流电阻 LOOP 不
  • template_event

    if f ES TEMPLATE DIR then echo generate event template curl XPUT http localhost 9200 template template event d cat ES TE
  • 单链表翻转--Java实现

    问题描述 将单链表的顺序翻转过来 代码实现 定义链表节点 static class ListNode int val ListNode next public ListNode int val ListNode next this val
  • 网络安全(黑客)自学路线笔记

    一 什么是黑客 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手 现阶段黑客所需要掌握的远远不止这些 二 为什么要学习黑客技术 其实 网络信息空间安全已经成为海陆空之外的第四大战场 除了国与国之间的博弈 国内企业与企业间也有显著的明争暗斗现象
  • 分库分表后的查询解决方案

    在分库分表之后 每个表的数据是分散存储在不同的数据库中的 因此 在查询数据时需要考虑如何查询跨多个数据库和表的数据 常见的解决方案有以下几种 1 应用层分页 将查询条件分发到各个数据库 然后在应用层合并结果集并进行分页 这种方案可以实现比较
  • Redux 是什么?怎么用?

    第1 章 Redux 介绍 本章涵盖 定义Redux 了解Flux 与Redux 之间的差异 使用Redux 和React 介绍action reducer 和store 学习何时使用Redux 在2018 年 如果你进入任何一个React
  • psql命令

    psql备份数据库 su postgres pg dump d map gt map sql 导出sql psql d map f map sql 导入sql psql导出数据到文件 COPY SELECT gid name FROM l
  • java强引用、软引用、弱引用、虚引用

    前言概述 在JDK1 2以前的版本中 当一个对象不被任何变量引用 那么程序就无法再使用这个对象 这就像在日常生活中 从商店购买了某样物品后 如果有用 就一直保留它 否则就把它扔到垃圾箱 由清洁工人收走 一般说来 如果物品已经被扔到垃圾箱 想
  • 【群智能算法】一种改进的蜣螂优化算法IDBO[2]【Matlab代码#18】

    文章目录 获取资源 请见文章第5节 资源获取 1 原始DBO算法 2 改进后的IDBO算法 2 1 Bernoulli混沌映射种群初始化 2 2 自适应因子 2 3 Levy飞行策略 2 4 动态权重系数 3 部分代码展示 4 效果图展示
  • Spring 事件发布机制

    目录 事件驱动 使用事件机制 Java 事件使用 Spring 事件使用 使用 Aware 不使用 Aware Spring 事件发布流程及源码解析 ApplicationEvent ApplicationListener 监听者注册 Ap
  • node常见面试题库

    node常见面试题库 1 检测系统中node版本号的指令是 node v 2 如何退出node执行环境 REPL环境 ctrl c c 3 node如何创建服务器 写出代码 var http require http var server
  • 合理设置的MTU值,解决“部分网站打不开”“上网速度慢”等问题,并且可以适当提升上网速度

    一般来讲 设计好本机的MTU值 可以解决 部分网站打不开 上网速度慢 的情况 但是如果你的共享主机或路由器的MTU设置有问题 有时问题仍然存或 或者出现网速过慢的情况 合理的设置路由器与本机的MTU值 就可以完全解决上述问题 使上网速度达到
  • AndroidJavaClass 和AndroidJavaClass

    很明显 AndroidJavaClass 就代表一个Java类 例如 com henry util 有一个静态方法 love 可以这样new AndroidJavaClass com henry util callstatic love 就
  • swagger mock文档服务器,通过 Swagger 定义自动生成 Mock 数据

    我最近的在做的项目是一个前后端分离的项目 前后端由不同的团队分别开发 并且前端的进度经常领先后端 这就意味着 当前端在开发一个新功能时 API 可能还没有准备好 不过 我们会先和后端先商议好 API Schema 然后使用 Mock 数据进
  • 使用PowerDNS实现内网DNS解析

    部署环境 公司内部安装powerdns实现局域网服务dns解析 避免通过ip访问 系统 CentOS 7 9 mysql版本 5 7 33 pdns版本 4 4 1 pdns recursor版本 4 4 2 PowerDNS admin版
  • ARTS挑战打卡的100天,我学到了这些

    前言 知道ARTS打卡计划是来源于陈皓的极客时间教程 在大学期间就知道了陈皓 左耳朵耗子 骨灰级程序员 差不多就是看着他的博客成长 后来在极客时间上发现了他的课程 就买下来了 现在学习了75 过程中发现了ARTS打卡计划 一直不敢尝试 一个
  • 第二课:变量和数据类型

    第二课 变量和数据类型 一 了解什么是变量 为什么需要它 1 计算机中的内存分类 1 RAM 运行时存储 我们的计算机程序在运行的时候 数据就会临时存储在RAM中 如果不持久化 或着突然断电 它的数据就丢失了 2 ROM 只读存储 持久化存
  • css伪元素实现方框上面打钩

    html p class skill three con item frame p css skill three con item frame width 36px height 36px background transparent b
  • 深入浅出SQL(7)-ALTER

    该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 ALTER 改写历史 使用ALTER命令 可以修改表 对其套用新的设计方法 且不会影响现有数据 本章还会学到规范化的意义 我们要规范化我们的表 由于重新建了本地数据库