Linux下使用mysql

安装

源码安装和yum安装。
可以看教程:菜鸟教程:mysql安装

使用

日常操作命令

启停服务

1.查看进程状态
ps -ef |grep mysql

2.mysql服务启停
sudo systemctl start mysql #启动
sudo systemctl stop mysql #关闭
sudo systemctl restart mysql #重启

sudo systemctl status mysql #检查mysql服务状态

用户设置

参考:Mysql创建用户与授权

1.以root用户连接mysql服务器
mysql -u root -p 
-- 如果没有设置的话需要直接找到bin目录下去启动
-- 退出 mysql> 命令提示窗口可以使用 exit 命令

2.添加mysql用户
-- 严格模式下是无法通过直接在user表插入数据添加用户的,当然,这种方式很不安全。
-- 可以通过先创建用户然后授权的方式创建。
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
-- username:你将创建的用户名
-- host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
-- password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

3.授权
GRANT privileges ON databasename.tablename TO 'username'@'host'-- privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
-- databasename:数据库名
-- tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
#用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

4.设置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
-- 如果是当前登陆用户用:SET PASSWORD = PASSWORD("newpassword");

5.撤销用户权限
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
-- 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%',则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作。相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select权限。
-- 具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看。

6.删除用户
DROP USER 'username'@'host';

7.刷新权限相关表
flush privileges;
-- mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。

管理mysql的常用命令

1.列出mysql数据库列表
SHOW DATABASES;

2.选择要操作的数据库,使用该命令后,所有mysql命令都只针对该数据库。
USE database_name;

3.显示指定数据库里的所有表
SHOW TABLES;

4.显示数据表的属性:类型、主键、默认值等等
SHOW COLUMNS FROM table_name;

5.显示数据表的索引信息
SHOW INDEX FROM table_name;

6.输出Mysql数据库管理系统的性能及统计信息
SHOW TABLE STATUS FROM table_name;

创建和删除数据库

1.创建数据库
CREATE DATABASE [IF NOT EXISTS] database_name
  [CHARACTER SET charset_name]
  [COLLATE collation_name];
# IF NOT EXISTS避免数据库已存在报错

2.删除数据库
DROP DATABASE [IF EXISTS] <database_name>;
-- 注意:在执行删除数据库操作前,请确保你确实想要删除数据库及其所有数据,因为该操作是不可逆的。为了避免误操作,通常建议在执行删除之前备份数据库。
-- 也可以使用 MySQL mysqladmin 命令在终端来执行删除命令:
mysqladmin -u your_username -p drop your_database # your_username 是 MySQL 用户名,your_database 是要删除的数据库的名称

创建和删除数据表

MySQL 数据类型
MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

-- 创建数据表需要包括:表名、表字段名、定义每个表字段的数据类型。
-- 创建一个用户表 users:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    birthdate DATE,
    is_active BOOLEAN DEFAULT TRUE
);

-- 创建一个使用 utf8mb4 字符集和 utf8mb4_general_ci 排序规则的表:
CREATE TABLE mytable (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

-- 在 RUNOOB 数据库中创建数据表 runoob_tbl:
CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 注意:MySQL 命令终止符为分号 ; 
-- 注意: -> 是换行符标识

-- MySQL中删除数据表是非常容易操作的,但是在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
DROP TABLE [IF EXISTS] table_name;
-- 也可以使用 MySQL mysqladmin 命令在终端来执行删除命令:
mysqladmin -u your_username -p drop your_table

插入数据

-- 插入了一行数据到名为 users 的表中:
INSERT INTO users (username, email, birthdate, is_active)
VALUES ('test', 'test@runoob.com', '1990-01-01', true);

-- 如果你要插入所有列的数据,可以省略列名:
INSERT INTO users
VALUES (NULL,'test', 'test@runoob.com', '1990-01-01', true);
-- NULL 是用于自增长列的占位符,表示系统将为 id 列生成一个唯一的值。
--尝试
mysql> create database test1;
Query OK, 1 row affected (0.52 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test1              |
+--------------------+
4 rows in set (0.00 sec)

mysql> use test1;
Database changed
mysql> create table students(
    -> id INT AUTO_INCREMENT PRIMARY KEY,
    -> stu_name VARCHAR(50) NOT NULL,
    -> score FLOAT DEFAULT 0,
    -> pass BOOLEAN DEFAULT FALSE
    -> );
Query OK, 0 rows affected (0.87 sec)

mysql> insert into students
    -> values (null,'tom',72.8,true);
Query OK, 1 row affected (0.30 sec)

mysql> select * from students;
+----+----------+-------+------+
| id | stu_name | score | pass |
+----+----------+-------+------+
|  1 | tom      |  72.8 |    1 |
+----+----------+-------+------+
1 row in set (0.00 sec)

查询数据

和之前学习的mysql workbench差不多。

-- 选择所有列的所有行
SELECT * FROM users;

-- 选择特定列的所有行
SELECT username, email FROM users;

-- 添加 WHERE 子句,选择满足条件的行
SELECT * FROM users WHERE is_active = TRUE;

-- 添加 ORDER BY 子句,按照某列的升序排序
SELECT * FROM users ORDER BY birthdate;

-- 添加 ORDER BY 子句,按照某列的降序排序
SELECT * FROM users ORDER BY birthdate DESC;

-- 添加 LIMIT 子句,限制返回的行数
SELECT * FROM users LIMIT 10;

修改(更新)数据

如果需要修改或更新 MySQL 中的数据,可以使用 UPDATE 命令来操作。
通用语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
-- table_name 是你要更新数据的表的名称。
-- column1, column2, ... 是你要更新的列的名称。
-- value1, value2, ... 是新的值,用于替换旧的值。
-- WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。

注意:如果省略 WHERE 子句,将更新表中的所有行。很多时候这不是我们想要看到的,所以不要忘了使用 WHERE 限制更新条件。
下面是几个案例:

-- 更新单个列的值:
UPDATE employees
SET salary = 60000
WHERE employee_id = 101;

-- 更新多个列的值:
UPDATE orders
SET status = 'Shipped', ship_date = '2023-03-01'
WHERE order_id = 1001;

-- 使用表达式更新值:
UPDATE products
SET price = price * 1.1
WHERE category = 'Electronics';

-- 更新所有值
UPDATE students
SET status = 'Graduated';

-- 更新使用子查询的值:
UPDATE customers
SET total_purchases = (
    SELECT SUM(amount)
    FROM orders
    WHERE orders.customer_id = customers.customer_id
)
WHERE customer_type = 'Premium';

注意: 在使用 UPDATE 语句时,请确保你提供了足够的条件来确保只有你想要更新的行被修改。如果不提供 WHERE 子句,将更新表中的所有行,可能导致不可预测的结果。

删除记录

可以使用 DELETE FROM 命令来删除 MySQL 数据表中的记录。
通用语法如下:

DELETE FROM table_name
WHERE condition;
-- table_name 是你要更新数据的表的名称。
-- WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。

案例:

-- 删除符合条件的行:
DELETE FROM students
WHERE graduation_year = 2021;

-- 删除所有行:
-- SQL 语句删除了 orders 表中的所有记录,但表结构保持不变。
DELETE FROM orders;

-- 使用子查询删除符合条件的行:
DELETE FROM customers
WHERE customer_id IN (
    SELECT customer_id
    FROM orders
    WHERE order_date < '2023-01-01'
);

注意: 在使用 DELETE 语句时,请确保你提供了足够的条件来确保只有你想要删除的行被删除。如果不提供 WHERE 子句,将删除表中的所有行,可能导致不可预测的结果。

posted @   ganwong99  阅读(102)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示