mysql 学习

mysql 学习

版本: mysql Ver 8.0.44

centos7 安装

# 1. 如果之前安装过,可以先卸载 mariadb(可选)
sudo yum remove mariadb-libs -y

# 2. 添加官方 repo
sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm

# 3. 安装
sudo yum install mysql-server -y

# 4. 启动
sudo systemctl start mysqld && sudo systemctl enable mysqld

# 5. 获取临时密码
sudo grep 'temporary password' /var/log/mysqld.log

# 6. 使用MySQL自带的初始化密码命令进行初始化
sudo mysql_secure_installation

安全初始化按提示操作:
1、输入 #临时密码要求修改 root 密码 → 输入强密码(MySQL 8 默认要求大小写+数字+特殊字符)
2、Remove anonymous users? → Y
3、Disallow root login remotely? → Y(除非你需要远程 root)
4、Remove test database? → Y
5、Reload privilege tables? → Y

mysql 密码管理

一、修改root密码并且创建admin日常管理账号

##修改mysql root密码的的方法
1、mysql_secure_installation   使用MySQL自带的初始化密码命令进行初始化
2、mysqladmin -u root -p "Po{>9G^7"   使用mysqladmin命令修改密码
3、先登录mysql 再执行sql语句更改
  grant all on *.* to root@localhost identified by 'Po{>9G^7';
  ##sql语句说明:
  1、grant 是sql语句通过指定权限类型、操作对象和授权对象构建授权关系,支持列级别权限控制,允许向用户、用户组或角色赋予针对数据库实体(如表、视图、序列)的特定操作权限
  2、all 表示所有权限,包括SELECT、INSERT、UPDATE、DELETE等基本权限
  3、identified 是 SQL 中用于指定用户密码的关键字,常见于用户创建或修改语句中,核心用法:CREATE USER username IDENTIFIED BY password
  4、'localhost' 指定该用户从本地机器连接(如果你想让这个用户能从任何主机连接,可以使用'%')
4、 先登录mysql 再执行sql 语句更改:
  alter user root@localhost identified by 'Po{>9G^7';
  ##sql语句说明:
  1、alter 是结构化查询语言(SQL)中用于修改数据库表结构的命令,属于数据定义语言(DDL)的组成部分,此处ALTER USER语句来修改用户密码
  
#登录mysql
mysql -u root -p

mysql 命令常用的参数
————————————————
-u 后面接用户名称
-p 后面接用户密码
-h 后面接mysql的IP
-P 后面接mysql的端口,默认3306
-S socket文件
-e 免交互执行命令
< 导入SQL脚本
————————————————
创建一个用于日常管理的用户: admin

-- 登录 MySQL 后执行
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongPass!123';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
 ## *.* 表示数据库名称和表名称,*表示所有的库和表都可以访问
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'admin'@'%';  ##查看admin当前的授权

二、mysql 密码破解方法:
如果忘记mysql root登录密码或者别其他人员修改掉数据库权限后、要紧急修改密码,就需要破解mysql 密码,如下是具体方法:
1、停止mysql 服务,并以跳过权限方式启动:

systemctl stop mysqld
###修改mysql 配置文件 /etc/my.cnf,并添加skip-grant-tables
[mysqld]
skip-grant-tables
###重启mysql服务
systemctl start mysqld
##再次登录mysql 这次不需要再输入root密码
mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.44 MySQL Community Server - GPL

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2、修改root密码:
mysql的用户及密码认证在mysql库的user表里,所以先进入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> SELECT user FROM user;
+------------------+
| user             |
+------------------+
| admin            |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
5 rows in set (0.00 sec)

mysql> SELECT DATABASE(); ##查看当前所在数据库是哪个
+------------+
| DATABASE() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)

mysql> FLUSH PRIVILEGES;    ##刷新用户权限
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER USER "root"@"localhost" IDENTIFIED BY "xxxxx";   ###重置root密码
Query OK, 0 rows affected (0.00 sec)

mysql> EXIT;

3、修改配置文件改成正常方式启动

[root@test ~] vim  /etc/my.cnf
[mysqld]
###skip-grant-tables
##重启启动mysql
[root@test ~] systemctl restart mysqld

[root@test ~] mysql -u root   ##再次登录必须输入密码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

创建数据库 :现在的数据库是mysql自带的,我们需要创建一个字用于测试的数据库,方便后面学习:

  1. 创建数据库的基础语法:
CREATE {
   
   DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [CHARACTER SET charset_name]
    [COLLATE collation_name]
    [ENCRYPTION [=] {
   
   'Y' | 'N'}];

说明:DATABASE 和 SCHEMA 是同义词,效果完全一样;创建数据库的所有选项都是可选的,但强烈建议显式指定字符集和排序规则
各选项详解:
1、 IF NOT EXISTS : 如果数据库已存在,不报错,静默跳过,推荐在脚本中始终使用,避免重复执行失败
2、CHARACTER:指定数据库的默认字符集,推荐使用:utf8mb4
3、COLLATE: 指定数据库的默认排序规则,会影响字符串比较、排序行为。必须与字符集兼容,utf8mb4 对应 utf8mb4_0900_ai_ci
常用组合
4、ENCRYPTION:启用或禁用InnoDB 表空间加密(需企业版或社区版 8.0+ 支持);选项: ‘Y’:启用加密(默认继承实例设置)
;‘N’:禁用加密; 前提:必须配置好 keyring 插件(如 keyring_file 或 keyring_okv)否则会报错
示例:

mysql> CREATE DATABASE IF NOT EXISTS  test_mysql CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_mysql         |
+--------------------+
5 rows in set (0.01 sec)

mysql> SELECT DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE   SCHEMA_NAME='test_mysql';  #验证创建结果
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_0900_ai_ci     |
+----------------------------+------------------------+
1 row in set (0.01 sec)

SQL 语法说明
一、sql语法结构:

  1. 子句: 是语句和查询的组成部分,
  2. 表达式:可以产生任何标量值,或由列和行的数据库表
  3. 判断条件:给需要评估的 SQL 三值逻辑(3VL)(true/false/unknown)或布尔真值指定条件,并限制语句和查询的效果,或改变程序流程。
  4. 查询:基于特定条件检索数据。这是 SQL 的一个重要组成部分
  5. 语句:可以持久地影响纲要和数据,也可以控制数据库事务、程序流程、连接、会话或诊断

二、sql语法要点

  1. SQL 语句不区分大小写,例如:SELECT 与 select 、Select 是相同的。但是数据库表名、列名和值是否区分,依赖于具体的 DBMS 以及配置,建议大写数据库表名、列名和值方便区分和增加sql语句可读性
  2. SQL 语句结束必须以分号(;)分隔
  3. SQL 语句可以写成一行,也可以分写为多行
-- 一行 SQL 语句
UPDATE user SET username='robot', password='robot' WHERE username = 'root';
 
-- 多行 SQL 语句
UPDATE user
SET username='robot', password='robot'
WHERE username = 'root';
  1. 支持三种注释
## 注释1
-- 注释2
/* 注释3 */

三、sql语句分类

  1. 数据定义语言(DDL):集中负责数据结构定义与数据库对象定义的语言,DDL 的主要功能是定义数据库对象。
    DDL 的核心指令是
    CREATE:用于创建新的数据库对象,比如表、视图、索引等
    表:(table) 是数据库中实际存储数据的结构,由行和列组成,数据以物理形式存储在磁盘上,支持增删改查操作
    视图:(view)基于一个或多个表的虚拟表,由查询语句动态生成,不存储实际数据,用于简化复杂查询,提高安全性
    索引:(index) 是表中一列或多列的排序结构,用于加速数据检索,自动维护
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(50),
    salary DECIMAL(10, 2)
);

CREATE VIEW employee_view AS
SELECT name, position FROM employees;

ALTER:用于修改已存在的数据库对象。这可以包括添加、删除或修改列,添加或删除索引,或更改表的其他属性,以及修改密码

---添加hire_date 列到employees表
ALTER TABLE employees ADD hire_date DATE;
---删除hire_date 列到employees表
ALTER TABLE employees DROP COLUMN hire_date;
---修改列的类型
ALTER TABLE employees MODIFY COLUMN salary DECIMAL(12, 2);

---添加主键约束
ALTER TABLE employees ADD PRIMARY KEY (id);

mysql> use test_mysql;
Database changed
mysql> CREATE TABLE employees(id INT PRIMARY KEY,name VARCHAR(100),position VARCHAR(50),salary DECIMAL(10, 2));
Query OK, 0 rows affected (0.03 sec)

mysql> CREATE VIEW employee_view AS SELECT name,position FROM employees;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------------+
| Tables_in_test_mysql |
+----------------------+
| employee_view        |
| employees            |
+----------------------+
2 rows in set (0.00 sec)

mysql>  ALTER TABLE employees ADD hire_date DATE;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW  COLUMNS  FROM employees;
+-----------+---------------+------+-----+---------+-------+
| Field     | Type          | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| id        | int           | NO   | PRI | NULL    |       |
| name      | varchar(100)  | YES  |     | NULL    |       |
| position  | varchar(50)   | YES  |     | NULL    |       |
| salary    | decimal(10,2) | YES  |     | NULL    |       |
| hire_date | date          | YES  |     | NULL    |       |
+-----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> DESC employees;
+-----------+---------------+------+-----+---------+-------+
| Field     | Type          | Null | Key | Default | Extra |
+-----------+---------------+------+-----+---------+-------+
| id        | int           | NO   | PRI | NULL    |       |
| name      | varchar(100)  | YES  |     | NULL    |       |
| position  | varchar(50)   | YES  |     | NULL    |       |
| salary    | decimal(10,2) | YES  |     | NULL    |       |
| hire_date | date          | YES  |     | NULL    |       |
+-----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> ALTER TABLE employees DROP  COLUMN hire_date;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC employees;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| id       | int           | NO   | PRI | NULL    |       |
| name     | varchar(100)  | YES  |     | NULL    |       |
| position | varchar(50)   | YES  |     | NULL    |       |
| salary   | decimal(10,2) | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> ALTER TABLE employees MODIFY COLUMN salary decimal(12,2);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESC employees;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| id       | int           | NO   | PRI | NULL    |       |
| name     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值