目录
一,SQL语句基础
1, SQL简介
(1) SQL语句分类
(2)SQL语句的书写规范
二,数据库操作
1、查看
(1)查看所有数据库
(2)查看有没有指定的数据库(mysql)
2、创建
(1)创建已经存在的数据库
(2)创建不存在的数据库
(3)查看创建数据库的语句:
3、删除
(1)删除数据库
4、切换
(1)使用数据库
扩展:
5、执行系统命令
在数据库中执行Linux命令
三, MySQL 字符集
1,查看当前数据库使用的字符集
2,查看校对规则
3, utf8和utf8mb4的区别
四, 数据库对象
一,SQL语句基础
1, SQL简介
SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务。
(1)改变数据库的结构
(2)更改系统的安全设置
(3)增加用户对数据库或表的许可权限
(4)在数据库中检索需要的信息
(5)对数据库的信息进行更新
(1) SQL语句分类
MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中,SQL语句主要可以划分为以下几类:
(1)DDL(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、
索引)的操作。CREATE、DROP、ALTER、RENAME、 TRUNCATE等。
(2) DML(Data Manipulation Language): 数据操作语言,定义对数据库记录的
操作。INSERT、DELETE、UPDATE等。
(3) DQL(Data Query Language)数据查询语言:SELECT语句。
(4) DCL(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的
访问权限和安全级别。GRANT、REVOKE等。
(5) TCL(Transaction Control):事务控制。COMMIT、ROLLBACK、SAVEPOINT等。
注:可以使用help查看这些语句的帮助信息。
(2)SQL语句的书写规范
(1)在数据库系统中,SQL语句不区分大小写(建议用大写) 。
(2) 但字符串常量区分大小写。
(3)SQL语句可单行或多行书写,以“;”结尾。
(4)关键词不能跨多行或简写。
(5)用空格和缩进来提高语句的可读性。
(6) 子句通常位于独立行,便于编辑,提高可读性。
sql语句注释:
1,单行注释:“--”
(1)此句为注释,不会执行此命令
mysql> -- select user,host from mysql.user; 

(2)如果没有注释符号,此句为命令,会被执行,执行结果如下:
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
+------------------+-----------+
4 rows in set (0.00 sec) 

2,多行注释:/* text */
(1)把 where user='root'写在注释里面,则结果为查询所有的用户
mysql> select user from mysql.user/*
   /*> where user='root'
   /*> */
    -> ;
+------------------+
| user             |
+------------------+
| root             |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
+------------------+
4 rows in set (0.00 sec) 

(2)去掉多行注释符号,把where user='root'写在命令,结果为仅查询root用户
mysql> select user from mysql.user
    -> where user='root';
+------+
| user |
+------+
| root |
+------+
1 row in set (0.00 sec) 

二,数据库操作
1、查看
语法:`SHOW DATABASES [LIKE wild];`
(1)wild可以使用"%"和"_"通配符。
(2)%表示匹配任意个数的任意字符。
(3) _表示单个任意字符。
(1)查看所有数据库
方法一:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec) 

方法二:(%表示任意0个或多个任意字符)
mysql> show databases like '%';
+--------------------+
| Database (%)       |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec) 

方法三:_(下划线表示任意单个字符)
mysql> show databases like '___';        (此处是三个下划线,有三个字符的数据库) 
+----------------+
| Database (___) |
+----------------+
| sys            |
+----------------+
1 row in set (0.00 sec)
mysql> 

Information_schema:主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信息、字符集信息、分区信息等。(数据字典表)
performance_schema:主要存储数据库服务器的性能参数
mysql:存储了系统的用户权限信息及帮助信息。
sys: 5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。
test:系统自动创建的测试数据库,任何用户都可以使用。
(2)查看有没有指定的数据库(mysql)
mysql> show databases like 'mysql';
+------------------+
| Database (mysql) |
+------------------+
| mysql            |
+------------------+
1 row in set (0.00 sec) 

2、创建
语法:CREATE DATABASE [IF NOT EXISTS]数据库名; `
(1)创建已经存在的数据库
用给定的名字创建一个数据库,如果数据库已经存在,则报错。
mysql> creat database mysql;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat database mysql' at line 1
mysql> 

(2)创建不存在的数据库
创建一个名为luntan的数据库,此数据库之前不存在
mysql> creat database luntan;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat database luntan' at line 1
mysql> create database luntan;
Query OK, 1 row affected (0.00 sec)
mysql> 

此时查看所有数据库,可以看到上面创建的luntan数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| luntan             |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
mysql> 

(3)查看创建数据库的语句:
mysql> show create database luntan;
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                  |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| luntan   | CREATE DATABASE `luntan` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> 

3、删除
语法:DROP DATABASE [IF EXISTS]数据库名;`
删除数据库中得所有表和数据库(慎用)
(1)删除数据库
删除luntan数据库
mysql> drop database lunan;
ERROR 1008 (HY000): Can't drop database 'lunan'; database doesn't exist
mysql> drop database luntan;
Query OK, 0 rows affected (0.01 sec)
mysql> 

此时查看所有数据库,可以看到luntan数据库被删除了
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> 

4、切换
语法:` USE 数据库名;`
(1)使用数据库
使用mysql数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed 

此时当前使用的数据库为mysql
mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec) 

扩展:
(1)查看当前使用的用户 select user();
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec) 

(2)设置提示符显示当前使用的数据库
打开/etc/my.cnf
[root@localhost yum.repos.d]# vim /etc/my.cnf 

在文件最后输入以下代码:
[mysql]
prompt=mysql8.0.30 [\\d]> 

记得重启mysqld服务 或者重新连接
此时使用mysql数据库,会显示当前使用的数据库名
mysql8.0.30 [(none)]>use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed 

5、执行系统命令
语法:`system 命令`
在数据库中执行Linux命令
在数据库中查看linux当前目录下的详细信息
mysql8.0.30 [mysql]>system ls -l
total 44
-rw-r--r--. 1 root root  2081 Feb  7 20:25 docker-ce.repo
drwxr-xr-x. 2 root root  4096 Feb  7 20:00 mysql
-rw-r--r--. 1 root root 16087 Feb  9 16:23 mysql-boost-8.0.32.tar.gz
-rw-r--r--. 1 root root   951 Jul  6  2022 mysql-community-debuginfo.repo
-rw-r--r--. 1 root root   827 Jul  6  2022 mysql-community.repo
-rw-r--r--. 1 root root   871 Jul  6  2022 mysql-community-source.repo
-rw-r--r--. 1 root root   358 Feb  7 12:07 redhat.repo
-rw-r--r--. 1 root root   120 Feb  7 14:22 rhel9.repo 

三, MySQL 字符集
MySQL字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念:字符集(CHARACTER)是一套编码,校对规则(COLLATION)是在字符集内用于比较字符的一套规则。
mysql字符集:
latin1支持西欧字符、希腊字符等
gbk支持中文简体字符
big5支持中文繁体字符
utf8几乎支持世界所有国家的字符。
utf8mb4是真正意义上的utf-8
1,查看当前数据库使用的字符集
mysql8.0.30 [mysql]>show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec) 

| character_set_client | utf8mb4 | mysql客户端字符集
| character_set_connection | utf8mb4 | 数据通信链路字符集,当mysql客户端向服务器发送请求时,客户端的请求数据以该字符集进行编码。
| character_set_database | utf8mb4 | 数据库字符集
| character_set_filesystem | binary | MySQL服务器文件系统字符集,该值是固定的binary
| character_set_results | utf8mb4 | 结果集的字符集,MySQL服务器向mysql客户端返回执行结果时,执行结果以该字符集进行编码。
| character_set_server | utf8mb4 | mysql服务器实例字符集
| character_set_system | utf8mb3 | 元数据(字段名、表名、数据库名等)的字符集
| character_sets_dir | /usr/share/mysql/charsets/ | 字符集安装的目录
2,查看校对规则
mysql8.0.30 [mysql]>show collation;
+-----------------------------+----------+-----+---------+----------+---------+---------------+
| Collation                   | Charset  | Id  | Default | Compiled | Sortlen | Pad_attribute |
+-----------------------------+----------+-----+---------+----------+---------+---------------+
| armscii8_bin                | armscii8 |  64 |         | Yes      |       1 | PAD SPACE     |
| armscii8_general_ci         | armscii8 |  32 | Yes     | Yes      |       1 | PAD SPACE     |
| ascii_bin                   | ascii    |  65 |         | Yes      |       1 | PAD SPACE     |
| ascii_general_ci            | ascii    |  11 | Yes     | Yes      |       1 | PAD SPACE     |
| big5_bin                    | big5     |  84 |         | Yes      |       1 | PAD SPACE     | 

Collation 字符集校对规则名称。MySQL校对规则名称是:以对应的字符集名称开头,以国家名居中(或以general居中),以ci、cs或bin结尾。【ci表示大小写不敏感,cs表示大小写敏感,bin表示按二进制编码值比较。】
Charset 与字符集校对规则关联的字符集名称
Id 字符集校对规则编号
Default 是不是对应字符集默认的校对规则
Compiled 是否有将此字符集校对规则集成到服务器中
Sortlen 这个与字符串表示的字符集所需要的内存数量有关
Pad_attribute 控制字符串尾部空格处理方式。PAD SPACE:在排序和比较运算中,忽略字符串尾部空格;NO PAD:在排序和比较运算中,字符串尾部空格当成普通字符,不能忽略。
3, utf8和utf8mb4的区别
MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符,如表情等等(utf8的缺点)。
因此在8.0之后,建议大家使用utf8mb4这种编码。
四, 数据库对象
数据库对象的命名规则:
(1)必须以字母开头
(2)可包括数字和三个特殊字符(# _ $)
(3)不要使用MySQL的保留字
(4)同一Schema下的对象不能同名




















![[oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列](https://img-blog.csdnimg.cn/img_convert/a65d89004e5b2703a6b3ce98a6d6ea23.png)