Mysql基础篇:必知必会(上)

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」。

一、数据库操作

1.显示数据库

1
sql复制代码mysql> SHOW DATABASES;

2.创建数据库

CREATE DATABASE 数据库名 CHARSET='编码格式'

1
sql复制代码mysql> CREATE DATABASE create_test CHARSET = 'utf8';

3.使用数据库

1
sql复制代码mysql> USE create_test;

4.查看当前数据库

使用 SELECT DATABASE() 查看当前使用的数据库。

1
2
3
4
5
6
sql复制代码mysql> SELECT DATABASE();
+-------------+
| DATABASE() |
+-------------+
| create_test |
+-------------+

5.删除数据库

1
sql复制代码mysql> DROP DATABASE create_test;

二、表操作

创建表

代码格式:

1
2
3
4
5
6
sql复制代码CREATE TABLE  [IF NOT EXISTS] `表名` (
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
.......
`字段名` 列类型 [属性] [索引] [注释]
) [表类型] [字符集设置] [注释]

使用下面的语句创建示例中的 one_piece 表。

1
2
3
4
5
6
7
8
sql复制代码mysql> CREATE TABLE one_piece
-> (
-> id CHAR(10) NOT NULL COMMENT '海贼团id',
-> pirates CHAR(10) NOT NULL COMMENT '海贼团名称',
-> name CHAR(10) NOT NULL COMMENT '海贼名',
-> age INT(11) NOT NULL COMMENT '海贼年龄',
-> post VARCHAR(10) NULL COMMENT '海贼团职位'
-> );

注意:创建表时,指定的表名必须不存在,否则会出错。

更新表

1.添加列

在刚才创建的 one_piece 表中添加一列 bounty (赏金)。

1
2
sql复制代码mysql> ALTER TABLE one_piece
-> ADD bounty INT(15);

2.删除列
删除 bounty 列。

1
2
sql复制代码mysql> ALTER TABLE one_piece
-> DROP COLUMN bounty;

查看表结构

1
2
3
4
5
6
7
8
9
10
sql复制代码mysql> DESC one_piece;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id | char(10) | NO | | NULL | |
| pirates | char(10) | NO | | NULL | |
| name | char(10) | NO | | NULL | |
| age | int(11) | YES | | NULL | |
| post | varchar(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+

查看表详细信息

\G 后面不能加“ ; ”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
sql复制代码mysql> SHOW TABLE STATUS LIKE 'one_piece' \G
*************************** 1. row ***************************
Name: one_piece
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2021-11-08 15:20:13
Update_time: NULL
Check_time: NULL
Collation: utf8mb4_0900_ai_ci
Checksum: NULL
Create_options:
Comment:

重命名表

两种方法:

  • ALTER TABLE 表名 RENAME [TO | AS] 新表名;
  • RENAME TABLE 表名 TO 新表名;

用方法一将 Products 表更名为 new_Products ,再用方法二改回来。

1
2
3
4
sql复制代码-- 方法一
mysql> ALTER TABLE one_piece RENAME TO new_one_piece;
-- 方法二
mysql> RENAME TABLE new_one_piece TO one_piece;

删除表

DROP TABLE 表名

1
sql复制代码mysql> DROP TABLE one_piece;

注意:在该表与其他表有关联时,Mysql 会阻止该表的删除。

3. 查询

查询多列

同时输出 name, age 列。

1
2
sql复制代码mysql> SELECT name, age
-> FROM one_piece;

检索唯一值

使用 DISTINCT 关键字,查询字段 age 的唯一值。

1
2
sql复制代码mysql> SELECT DISTINCT age
-> FROM one_piece;

限制输出

Mysql 中使用 LIMIT 关键字限制输出的数据。LIMIT 有两种常见用法:

1
2
sql复制代码SELECT * FROM table  LIMIT [offset], rows    -- LIMIT 单独使用
SELECT * FROM table LIMIT rows OFFSET [offset] -- 配合 OFFSET 使用

offset:行开始的行的索引。0表示从第1行 开始显示(包括第1行),以此类推。

rows:数据显示的条数。

示例

1
2
3
4
5
sql复制代码SELECT * FROM one_piece LIMIT 5;    -- 检索前5条数据
--相当于
SELECT * from one_piece LIMIT 0,5; -- 从第0行开始检索5条数据
--相当于
SELECT * FROM one_piece LIMIT 5 OFFSET 0; -- 从第0行开始检索5条数据,注意这里的LIMIT的5指代的是数量

注:如果表中数据不足,即LIMIT设定的数过大,则只会检索到最后一行。

注释

三种注释方式

1
2
3
sql复制代码-- 单行注释
# 单行注释
/* 多行注释 */

四、ORDER BY 排序

单列排序

使用 ORDER BY 子句。 ORDER BY 子句取一个或多个列的名字,据此对输出进行排序(默认升序)。

1
2
3
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> ORDER BY age;

注意:在指定一条 ORDER BY 子句时,应该保证它是 SELECT 语句中最后一条子句。

多列排序

1
2
3
sql复制代码mysql> SELECT A, B
-> FROM test
-> ORDER BY A, B;

在按多列排序时,仅在多个行具有相同的 A 值时 才按 B 进行排序。如果 A 列中所有的值都是 唯一的,则不会按 B 排序。

指定排序方向

ORDER 默认升序(从A到Z)排序。指定 DESC 关键字进行降序(从Z到 A)排序。

1
2
3
sql复制代码mysql> SELECT age
-> FROM one_piece
-> ORDER BY age DESC;

多列指定排序方向时,要使用逗号分隔。

1
2
3
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> ORDER BY name DESC, age;

五、WHERE 过滤数据

WHERE 子句操作符

操作符 说明 操作符 说明
= 等于 大于
<>、!= 不等于 >= 大于等于
< 小于 !> 不大于
<= 小于等于 BETWEEN 在两值之间(包含边界)
!< 不小于 IS NULL 是NULL值

范围值检查

使用 WHERE 关键字和 BETWEEN AND 进行范围值检查(前闭后闭)。

1
2
3
sql复制代码mysql> SELECT age
-> FROM one_piece
-> WHERE A BETWEEN 5 AND 10;

查询 字段 age 中 >=5 并且 <= 10 的数据。

空值检查

使用 WHERE 关键字和 IS NULL 进行范围值检查。如果没有 NULL 值就不返回数据。

1
2
3
sql复制代码mysql> SELECT name
-> FROM one_piece
-> WHERE name IS NULL;

WHERE 组合过滤

使用 ANDOR 操作符给 WHERE 子句添加附加条件。 AND 的优先级比 OR 要高,优先级高低 ()ANDOR。在使用的过程中要注意各个优先级的影响。

1
2
3
4
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> WHERE(name = '索隆' OR name = '路飞')
-> AND age >= 18;

IN 操作符

IN 操作符用来指定条件范围,范围中的每个条件都可以进行匹配。(与 OR 的功能相同,但速度比 IN 慢)

1
2
3
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> WHERE name IN ('索隆', '路飞')

NOT 操作符

WHERE 子句中的 NOT 操作符有且只有一个功能,那就是否定其后所跟的任何条件

1
2
3
sql复制代码mysql> SELECT name
-> FROM one_piece
-> WHERE name NOT IN ('索隆', '路飞')

七、通配符过滤

通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用 通配符搜索。

在使用通配符过滤之前要先了解 LIKELIKE 操作符用于在 WHERE 子句中搜索列中的指定模式或取值。

% 通配符

% 表示任何字符出现任意次数。例如,为了找出所有以 开始的 name

1
2
3
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> WHERE name LIKE '路%';

_ 通配符

通配符 _ 的用途与 % 一样也是匹配任意字符,但它只匹配单个字符,而不是多个字符

1
2
3
sql复制代码mysql> SELECT name, age
-> FROM one_piece
-> WHERE name LIKE '乌_普';

这就是今天要分享的内容,微信搜 Python新视野,每天带你了解更多有用的知识。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%