MySQL Cookbook 学习笔记-02

1、分组后查找最大或最小值
2、根据“日期-时间”分组
3、“分组计算” 和 “全局计算” 同时存在查询中
4、删除一行数据,sequence 列会重新生成吗?
5、sequence 列指定值插入,不是我认为的不能指定值哦!
6、删除最大 sequence 行,对以后插入新行 sequence 值的影响
7、获取序列的值
8、设定序列的初始值
9、创建多重序列
10、使用序列产生计数器

______________________________________________________________

1、分组后查找最大或最小值

(Recipe 8.14. Finding Smallest or Largest Summary Values)

表和数据:

mysql> select * from driver_log;
+--------+-------+------------+-------+
| rec_id | name  | trav_date  | miles |
+--------+-------+------------+-------+
|      1 | Ben   | 2006-08-30 |   152 |
|      2 | Suzi  | 2006-08-29 |   391 |
|      3 | Henry | 2006-08-29 |   300 |
|      4 | Henry | 2006-08-27 |    96 |
|      5 | Ben   | 2006-08-29 |   131 |
|      6 | Henry | 2006-08-26 |   115 |
|      7 | Suzi  | 2006-09-02 |   502 |
|      8 | Henry | 2006-09-01 |   197 |
|      9 | Ben   | 2006-09-02 |    79 |
|     10 | Henry | 2006-08-30 |   203 |
+--------+-------+------------+-------+

MIN(),MAX() 的比较范围是指定的范围(如:全表,各组内,where指定范围),但却不能比较各组值的大小!

全表:

mysql> select min(miles), max(miles) from driver_log;
+------------+------------+
| min(miles) | max(miles) |
+------------+------------+
|         79 |        502 |
+------------+------------+

各组内:

mysql> select name, min(miles) ,max(miles) from driver_log-> group by name;
+-------+------------+------------+
| name  | min(miles) | max(miles) |
+-------+------------+------------+
| Ben   |         79 |        152 |
| Henry |         96 |        300 |
| Suzi  |        391 |        502 |
+-------+------------+------------+

where指定范围:

mysql> select min(miles), max(miles) from driver_log-> where trav_date < '2006-09-01';
+------------+------------+
| min(miles) | max(miles) |
+------------+------------+
|         96 |        391 |
+------------+------------+

替代办法:对分组后的值排序,取出第一个,即为最大或最小(有缺陷哦~~~如果最大或最小存在多个就不对了)

mysql> select name , sum(miles) as  total_miles-> from driver_log-> group by name-> order by total_miles desc;
+-------+-------------+
| name  | total_miles |
+-------+-------------+
| Henry |         911 |
| Suzi  |         893 |
| Ben   |         362 |
+-------+-------------+
取各组最大值:
mysql> select name , sum(miles) as  total_miles-> from driver_log-> group by name-> order by total_miles desc limit 1;
+-------+-------------+
| name  | total_miles |
+-------+-------------+
| Henry |         911 |
+-------+-------------+
当最大、最小值存在重复时的处理办法:

查询数据如下

mysql> select left(name,1) as letter, count(*) as count-> from states-> group by letter-> order by count desc;
+--------+-------+
| letter | count |
+--------+-------+
| M      |     8 |
| N      |     8 |
| I      |     4 |
| A      |     4 |
| W      |     4 |
| O      |     3 |
| C      |     3 |
| K      |     2 |
| S      |     2 |
| T      |     2 |
| V      |     2 |
| L      |     1 |
| P      |     1 |
| R      |     1 |
| U      |     1 |
| D      |     1 |
| F      |     1 |
| G      |     1 |
| H      |     1 |
+--------+-------+
取出各组最大的记录

方式1:

mysql> set @max = (select count(*) from states-> group by left(name,1) order by count(*) desc limit 1);mysql> select left(name,1) as letter, count(*) as count from states-> group by letter having count = @max;
+--------+-------+
| letter | count |
+--------+-------+
| M      |     8 |
| N      |     8 |
+--------+-------+
方式2:

mysql> select left(name,1) as letter ,count(*) as count from states-> group by letter having count =-> ( select count(*) from states-> group by left(name,1) order by count(*) desc limit 1);
+--------+-------+
| letter | count |
+--------+-------+
| M      |     8 |
| N      |     8 |
+--------+-------+

2、根据“日期-时间”分组

(Recipe 8.15. Date-Based Summaries)

示例--根据 { year-month }分组

mysql> select concat(year(trav_date), '_' , month(trav_date)) as month_group,-> count(*) as month_drivers,-> sum(miles) as month_miles-> from driver_log group by year(trav_date), month(trav_date);
+-------------+---------------+-------------+
| month_group | month_drivers | month_miles |
+-------------+---------------+-------------+
| 2006_8      |             7 |        1388 |
| 2006_9      |             3 |         778 |
+-------------+---------------+-------------+
示例--根据 { year-week }分组

mysql> select yearweek(trav_date) as week_group,-> count(*) as month_drivers,-> sum(miles) as month_miles-> from driver_log group by week_group;
+------------+---------------+-------------+
| week_group | month_drivers | month_miles |
+------------+---------------+-------------+
|     200634 |             1 |         115 |
|     200635 |             9 |        2051 |
+------------+---------------+-------------+

3、“分组计算” 和 “全局计算” 同时存在查询中

(Recipe 8.16. Working with Per-Group and Overall Summary Values Simultaneously)

示例--将两个查询分开

mysql> select @total := sum(miles) as total_miles from driver_log;
+-------------+
| total_miles |
+-------------+
|        2166 |
+-------------+mysql> select name,-> sum(miles) as 'miles/driver',-> (sum(miles)*100)/@total as 'percent of total miles'-> from driver_log group by name;
+-------+--------------+------------------------+
| name  | miles/driver | percent of total miles |
+-------+--------------+------------------------+
| Ben   |          362 |                16.7128 |
| Henry |          911 |                42.0591 |
| Suzi  |          893 |                41.2281 |
+-------+--------------+------------------------+
示例--合并

mysql> select name,-> sum(miles) as 'miles/driver',-> (sum(miles)*100)/(select sum(miles) from driver_log) as 'total miles'-> from driver_log group by name;
+-------+--------------+-------------+
| name  | miles/driver | total miles |
+-------+--------------+-------------+
| Ben   |          362 |     16.7128 |
| Henry |          911 |     42.0591 |
| Suzi  |          893 |     41.2281 |
+-------+--------------+-------------+
示例--带条件判断的(having xxx)

( 前两个查询用来演示 )

mysql> select avg(miles) from driver_log;
+------------+
| avg(miles) |
+------------+
|   216.6000 |
+------------+mysql> select name, avg(miles) as driver_avg from driver_log-> group by name;
+-------+------------+
| name  | driver_avg |
+-------+------------+
| Ben   |   120.6667 |
| Henry |   182.2000 |
| Suzi  |   446.5000 |
+-------+------------+mysql> select name, avg(miles) as driver_avg from driver_log-> group by name-> having driver_avg < (select avg(miles) from driver_log);
+-------+------------+
| name  | driver_avg |
+-------+------------+
| Ben   |   120.6667 |
| Henry |   182.2000 |
+-------+------------+

4、删除一行数据,sequence 列会重新生成吗?

答案:不会!

演示如下:

+----+-------------------+------------+------------+
| id | name              | date       | origin     |
+----+-------------------+------------+------------+
|  1 | housefly          | 2006-09-10 | kitchen    |
|  2 | millipede         | 2006-09-10 | driveway   |
|  3 | grasshopper       | 2006-09-10 | front yard |
|  4 | stink bug         | 2006-09-10 | front yard |
|  5 | cabbage butterfly | 2006-09-10 | garden     |
|  6 | ant               | 2006-09-10 | back yard  |
|  7 | ant               | 2006-09-10 | back yard  |
|  8 | millbug           | 2006-09-10 | under rock |
+----+-------------------+------------+------------+
删除 id 为2的行:

mysql> delete from insect where id=2;
结果:

mysql> select * from insect;
+----+-------------------+------------+------------+
| id | name              | date       | origin     |
+----+-------------------+------------+------------+
|  1 | housefly          | 2006-09-10 | kitchen    |
|  3 | grasshopper       | 2006-09-10 | front yard |
|  4 | stink bug         | 2006-09-10 | front yard |
|  5 | cabbage butterfly | 2006-09-10 | garden     |
|  6 | ant               | 2006-09-10 | back yard  |
|  7 | ant               | 2006-09-10 | back yard  |
|  8 | millbug           | 2006-09-10 | under rock |
+----+-------------------+------------+------------+

5、sequence 列指定值插入,不是我认为的不能指定值哦!

a、id 重复,报错

b、id 不重复,可以插入!

报错演示:

mysql> insert into insect (id, name, date, origin) values (1,'test','2011-08-25','test');
ERROR 1062 (23000): Duplicate entry '1' for key 1
id 不重复演示——插入比当前sequence 值最大还大的值

mysql> insert into insect (id, name, date, origin) values (20,'test','2011-08-25','test');
Query OK, 1 row affected (0.03 sec)mysql> select * from insect;
+----+-------------------+------------+------------+
| id | name              | date       | origin     |
+----+-------------------+------------+------------+
|  1 | housefly          | 2006-09-10 | kitchen    |
|  3 | grasshopper       | 2006-09-10 | front yard |
|  4 | stink bug         | 2006-09-10 | front yard |
|  5 | cabbage butterfly | 2006-09-10 | garden     |
|  6 | ant               | 2006-09-10 | back yard  |
|  7 | ant               | 2006-09-10 | back yard  |
|  8 | millbug           | 2006-09-10 | under rock |
| 20 | test              | 2011-08-25 | test       |
+----+-------------------+------------+------------+
id 不重复演示——补上被删除的行(id 为2)

mysql> insert into insect (id, name, date, origin) values (2,'test','2011-08-25','test');
Query OK, 1 row affected (0.01 sec)mysql> select * from insect;
+----+-------------------+------------+------------+
| id | name              | date       | origin     |
+----+-------------------+------------+------------+
|  1 | housefly          | 2006-09-10 | kitchen    |
|  2 | test              | 2011-08-25 | test       |
|  3 | grasshopper       | 2006-09-10 | front yard |
|  4 | stink bug         | 2006-09-10 | front yard |
|  5 | cabbage butterfly | 2006-09-10 | garden     |
|  6 | ant               | 2006-09-10 | back yard  |
|  7 | ant               | 2006-09-10 | back yard  |
|  8 | millbug           | 2006-09-10 | under rock |
| 20 | test              | 2011-08-25 | test       |
+----+-------------------+------------+------------+

6、删除最大 sequence 行,对以后插入新行 sequence 值的影响

(Recipe 11.3. The Effect of Row Deletions on Sequence Generation)

a、DBD engine,下一个序列值是当前最大序列值加1(例如删掉 id 为20,下次插入即为9)

b、MyISAM or InnoDB  engine,永远不重复(例如删掉 id 为20,下次插入即为21)

查看表的 engine——示例

mysql> select engine from information_schema.tables-> where table_schema = 'cookbook' and table_name = 'insect';
+--------+
| engine |
+--------+
| InnoDB |
+--------+

7、获取序列的值

(Recipe 11.4. Retrieving Sequence Values)

Server-side—— select last_insert_id()示例

mysql> insert into insect(name,date,origin)-> values('testLastInsert', '2011-08-25', 'testLastInsert');
Query OK, 1 row affected (0.03 sec)mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|               21 |
+------------------+
1 row in set (0.00 sec)mysql> select * from insect where id=last_insert_id();
+----+----------------+------------+----------------+
| id | name           | date       | origin         |
+----+----------------+------------+----------------+
| 21 | testLastInsert | 2011-08-25 | testLastInsert |
+----+----------------+------------+----------------+
LAST_INSERT_ID() 能保证在多用户多线程操作下获取的序列值是正确的(即,当前connection 最后插入行的序列值),因为它和底层的connection 关联。

Client-side:

//Statement
Statement s = conn.createStatement ();
s.executeUpdate ("INSERT INTO insect (name,date,origin) VALUES('moth','2006-09-14','windowsill')");
long seq = ((com.mysql.jdbc.Statement) s).getLastInsertID ();
s.close ();//PreparedStatement
PreparedStatement s = conn.prepareStatement ("INSERT INTO insect (name,date,origin) VALUES('moth','2006-09-14','windowsill')");
s.executeUpdate ();
long seq = ((com.mysql.jdbc.PreparedStatement) s).getLastInsertID ();
s.close ();
推荐策略:如果后面需要序列值,则应在插入数据后即获取序列值保存着,以备后用!

8、设定序列的初始值

For MyISAM or InnoDB tables

mysql> CREATE TABLE t-> (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id))-> AUTO_INCREMENT = 100;
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> SELECT id FROM t ORDER BY id;
+-----+
| id  |
+-----+
| 100 |
| 101 |
| 102 |
+-----+

mysql> CREATE TABLE t-> (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id));
mysql> ALTER TABLE t AUTO_INCREMENT = 100;
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> SELECT id FROM t ORDER BY id;
+-----+
| id  |
+-----+
| 100 |
| 101 |
| 102 |
+-----+
To start a sequence at n for storage engines other than MyISAM or InnoDB, you can use a trick: insert a "fake" row with sequence value n -1, and then delete it after inserting one or more "real" rows. The following example illustrates how to start a sequence at 100 for a BDB table:

mysql> CREATE TABLE t-> (id INT UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id))-> ENGINE = BDB;
mysql> INSERT INTO t (id) VALUES(99);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> INSERT INTO t (id) VALUES(NULL);
mysql> DELETE FROM t WHERE id = 99;
mysql> SELECT * FROM t ORDER BY id;
+-----+
| id  |
+-----+
| 100 |
| 101 |
| 102 |
+-----+

9、创建多重序列

(Recipe 11.11. Using an AUTO_INCREMENT Column to Create Multiple Sequences)

注意:只适合 engine 为 MyISAM 和 BDB

创建时注意指定表的 engine,因为我的默认为 InnoDB

DROP TABLE IF EXISTS bug;CREATE TABLE bug
(id      INT UNSIGNED NOT NULL AUTO_INCREMENT,name    VARCHAR(30) NOT NULL, # type of bugdate    DATE NOT NULL,        # date collectedorigin  VARCHAR(30) NOT NULL, # where collectedPRIMARY KEY (name, id)
)engine=myisam;INSERT INTO bug (name,date,origin) VALUES
('ant','2006-10-07','kitchen'),
('millipede','2006-10-07','basement'),
('beetle','2006-10-07','basement'),
('ant','2006-10-07','front yard'),
('ant','2006-10-07','front yard'),
('honeybee','2006-10-08','back yard'),
('cricket','2006-10-08','garage'),
('beetle','2006-10-08','front yard'),
('termite','2006-10-09','kitchen woodwork'),
('cricket','2006-10-10','basement'),
('termite','2006-10-11','bathroom woodwork'),
('honeybee','2006-10-11','garden'),
('cricket','2006-10-11','garden'),
('ant','2006-10-11','garden')
;
限制:

a、AUTO_INCREMENT 列必须是定义索引的最后一个(如:PRIMARY  KEY  (name, id)),主键是强制索引

b、PRIMARY KEY 不允许包含 NULL 列,如果非 ATUO_INCREMENT 列允许NULL,则应该用 UNIQUE 索引

mysql> SELECT * FROM bug ORDER BY name, id;
+----+-----------+------------+-------------------+
| id | name      | date       | origin            |
+----+-----------+------------+-------------------+
|  1 | ant       | 2006-10-07 | kitchen           |
|  2 | ant       | 2006-10-07 | front yard        |
|  3 | ant       | 2006-10-07 | front yard        |
|  4 | ant       | 2006-10-11 | garden            |
|  1 | beetle    | 2006-10-07 | basement          |
|  2 | beetle    | 2006-10-08 | front yard        |
|  1 | cricket   | 2006-10-08 | garage            |
|  2 | cricket   | 2006-10-10 | basement          |
|  3 | cricket   | 2006-10-11 | garden            |
|  1 | honeybee  | 2006-10-08 | back yard         |
|  2 | honeybee  | 2006-10-11 | garden            |
|  1 | millipede | 2006-10-07 | basement          |
|  1 | termite   | 2006-10-09 | kitchen woodwork  |
|  2 | termite   | 2006-10-11 | bathroom woodwork |
+----+-----------+------------+-------------------+
其他示例:

CREATE TABLE housewares
(category    VARCHAR(3) NOT NULL,serial      INT UNSIGNED NOT NULL AUTO_INCREMENT,country     VARCHAR(2) NOT NULL,description VARCHAR(255),PRIMARY KEY (category, country, serial)
);

mysql> ALTER TABLE housewares-> ADD category VARCHAR(3) NOT NULL FIRST,-> ADD serial INT UNSIGNED NOT NULL AUTO_INCREMENT AFTER category,-> ADD country VARCHAR(2) NOT NULL AFTER serial,-> ADD PRIMARY KEY (category, country, serial);
mysql> UPDATE housewares SET category = LEFT(id,3);
mysql> UPDATE housewares SET serial = MID(id,4,5);
mysql> UPDATE housewares SET country = RIGHT(id,2);
mysql> ALTER TABLE housewares DROP id;
mysql> SELECT * FROM housewares;
+----------+--------+---------+------------------+
| category | serial | country | description      |
+----------+--------+---------+------------------+
| DIN      |  40672 | US      | dining table     |
| KIT      |    372 | UK      | garbage disposal |
| KIT      |   1729 | JP      | microwave oven   |
| BED      |     38 | SG      | bedside lamp     |
| BTH      |    485 | US      | shower stall     |
| BTH      |    415 | JP      | lavatory         |
+----------+--------+---------+------------------+
指定排序

mysql> SELECT category, serial, country,-> CONCAT(category,LPAD(serial,5,'0'),country) AS id-> FROM housewares ORDER BY category, country, serial;
+----------+--------+---------+------------+
| category | serial | country | id         |
+----------+--------+---------+------------+
| BED      |     38 | SG      | BED00038SG |
| BTH      |    415 | JP      | BTH00415JP |
| BTH      |    485 | US      | BTH00485US |
| DIN      |  40672 | US      | DIN40672US |
| KIT      |   1729 | JP      | KIT01729JP |
| KIT      |    372 | UK      | KIT00372UK |
+----------+--------+---------+------------+
或修改 serial 的宽度为5,然后再直接连接排序

mysql> ALTER TABLE housewares-> MODIFY serial INT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT;
mysql> SELECT category, serial, country,-> CONCAT(category,serial,country) AS id-> FROM housewares ORDER BY category, country, serial;
+----------+--------+---------+------------+
| category | serial | country | id         |
+----------+--------+---------+------------+
| BED      |  00038 | SG      | BED00038SG |
| BTH      |  00415 | JP      | BTH00415JP |
| BTH      |  00485 | US      | BTH00485US |
| DIN      |  40672 | US      | DIN40672US |
| KIT      |  01729 | JP      | KIT01729JP |
| KIT      |  00372 | UK      | KIT00372UK |
+----------+--------+---------+------------+
或些一个存储过程,调用存储过程

CREATE FUNCTION houseware_id(category VARCHAR(3),serial INT UNSIGNED,country VARCHAR(2))
RETURNS VARCHAR(10) DETERMINISTIC
RETURN CONCAT(category,LPAD(serial,5,'0'),country);
mysql> SELECT category, serial, country,-> houseware_id(category,serial,country) AS id-> FROM housewares;
+----------+--------+---------+------------+
| category | serial | country | id         |
+----------+--------+---------+------------+
| BED      | 38     | SG      | BED00038SG |
| BTH      | 415    | JP      | BTH00415JP |
| BTH      | 485    | US      | BTH00485US |
| DIN      | 40672  | US      | DIN40672US |
| KIT      | 1729   | JP      | KIT01729JP |
| KIT      | 372    | UK      | KIT00372UK |
+----------+--------+---------+------------+

10、使用序列产生计数器

(Recipe 11.14. Using Sequence Generators as Counters)

CREATE TABLE booksales
(title   VARCHAR(60) NOT NULL,   # book titlecopies  INT UNSIGNED NOT NULL,  # number of copies soldPRIMARY KEY (title)
);
a、一般的做法:初始化设置为0,以后更新时加 1。

INSERT INTO booksales (title,copies) VALUES('The Greater Trumps',0);
UPDATE booksales SET copies = copies+1 WHERE title = 'The Greater Trumps';
b、或使用 INSERT ... ON DUPLICATE KEY UPDATE 语句:

INSERT INTO booksales (title,copies)VALUES('The Greater Trumps',1)ON DUPLICATE KEY UPDATE copies = copies+1;
获取更新的值:

SELECT copies FROM booksales WHERE title = 'The Greater Trumps';
缺陷:

在多用户多线程的情况下,用户A 完成更新在取值查询开始前,用户B执行了更新,这样用户A 查询的数据就错误了!
修改:使用LAST_INSERT_ID(expr) 函数,保证数据一致性

INSERT INTO booksales (title,copies)VALUES('The Greater Trumps',LAST_INSERT_ID(1))ON DUPLICATE KEY UPDATE copies = LAST_INSERT_ID(copies+1);
这样每次都执行该语句,第一次是插入操作,以后是更新操作。

获取插入/更新后的值:

Server-side:

SELECT LAST_INSERT_ID();
Client-side:

Statement s = conn.createStatement ();
s.executeUpdate ("INSERT INTO booksales (title,copies)"+ " VALUES('The Greater Trumps',LAST_INSERT_ID(1))"+ " ON DUPLICATE KEY UPDATE copies = LAST_INSERT_ID(copies+1)");
long count = ((com.mysql.jdbc.Statement) s).getLastInsertID ();
s.close ();





















































本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS-HTTPS(TSL)强制开启的方法和解决过时的安全问题

IIS-HTTPS(TSL)强制开启的方法和解决过时的安全问题 系统为:Windows server 2008R2 工具为:IIS6 数据库为: Windows Sql server 2014 证书为:腾讯云颁发的AC证书 首先你需要这几个工具 IISCrypto | 检测和为你配置最安全的 策略环境 手写reg注册表 | 来关闭本地的事件 Windo…

AI在医疗行业的最新进展

来源&#xff1a; Future智能 概要&#xff1a;随着人工智能、大数据等相关应用与理念的不断传播&#xff0c;越来越多曾经深入人心的观念被彻底撼动&#xff0c;当然&#xff0c;医疗行业也不例外。 随着人工智能、大数据等相关应用与理念的不断传播&#xff0c;越来越多曾经深…

用jar 命令打包war包

假定有一个Web应用&#xff1a;C:\myHomemyHome/WEB-INF/……myHome/files/……myHome/image/……myHome/src/……myHome/index.jsp在命令行窗口下执行如下命令&#xff1a;C:\>cd myHomeC:\myHome\>jar cvf myhome.war */ .解释&#xff1a;jar cvf [A》 war包…

SHA384-算法解密(2)还原元数据

SHA384-算法解密(2)还原元数据 上一次的讲解比较潦草&#xff0c;这次写的更全面详细一些。 首先各位&#xff0c;如果想要解开使用这个算法加密后的数据&#xff0c;必须先学会加密&#xff0c;才能解密。 声明&#xff1a;这里仅供学习研究&#xff0c;不要学了三脚猫功夫就…

美国《时代》周刊公布年度25大最佳发明名单

来源&#xff1a; 中国智慧城市导刊 概要&#xff1a;除了大名鼎鼎的iPhone X和特斯拉model 3&#xff0c;还有好多你可能还未听过的新奇玩意。 当地时间16日&#xff0c;美国《时代》周刊发布了2017年25大最佳发明名单。除了大名鼎鼎的iPhone X和特斯拉model 3&#xff0c;还有…

顶级隐写术,破坏一切解释器

什么是隐写术&#xff1f; 就编程来说&#xff0c;隐写的信息通过加密或混淆&#xff0c;其内容例如一张购物清单&#xff0c;一篇文章&#xff0c;一篇图画或者其他“伪装”&#xff08;cover&#xff09;的消息。 隐写的信息通常用一些传统的方法进行加密&#xff0c;然后用…

MySQL 字符集相关问题

MySQL安装时指定的字符集为UTF8&#xff0c;但是当我向如下表插入汉字时&#xff0c;总是失败&#xff08;错误字符&#xff09;&#xff01; DROP TABLE IF EXISTS t_weather; create table t_weather (c_id int unsigned not null auto_increment,c_province varchar(20…

“头移植模型”论文称换头术可行 业内疑两大问题未解

来源&#xff1a;澎湃新闻 概要&#xff1a;11月21日&#xff0c;“换头术”的倡导者、哈尔滨医科大学教授任晓平在一场见面会上称&#xff0c;团队在科学领域取得重大突破&#xff0c; “完成了人类第一例头移植外科实验模型”。 11月21日&#xff0c;“换头术”的倡导者、哈尔…

图片有损解构术

图片有损解构 解释&#xff1a;将任意图片解构其PS或修图或雪碧图拼接之前&#xff0c;将通道与法线分离并在原图展现出来 在群里经常看到某些人转发一些图片&#xff0c;有意或者无意的&#xff0c;勾起了我的好奇心&#xff0c;他们这么做有什么好处&#xff1f; 左边图片是…

让机器听懂世界,触及人类梦想还有多远?

来源&#xff1a;陈孝良科学网博客 概要&#xff1a;语言对于人类文明的重要性不言而喻&#xff0c;但是语言的起源却是个高度争议的话题&#xff0c;我们对此几乎一无所知。 语言对于人类文明的重要性不言而喻&#xff0c;但是语言的起源却是个高度争议的话题&#xff0c;我们…

[实战]前端wireshark抓包协议解密

前端wireshark抓包协议解密废话不多说&#xff0c;先看看结果该JSON文件是通过解密后的 HTTP 返回response结果再解密打开的新页面 有兴趣的小伙伴了解下之前的文章 Sha384解密[2] 打开Wireshark 将TCP 转码为RTP &#xff0c;因为该目标地址有视频文件&#xff0c;方便转换 登…

Java异常及处理

java.lang.UnsupportedClassVersionError: Bad version number in .class file java.lang.UnsupportedClassVersionError: Bad version number in .class file 造成这种过错是你的支撑Tomcat运行的JDK版本与支撑application运行的JDK版本不一致导致的. 把它们的JDK版本改成一致…

前端React结构工程-改写render

前端React结构工程-改写render 工程准备事项 npm installcnpm初始化工程实例 以上是实例化&#xff0c;安装过npm后的列表 接下来使用 npm run start 来启动项目 当你启动项目后会看到react给我们准备好的 默认界面 React中的 diff原理 和 调度原理是 这次探索的目标 只有搞…

未来智能实验室成立,建设世界第一个智能系统智商评测和趋势研究机构

来源&#xff1a;未来智能实验室 互联网云脑逐渐清晰&#xff0c;AI与互联网结合引发AI威胁论 从科学史可以看到这样一个规律&#xff1a;每一次人类社会的重大技术变革都会导致新领域的科学革命。互联网革命对于人类的影响已经远远超过了大工业革命。与工业革命增强人类的力量…

WebService相关

学习在线文档&#xff1a;http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/02/249556.html 将wsdl2java命令生成的stub类发布到项目正确的位置 打开 cmd&#xff0c;进入%MyEclipse_WS% 命令如下&#xff1a; wsdl2java -uri http://loc…

自己动手制作一门语言(1)波罗语

自己动手制作一门语言(1)波罗语 波罗语&#xff1a;基于波斯(阿拉伯语)的繁衍&#xff0c;主要目的是二向加密语言。防止被保护的数据泄露和解密。使用在计算机与书本中使用语言的发音 主要以 ah 、v 、hv 颤音、哈音、卷舌 创造一门语言很容易&#xff0c;要实现起来确很难&a…

高盛:人工智能报告中文版(45页)

来源&#xff1a;数据局 概要&#xff1a;人工智能是信息时代的尖端科技。计算的飞跃建立在人类告知计算机如何表现的基础上&#xff0c;计算建立在计算机学习如何表现能够对每个行业有意义的基础上。 人工智能是信息时代的尖端科技。计算的飞跃建立在人类告知计算机如何表现的…

Ant 简单示例+环境变量配置说明

以下是一个简单的 webservice 发布ant 配置&#xff1a; <?xml version"1.0" encoding"UTF-8"?><project name"webservice-test" basedir"."><property environment"env"/><property name"dest…

人工智能硅脑竞赛:传统芯片巨头VS AI芯片创企

来源&#xff1a;亿欧 概要&#xff1a;但现在&#xff0c;一些芯片企业家得到了不同程度的欢迎。投资者没有对此嗤之以鼻&#xff0c;而是“慷慨地”拿出其支票簿。 英国半导体创业公司Graphcore的联合创始人兼首席执行官Nigel Toon表示&#xff1a;“几年前&#xff0c;许多…

React+Nginx 二级域名指向配置

使React线上项目二级域名指向端口欢迎使用Markdown编辑器开始前检查你的Nginx 检查是否正常编写nginx.conf在同级目录的conf.d目录里清理一下缓存欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑…