????????SQL:结构化查询语言(Structured Query Language),在关系型数据库上执行数据操作、数据检索以及 数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务
????????改变数据库的结构
????????更改系统的安全设置
????????增加用户对数据库或表的许可权限
????????在数据库中检索需要的信息
????????对数据库的信息进行更新
MySQL致力于支持全套ANSI/ISO SQL标准。在MySQL数据库中,SQL语句主要可以划分为以下几类
????????DDL(Data Definition Language):数据定义语言,定义对数据库对象(库、表、列、索引)的操作。 CREATE、DROP、ALTER、RENAME、 TRUNCATE等
????????DML(Data Manipulation Language): 数据操作语言,定义对数据库记录的操作。 INSERT、DELETE、UPDATE、SELECT等
????????DCL(Data Control Language): 数据控制语言,定义对数据库、表、字段、用户的访问权限和安全 级别。
? ? ? ? GRANT、REVOKE等
Transaction Control:事务控制
????????COMMIT、ROLLBACK、SAVEPOINT等
????????在数据库系统中,SQL语句不区分大小写(建议用大写) 。
????????????????但字符串常量区分大小写。
????????????????SQL语句可单行或多行书写,以“;”结尾。
????????????????关键词不能跨多行或简写。
????????????????用空格和缩进来提高语句的可读性。
????????????????子句通常位于独立行,便于编辑,提高可读性。
????????????????????????SELECT * FROM tb_table
????????????????注释:
????????????????SQL标准:
????????????????????????//。多行注释
????????????????????????“--” 单行注释
????????????????MySQL注释: “#”????????
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
create_option: [DEFAULT] {
CHARACTER SET [=] charset_name
| COLLATE [=] collation_name
| ENCRYPTION [=] {'Y' | 'N'}
}
在window11的终端登陆数据库:
C:\Users\31922>mysql -uroot -p
Enter password: ******
查看此时所有的数据库:
mysql> show databases;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| mysql ? ? ? ? ? ? ?|
| performance_schema |
| sakila ? ? ? ? ? ? |
| sys ? ? ? ? ? ? ? ?|
| world ? ? ? ? ? ? ?|
+--------------------+
6 rows in set (0.00 sec)
创建新的数据库TEATDATABASES并查看:
mysql> CREATE DATABASE TEATDATABASES;
Query OK, 1 row affected (0.01 sec)mysql> SHOW DATABASES;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| mysql ? ? ? ? ? ? ?|
| performance_schema |
| sakila ? ? ? ? ? ? |
| sys ? ? ? ? ? ? ? ?|
| teatdatabases ? ? ?|
| world ? ? ? ? ? ? ?|
+--------------------+使用数据库:
mysql> use teatdatabases;?
退出此时所登陆的数据库,登陆新创建的数据库:
mysql> EXIT
C:\Users\31922>mysql -uroot -p teatdatabases
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?-u用户名? -p? ?默认使用的数据库
Enter password: ******
查看当前连接的数据库:
mysql> select database();
+---------------+
| database() ? ?|
+---------------+
| teatdatabases |
+---------------+
1 row in set (0.00 sec)mysql>
查看当前连接的数据库
mysql> select database();
+---------------+
| database() ? ?|
+---------------+
| teatdatabases |
+---------------+
1 row in set (0.00 sec)查看数据库版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.35 ? ?|
+-----------+
1 row in set (0.00 sec)查看当前用户
mysql> select user();
+----------------+
| user() ? ? ? ? |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)查看所有用户:
SELECT User,Host,Password FROM mysql.user;
若此时在Linux中使用MySQL,则可以用system<命令>来查看调用linux中命令:
执行对应系统命令:
SYSTEM <命令>
system cls | clear
system date 等
????????Information_schema: 主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信 息、字符集信息、分区信息等。(数据字典表)
????????performance_schema: 主要存储数据库服务器的性能参数
????????mysql: 存储了系统的用户权限信息及帮助信息。
????????sys: 5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema 和 performance_schema结合起来,查询出更加令人容易理解的数据
????????test: 系统自动创建的测试数据库,任何用户都可以使用。
????????字符集是指一系列符号以及符号对应的编码的集合,比如英文字母可以使用 ASCII 编码,中文可以使用 GBK 或者 UTF-8 编码,校对规则则是指一种比较字符的规则,在排序或者比较字符的时候使用。
????????每个字符集都会对应多个校对规则,是一对多的关系,而且每个字符集会有默认的校对规则,当我们在 创建数据库或者表时,如果只指定字符集,则使用字符集对应的默认校对规则。
????????cs 大小写敏感
????????ci 大小写不敏感
????????bin 二进制编码比较
mysql> show character set;
解析:
????????Charset 字符集名称
????????Description 字符集描述
????????Default collation 默认校对规则
????????Maxlen 最大长度
mysql> show collation;
解析:
????????Collation 校对规则名称
????????Charset 哪个字符集
????????Id 校对规则编号
????????Default 是否为默认校对规则
????????Compiled 是否系统自带
????????Sortlen 这与对字符集中表示的字符串进行排序所需的内存量有关。
????????Pad_attribute 末尾空格是否参与比较
参考:
????????1、非二进制字符串( CHAR 、 VARCHAR 、 TEXT )比较时,末尾空格的处理跟列的字符序有直接关系
????????2、 MySQL5.7 及之前的版本,排序规则的类型都是 PAD SPACE ,会忽略字符串末尾的空格, LIKE 除外
????????3、 MySQL8 开始,字符序增加了一个参数 Pad_attribute ,该参数的值不同,对字符串末尾空格的处理 方式不同 NO PAD :字符串末尾的空格会和其他字符一样,不会被忽略 PAD SPACE :字符串末尾的空格会被忽略, LIKE 除外
????????4、如上针对的都是非二进制字符串的排序和比较,而不是储存
mysql> show create database teatdatabases;
(create database teatdatabases;) # 创建数据库的命令
utf8和utf8mb4的区别
????????MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的 unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换。
????????既然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这种编码。
ALTER {DATABASE | SCHEMA} [db_name] alter_option ... alter_option: { [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name | [DEFAULT] ENCRYPTION [=] {'Y' | 'N'} | READ ONLY [=] {DEFAULT | 0 | 1} }
mysql> select database();
+---------------+ | database() | +---------------+ | teatdatabases | +---------------+ 1 row in set (0.00 sec)
mysql> show create database ?teatdatabases;?
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ | teatdatabases | CREATE DATABASE `teatdatabases` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +---------------+-----------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> alter database teatdatabases read only = 1;? ? #? read only=1 只读
Query OK, 1 row affected (0.01 sec)
mysql> show create database teatdatabases;
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Database ? ? ?| Create Database ? | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ | teatdatabases | CREATE DATABASE `teatdatabases` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ /* READ ONLY = 1 */ | +---------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
mysql> drop table td_emp1;? ?# 此时我们删除表td_emp1时,会提示(此时是只读模式)
ERROR 3989 (HY000): Schema 'teatdatabases' is in read only mode.
mysql> alter database teatdatabases read only = 0;
Query OK, 1 row affected (0.01 sec)
mysql> drop table tb_emp1;
Query OK,0 rows affected (0.01 sec)
mysql> show tables;? ? ?#,用于显示当前数据库中的所有表格(也称为表)
Empty set (0.02 sec)
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
mysql> drop database testdatabase;? #? 删除数据库 testdatabase