Mysql学习笔记009

作者: 数据库信息  发布:2019-08-22

依照天总结访问量

 

 

先建贰个表、插入一些数量 每一条数据表示客商访问某网址的日子(如:两千-01-01)

mysql> CREATE TABLE t1(
-> year YEAR(4),
-> month INT(2) UNSIGNED ZEROFILL,
-> day INT(2) UNSIGNED ZEROFILL
-> );
Query OK, 0 rows affected (0.53 sec)

mysql> INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2),
-> (2000,2,23),(2000,2,23);
Query OK, 6 rows affected (0.08 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql>

 

 

栗子:查询种种月的会见天数(重复的不算)

操作如下:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

mysql> SELECT year, month,
-> BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1
-> GROUP BY year, month;
------ ------- -----
| year | month | day |
------ ------- -----
| 2000 | 01 | 3 |
| 2000 | 02 | 2 |
------ ------- -----
2 rows in set (0.00 sec)

mysql>

传送门 分享一个解释BIT_COUNT()和BIT_OR()的博客。

再有贰个传送们 , 看的书都以和自己一样的。

 

 

翻开一下表中的多寡:

mysql> SELECT * FROM t1;
------ ------- ------
| year | month | day |
------ ------- ------
| 2000 | 01 | 01 |
| 2000 | 01 | 20 |
| 2000 | 01 | 30 |
| 2000 | 02 | 02 |
| 2000 | 02 | 23 |
| 2000 | 02 | 23 |
------ ------- ------
6 rows in set (0.00 sec)

mysql>

 

 

如果看了进了传送们也认为不是很懂的同班,那就听本人白话吧。

看了这些操作:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

本身深信超过二分一人一定会有七个困惑在内心发生,BIT_OR() 和 BIT_COUNT()是干啥的?为何还会有这种操作?

率先解说一下BIT_COUNT()函数:

BIT_COUNT(N) 重临的是N(二进制)中的1的个数.

自己写个栗子你就掌握了:

SELECT BIT_COUNT(100); 这一个的答案是稍稍?

想一想100的二进制是:1100100

mysql> SELECT bin(100);
----------
| bin(100) |
----------
| 1100100 |
----------
1 row in set (0.00 sec)

mysql>

那答案应该是3喽?

mysql> SELECT BIT_COUNT(100);
----------------
| BIT_COUNT(100) |
----------------
| 3 |
----------------
1 row in set (0.00 sec)

mysql>

少侠您真是好眼力,答案正是3。

那下知道BIT_COUNT()函数是干啥的了啊。

 

 

接下来大家来接着研讨第二个难题BIT_O瑞虎()是干啥的?

别看他们五个长得很像,但她俩不等属性的函数。

BIT_O奔驰G级(expr)是将expr这一个列的具有字段都OOdyssey一次 计算推行的准确度陆拾壹个人,这里好多博客都并未有列举过怎么用的example 恐怕是他俩以为她简短了,也或然是他们也不会用(他们自然不会用,嘿嘿嘿)

那以前的贰个shop表作为操作:

SELECT * FROM shop;

mysql> SELECT * FROM shop;
--------- -------- -------
| article | dealer | price |
--------- -------- -------
| 0001 | A | 3.45 |
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | B | 1.45 |
| 0003 | C | 1.69 |
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
--------- -------- -------
7 rows in set (0.06 sec)

大家把article这一列举办BIT_ORAV4()试一试。 在试验在此之前推算一下结实应当是何许?

0001

0001

0010

0011

0011

0011

OR   0100       

————————

0111

结果应当是那般的吗?

mysql> SELECT BIT_OR(article) FROM shop;
-----------------
| BIT_OR(article) |
-----------------
| 7 |
-----------------
1 row in set (0.00 sec)

mysql>

7正是二进制的0111 没有错呢,并且小编随意有多少个1 接连OR 结果都以1 

1 or 1 or 0 or 1  =  1 

转变来那几个难点中的逻辑就是:不管作者明日访谈了稍稍次,笔者便是拜谒过了那个网址(用逻辑表示正是1)

 

 

大家回过头来再看二遍这种操作:

SELECT year, month, BIT_COUNT(BIT_OR(1<<day)) AS day FROM t1 GROUP BY year, month;

明天看起来就好解释的多了。1 左移 天数的位 ,相应的位数就象征三个月之中的第几天(反正六十四位,够用)。比方前些天2017-06-02

1<<2 正是 100 表示明天本身访问了这么些网址。 小编将day那字段ORAV4完事后收获了二个64为的binary (这几个数的意义,笔者想不用解释了) 再用BIT_COUNT()函数数一下就获得了笔者们想要的结果(可把自个儿疲惫了(๑•ᴗ•๑),墨迹了这么半天不知底讲没讲领悟)。

 

 

使用AUTO_INCREMENT

 

 

听名字就领悟机关扩展,直接上操作:

mysql> CREATE TABLE animals(
-> id MEDIUMINT NOT NULL AUTO_INCREMENT,
-> name CHAR(30) NOT NULL,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.85 sec)

mysql> INSERT INTO animals (name) VALUES
-> ('dog'),('cat'),('penguin'),
-> ('lax'),('whale'),('ostrich');
Query OK, 6 rows affected (0.13 sec)
澳门金莎娱乐网站 ,Records: 6 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM animals;
---- ---------
| id | name |
---- ---------
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
---- ---------
6 rows in set (0.00 sec)

mysql>

先建了一个animals表 字段有id 和name。 id设置成自增的主键, 插入数据只写name。 然后id就能够活动填写。

 

 

另外还应该有一个发令能够修改,AUTO_INCREMENT 的先河值。

操作如下:

ALTER TABLE tbl_name AUTO_INCREMENT = 2333;

 

 

to be continued...

澳门金莎娱乐网站 1

本文由金沙澳门官网发布于数据库信息,转载请注明出处:Mysql学习笔记009

关键词: 金沙澳门官网

上一篇:安装介绍篇
下一篇:没有了