Libx

MySQL Learning 2

字数统计: 1,314阅读时长: 6 min
2017/09/10 Share

嗯,今天下午又看了一点MySQL。。依然是基础知识,只是在终端里面操作了一波,还没有使用一门后端语言来操作一波,之后接触了Node之后再来实际操作一波吧。👀

依然是基本语句:🌈

UPDATE 查询

update命令用来修改或者更新数据表中的数据

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

  • 同时更新一个或多个字段。
  • 在 WHERE 子句中指定任何条件。
  • 在一个单独表中同时更新数据。
    实例:
    UPDATE w3cschool_tbl SET w3cschool_title='John Test' WHERE w3cschool_id=4;
    Query OK, 1 row affected (0.23 sec)
    Rows matched: 1 Changed: 1 Warnings: 0

DELETE 语句:

使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录

DELETE FROM w3cschool_tbl WHERE w3cschool_id=3
Query OK, 1 row affected (0.33 sec)

然后再来查询一下:

SELECT * FROM w3cschool_tbl
+--------------+------------------+------------------+-----------------+
| w3cschool_id | w3cschool_title | w3cschool_author | submission_date |
+--------------+------------------+------------------+-----------------+
| 1 | Learn MySQL | Abdul S | 2017-08-21 |
| 2 | test about MySql | libiao | 2017-08-21 |
| 4 | John Test | John Poul | 2017-08-22 |
| 5 | Learn TS | John Poul | 2017-08-22 |
+--------------+------------------+------------------+-----------------+
4 rows in set (0.00 sec)

LIKE语句:

“在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。
WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 “runoob_author = ‘RUNOOB.COM’”。
但是有时候我们需要获取 runoob_author 字段含有 “COM” 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。”

基本语法:

SELECT field1, field2,...fieldN
FROM table_name
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

实例:

SELECT * FROM w3cschool_tbl WHERE w3cschool_title LIKE 'Learn%';
+--------------+-----------------+------------------+-----------------+
| w3cschool_id | w3cschool_title | w3cschool_author | submission_date |
+--------------+-----------------+------------------+-----------------+
| 1 | Learn MySQL | Abdul S | 2017-08-21 |
| 5 | Learn TS | John Poul | 2017-08-22 |
+--------------+-----------------+------------------+-----------------+
2 rows in set (0.00 sec)

union

顾名思义:组合嘛==!

“MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。”

格式:

SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
在所有语言中,排序是必不可少的,来排一波序:

ORDER BY
放在一起操作一波:

mysql> SELECT submission_date FROM test2_tbl
UNION
SELECT submission_date FROM w3cschool_tbl
ORDER BY submission_date;
+-----------------+
| submission_date |
+-----------------+
| 2017-08-21 |
| 2017-08-22 |
| 2017-09-10 |
+-----------------+
3 rows in set (0.26 sec)

GROUP BY(顾名思义:按组):

SELECT submission_date,COUNT(*) FROM w3cschool_tbl GROUP BY submission_date;
+-----------------+----------+
| submission_date | COUNT(*) |
+-----------------+----------+
| 2017-08-21 | 2 |
| 2017-08-22 | 2 |
+-----------------+----------+
2 rows in set (0.28 sec)

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

SELECT submission_date,COUNT(*) FROM w3cschool_tbl GROUP BY submission_date WITH ROLLUP;
+-----------------+----------+
| submission_date | COUNT(*) |
+-----------------+----------+
| 2017-08-21 | 2 |
| 2017-08-22 | 2 |
| NULL | 4 |
+-----------------+----------+
3 rows in set (0.00 sec)

select coalesce(a,b,c);

参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

SELECT coalesce(submission_date,'total'),COUNT(*) FROM w3cschool_tbl GROUP BY submission_date WITH ROLLUP;
+-----------------------------------+----------+
| coalesce(submission_date,'total') | COUNT(*) |
+-----------------------------------+----------+
| 2017-08-21 | 2 |
| 2017-08-22 | 2 |
| total | 4 |
+-----------------------------------+----------+
3 rows in set (0.00 sec)

接下来感觉是牛逼的了。。

😁连表:
“使用 MySQL 的 JOIN 在两个或多个表中查询数据。
你可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
  • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。”

先来创建一个新表并插入数据:

CREATE TABLE `tcount_tbl` ( `w3cschool_author` varchar(255) NOT NULL DEFAULT '', `count` int(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.53 sec)
INSERT INTO `tcount_tbl` VALUES ('libiao', '10'), ('Abdul S', '20'), ('John Poul', '22');
Query OK, 3 rows affected (0.40 sec)
Records: 3 Duplicates: 0 Warnings: 0

DO IT!
来分别看下这两张表的数据:

tcount_tbl:

+---------------+--------------+
| w3cschool_author | count |
+---------------+--------------+
| libiao | 10 |
| Abdul S | 20 |
| John Poul | 22 |
+---------------+--------------+

w3cschool_author:

+--------------+------------------+------------------+-----------------+
| w3cschool_id | w3cschool_title | w3cschool_author | submission_date |
+--------------+------------------+------------------+-----------------+
| 1 | Learn MySQL | Abdul S | 2017-08-21 |
| 2 | test about MySql | libiao | 2017-08-21 |
| 4 | John Test | John Poul | 2017-08-22 |
| 5 | Learn TS | John Poul | 2017-08-22 |
+--------------+------------------+------------------+-----------------+
```SQL
操作一波:
mysql> SELECT a.w3cschool_id, a.w3cschool_author, b.count FROM w3cschool_tbl a INNER JOIN tcount_tbl b ON a.w3cschool_author=b.w3cschool_author;
+--------------+------------------+-------+
| w3cschool_id | w3cschool_author | count |
+--------------+------------------+-------+
| 2 | libiao | 10 |
| 1 | Abdul S | 20 |
| 4 | John Poul | 22 |
| 5 | John Poul | 22 |
+--------------+------------------+-------+
4 rows in set (0.08 sec)

PS(另外两种还没实际操作过,,先不写。。。)

事务(此后单独来写一波)

占坑

ALTER

需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令

增:

ALTER TABLE w3cschool_tbl ADD i INT;
Query OK, 0 rows affected (0.89 sec)
Records: 0 Duplicates: 0 Warnings: 0
SELECT * FROM w3cschool_tbl;
+--------------+------------------+------------------+-----------------+------+
| w3cschool_id | w3cschool_title | w3cschool_author | submission_date | i |
+--------------+------------------+------------------+-----------------+------+
| 1 | Learn MySQL | Abdul S | 2017-08-21 | NULL |
| 2 | test about MySql | libiao | 2017-08-21 | NULL |
| 4 | John Test | John Poul | 2017-08-22 | NULL |
| 5 | Learn TS | John Poul | 2017-08-22 | NULL |
+--------------+------------------+------------------+-----------------+------+
4 rows in set (0.01 sec)

改:

ALTER TABLE w3cschool_tbl CHANGE i j BIGINT;
Query OK, 4 rows affected (0.82 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM w3cschool_tbl;
+--------------+------------------+------------------+-----------------+------+
| w3cschool_id | w3cschool_title | w3cschool_author | submission_date | j |
+--------------+------------------+------------------+-----------------+------+
| 1 | Learn MySQL | Abdul S | 2017-08-21 | NULL |
| 2 | test about MySql | libiao | 2017-08-21 | NULL |
| 4 | John Test | John Poul | 2017-08-22 | NULL |
| 5 | Learn TS | John Poul | 2017-08-22 | NULL |
+--------------+------------------+------------------+-----------------+------+
4 rows in set (0.03 sec)

修改表名:
ALTER TABLE testalter_tbl RENAME TO alter_tbl;

睡了睡了,溜了溜了~😜

CATALOG
  1. 1. 嗯,今天下午又看了一点MySQL。。依然是基础知识,只是在终端里面操作了一波,还没有使用一门后端语言来操作一波,之后接触了Node之后再来实际操作一波吧。👀
    1. 1.1. 依然是基本语句:🌈
      1. 1.1.1. UPDATE 查询
      2. 1.1.2. DELETE 语句:
      3. 1.1.3. LIKE语句:
      4. 1.1.4. union
        1. 1.1.4.1. 在所有语言中,排序是必不可少的,来排一波序:
      5. 1.1.5. GROUP BY(顾名思义:按组):
      6. 1.1.6. select coalesce(a,b,c);
    2. 1.2. 接下来感觉是牛逼的了。。
      1. 1.2.1. 事务(此后单独来写一波)
      2. 1.2.2. ALTER
        1. 1.2.2.1. 修改表名: