https://www.w3school.com.cn/sql/sql_select.asp
数据库启动
1、启动与关闭
RHEL7:systemctl start|stop mysqld
2、登录与退出
mysql -u user_name -ppassword -h host_name
h:连接MySQL不在本机时,填写主机名或IP地址
u:登录MySQL用户
p:登录MySQL的密码
注意:密码写在命令行时一定不能有空格
3、设置及修改MySQL root用户密码
没有密码时设置:
mysqladmin -uroot password '123456'
修改root密码
方法1:mysqladmin -uroot -p'123456' password;
方法2:ALTER USER root@localhost identified by '123456';
方法3:
mysql> update mysql.user set authentication_string=password('123456')
-> where user='root' and host='localhost';
root密码遗忘
1、关闭数据库,修改主配置文件(/etc/my.cnf)添加:skip-grant-tables
2、启动数据库, 直接登录
mysql> update mysql.user set authentication_string=password('ABCabc123!')
-> where user='root' and host='localhost';
mysql> flush privileges;
3、将配置文件的skip-grant-tables删除。
数据库安全初始设置
[root@mysql02 ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: 输入root用户密码
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 0
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n 是否改变root用户密码
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y 是否移除匿名用户
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y 是否禁止root用户远程登录
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y 是否移除test数据库
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y 是否现在更新权限表
Success.
All done!
数据库表操作
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语句的书写规范
1、SQL语句不区分大小写,建议用大写
2、字符串常量区分大小写
3、以“;”结尾
4、关键字不能跨多行或简写
5、子句具有独立性,便于编辑,提高可读性。
注释:
SQL标准:/**/ 多行注释
“–” 单行注释
MySQL注释:
“#”
数据库操作
1、查看数据库
mysql> show databases;
语法:SHOW DATABASES [LIKE wild];
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
eg:
mysql> show databases like "m%";
"_" 代表一个字符
“%” 代表任意多个
MySQL自带数据库:
1、Information_schema:主要存储了系统中的一些数据库对象信息:如用户表信息、列信息、权限信息、字符集信息、分区信息等。(数据字典表)
2、performance_schema:主要存储数据库服务器的性能参数
3、mysql:存储了系统的用户权限信息及帮助信息。
4、sys:5.7新增,之前版本需要手工导入。这个库是通过视图的形式把information_schema 和 performance_schema结合起来,查询出更加令人容易理解的数据
5、test:系统自动创建的测试数据库,任何用户都可以使用。
2、创建数据库
语法:CREATE DATABASE [IF NOT EXISTS]数据库名;
eg:
mysql> create database db2;
mysql> create database if not exists db2;
3、删除数据库(一次只能删除一个数据库)
语法: DROP DATABASE [IF EXISTS]数据库名;
功能:删除数据库中得所有表和数据库
eg:
mysql> drop database if exists db1;
4、切换数据库
mysql> use db1;
Database changed
5、查看数据库的相关信息
# 查看当前连接的数据库
mysql> select database();
+------------+
| database() |
+------------+
| db1 |
+------------+
1 row in set (0.00 sec)
#查看数据库的版本
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.14 |
+-----------+
1 row in set (0.00 sec)
#查看当前用户
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
6、在MySQL中执行linux指令 ,注意前面加system
mysql> system date;
2021年 01月 13日 星期三 13:44:31 CST
执行Linux命令:
SYSTEM <命令>
存储引擎
1、innoDB存储引擎
InnoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键。MySQL 的默认存储
引擎为InnoDB。
InnoDB主要特性有:
⑴ InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。
⑵ InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据
库引擎所不能匹敌的。
⑶ InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维持
它自己的缓冲池。
⑷ InnoDB支持外键完整性约束(FOREIGN KEY)。 ⑸ InnoDB被用来在众多需要高性能的大型数据库站点上。
2、MyISAM存储引擎
MyISAM主要特性有:
⑴ 大文件(达63位文件长度)在支持大文件的文件系统和操作系统上被支持。
⑵ 当把删除和更新及插入混合的时候,动态尺寸的行更少碎片。
⑶ 每个MyISAM表最大索引数是64。 ⑷ 最大的键长度是1000字节。
⑸ BLOB和TEXT列可以被索引。
⑹ NULL值被允许在索引的列中。这个占每个键的0-1个字节。
⑺ 所有数字键值以高字节位先被存储以允许一个更高地索引压缩。
⑻ 每表一个AUTO_INCREMEN列的内部处理。
⑼ 可以把数据文件和索引文件放在不同目录。
⑽ 每个字符列可以有不同的字符集。
3、MEMORY存储引擎
MEMORY主要特性有:
⑴ MEMORY表可以有多达每个表32个索引,每个索引16列,以及500字节的最大键长度。
⑵ MEMORY存储引擎执行HASH和BTREE索引。
⑶ 可以在一个MEMORY表中有非唯一键。
⑷ MEMORY表使用一个固定的记录长度格式。
⑸ MEMORY不支持BLOB或TEXT列。
⑹ MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列索引。
⑺ MEMORY表在所有客户端之间共享。
⑻ MEMORY表内容被存在内存中。
⑼ 当不再需要MEMORY表的内容之时,要释放被MEMORY表使用的内存。
存储引擎的选择
不同存储引擎都有各自的特点,适应于不同的需求,为了做出选择,首先需要考虑每一个存储引擎提供
了那些不同的功能。
MySQL字符集
MySQL字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念:
latin1:支持西欧字符、希腊字符等
gbk:支持中文简体字符
big5:支持中文繁体字符
utf8:几乎支持世界所有国家的字符。
1、查看所有字符集: SHOW VARIABLES like ‘character%’;
mysql> show create database db1; 查看db1数据库使用的字符集
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show variables like '%character%'; 查看所有字符集
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character_set_client:MySQL客户机字符集。
character_set_connection:数据通信链路字符集,当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码。
character_set_database:数据库字符集。
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary。
character_set_results:结果集的字符集,MySQL服务器向MySQL客户机返回执行结果时,执行结果以该字符集进行编码。
character_set_server:MySQL服务实例字符集。
character_set_system:元数据(字段名、表名、数据库名等)的字符集,默认值为utf8。
2、查看当前show:SHOW COLLATION;
mysql> SHOW COLLATION;
+--------------------------+----------+-----+---------+---------