使用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就能活动填写。

 

 

此外还有1个限令能够修改,AUTO_INCREMENT 的起头值。

操作如下:

ALTER TABLE tbl_name AUTO_INCREMENT = 2333;

 

 

to be continued…

4503.com 1

依靠天计算访问量

 

 

先建三个表、插入一些数量
每一条数据表示用户访问某网址的日子(如:三千-0一-0壹)

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(二进制)中的一的个数.

笔者写个栗子你就精晓了:

SELECT BIT_COUNT(十0); 这些的答案是稍稍?

想1想拾0的贰进制是:1拾0100

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

mysql>

那答案应该是三喽?

mysql> SELECT BIT_COUNT(100);
+—————-+
| BIT_COUNT(100) |
+—————-+
| 3 |
+—————-+
4503.com,1 row in set (0.00 sec)

mysql>

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

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

 

 

接下来大家来接着研究第二个难题BIT_OCR-V()是干啥的?

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

BIT_OKoleos(expr)是将expr这些列的具备字段都OHighlander一回 计算推行的正确度陆拾1个人,这里繁多博客都尚未列举过怎么用的example
或许是他俩感觉她大概了,也大概是他们也不会用(他们迟早不会用,嘿嘿嘿)

那以前的3个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那1列实行BIT_OCRUISER()试壹试。
在试验之前推算一下结果应该是怎么?

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就是2进制的0111 没有错吗,并且自身不管有多少个一 连接OR 结果都是一 

1 or 1 or 0 or 1  =  1 

调换来那个难题中的逻辑正是:不管笔者明天访问了稍稍次,笔者正是访问过了那么些网址(用逻辑表示正是壹)

 

 

咱俩回过头来再看一次这种操作:

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

目前看起来就好解释的多了。1 左移 天数的位
,相应的位数就象征七个月之中的第几天(反正61人,够用)。举例前日2017-0陆-0二

1<<2 正是 100 表示前几天自己访问了那些网址。
作者将day那字段O奇骏完事后收获了三个6四为的binary
(这些数的意义,笔者想不用解释了)
再用BIT_COUNT()函数数一下就获得了笔者们想要的结果(可把小编疲惫了(๑•ᴗ•๑),墨迹了那样半天不清楚讲没讲驾驭)。