MySQL必知必会 - 基础入门

基本概念

数据库(database)是一个以某种有组织的方式存储的数据集合,保存有组织数据的容器(通常是一个文件或一组文件)

数据库软件DBMS(data base management system)创建和操纵数据库。

表(table)某种特定类型数据的结构化清单。表具有一些特征,这些特征定义了数据在表中如何存储:可以存储什么样的数据,数据如何分解,各部分信息如何命名,等等。

模式(schema)用于描述表中各部分信息,模式可以用来描述数据库中特定的表和整个数据库(和其中表的关系)。

列(column)表中的一个字段,所有表都是由一个或多个列组成。

数据类型(datatype)所容许的数据的类型。每个表列都有相应的数据类型,它限制该列中存储的数据。

行(row)表中的一个记录。

主键(primary key)一列(或一组列),其值能够唯一区分表中每个行。

MySQL必知必会 - 增删改

创建和删除数据库

创建数据库的方式有两种,一种登陆后创建,一种使用mysqladmin创建。

1
2
3
CREATE DATABASE 数据库名;

mysqladmin -u root -p create RUNOOB

删除数据库使用drop databse命令。

MySQL必知必会 - 联结查询

子查询

SQL允许创建子查询,即嵌套在其他查询中的查询。

1
2
3
4
5
6
7
8
MariaDB [test]> select cust_name, cust_contact from customers where cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id = "TNT2"));
+----------------+--------------+
| cust_name      | cust_contact |
+----------------+--------------+
| Coyote Inc.    | Y Lee        |
| Yosemite Place | Y Sam        |
+----------------+--------------+
2 rows in set (0.00 sec)

子查询还可以根据外部表中的字段对本表进行过滤。

MySQL必知必会 - 聚集和分组

创建计算字段

Concat()函数用来拼接不同的列。

as关键字用来给字段或值取一个别名。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
MariaDB [test]> select concat(vend_name, '(', vend_country, ')') as vend_title from vendors;
+------------------------+
| vend_title             |
+------------------------+
| Anvils R Us(USA)       |
| LT Supplies(USA)       |
| ACME(USA)              |
| Furball Inc.(USA)      |
| Jet Set(England)       |
| Jouets Et Ours(France) |
+------------------------+
6 rows in set (0.00 sec)

Fibonacci数列

已知 $$F_0 = 0, F_1 = 1, F_n = F_{n-1} + F_{n-2}$$

传统递归方式

1
2
3
4
5
6
7
def FibsRecursion(n):
    if n == 0:
        return 0

    if n == 1:
        return 1
    return FibsRecursion(n - 1) + FibsRecursion(n - 2)

传统递归方式需要计算许多重复的值,时间复杂度为 $O(2^n)$。