mysql 备忘录

这篇博客详细介绍了如何操作MySQL,包括登录服务器、创建数据库、管理表、插入和查询数据、更新和删除数据,以及用户权限管理和事务系统。内容涵盖常用SQL命令,如create database, create table, select, update, delete等,是MySQL入门者的实用备忘录。" 126077073,8230004,LRU缓存实现 - LeetCode 146题解析,"['数据结构', '算法', 'LeetCode', '链表']
摘要由CSDN通过智能技术生成

目录

1.登录 MySQL 服务器:可以使用命令行工具 (Windows 上是 mysql.exe;Linux 和 macOS 上是命令行终端) 来连接到 MySQL 服务器。例如,在命令行中键入以下命令:

2.创建新的 MySQL 数据库:可以使用 "create database" 命令来创建新的 MySQL 数据库。例如:

3.创建表和字段:可以使用 "create table" 命令来创建新的 MySQL 表,并使用 "alter table" 命令来添加、修改或删除表字段。例如:

4.插入数据:可以使用 "insert into" 命令将新数据插入到 MySQL 表中。例如:

5.查询数据:可以使用 "select" 命令查询 MySQL 表中的数据。例如:

5.1有关于查询的关键字说明

6.更新数据:可以使用 "update" 命令更新 MySQL 表中的数据。例如:

7.删除数据:可以使用 "delete from" 命令从 MySQL 表中删除数据。例如:

8.关闭 MySQL 连接:可以使用 "quit" 命令关闭 MySQL 连接并退出命令行工具。或者,可以使用 "CTRL + C" 组合键来中断当前的 MySQL 命令行操作。

9.补充查询数据分组

10.用户权限管理

 11.联表查询

12.事务系统


1.登录 MySQL 服务器:可以使用命令行工具 (Windows 上是 mysql.exe;Linux 和 macOS 上是命令行终端) 来连接到 MySQL 服务器。例如,在命令行中键入以下命令:

mysql -u<username> -p<password> -h<server_host>

其中, -u后写Mysql用户名, -p后写Mysql密码, -h后写 MySQL 服务器主机名或 IP 地址(非服务器端默认不写)。

2.创建新的 MySQL 数据库:可以使用 "create database" 命令来创建新的 MySQL 数据库。例如:

create database mydatabase;

这将在 MySQL 服务器中创建一个名为 "mydatabase" 的新数据库。您还可以使用其他选项来指定字符集、排序规则等设置。

3.创建表和字段:可以使用 "create table" 命令来创建新的 MySQL 表,并使用 "alter table" 命令来添加、修改或删除表字段。例如:

 

复制代码

create table users ( id int primary key, name varchar(50), email varchar(255) ); 
alter table users add column age int;

           这将在 MySQL 数据库中创建一个名为 "users" 的新表

           该表包含三个列(id、name、email),其中 id 列是主键。                                              然后,通过 "alter table" 命令将另一个名为 "age" 的新列添加到表中

4.插入数据:可以使用 "insert into" 命令将新数据插入到 MySQL 表中。例如:

 

复制代码

insert into users (id, name, email, age) values (1, 'John Smith', 'john@example.com', 30);

这将在 "users" 表中插入一行新记录,包含指定的 id、name、email 和 age 值。

5.查询数据:可以使用 "select" 命令查询 MySQL 表中的数据。例如:

select * from users where age > 25;

这将返回 "users" 表中所有年龄大于 25 的记录。您还可以使用其他选项来指定要返回的列、排序方式等。

5.1有关于查询的关键字说明


  1. SELECT:用于从数据库中选择数据,可以使用该命令来指定要选择的列和表。例如:

     
    select first_name, last_name from customers;

    这将选择 "customers" 表中的姓氏和名字列。

  2. FROM:用于指定要查询的数据表的名称。例如:

    select * from customers;

    这将返回 "customers" 表中的所有记录。

  3. WHERE:用于指定过滤条件,以便只返回满足这些条件的行。例如:

    select * from customers where country = 'USA';

    这将仅返回位于美国的客户。

  4. ORDER BY:用于按照指定的列对结果集排序输出。可以使用 ASC 或 DESC 关键字指定升序或降序排序,默认为升序。例如:

    select * from customers order by last_name asc;

    这将按照姓氏的字母顺序升序排序所有客户信息。

  5. GROUP BY:用于将结果集分组,并基于每个分组执行聚合函数(如 COUNT、SUM、AVG、MAX 和 MIN)。例如:

    select country, count(*) as total_customers 
    from customers group by country;
    

    这将按照不同国家进行分组,并返回每个国家的客户数。

  6. HAVING:和 WHERE 类似,但针对 GROUP BY 分组后的结果进行过滤,以筛选符合指定条件的分组。例如:

    select country, count(*) as total_customers 
    from customers 
    group by country 
    having total_customers > 10;
    
    这将返回客户数大于 10 的国家名称及其客户数量。
  7. DISTINCT:用于返回不同的值,即去重操作。可以使用该命令在 结果集 中消除重复数据。例如:

    select distinct country from customers;

    这将返回所有不同的国家名称。

6.更新数据:可以使用 "update" 命令更新 MySQL 表中的数据。例如:

 

复制代码

update users set age = 40 where id = 1;

这将将 "users" 表中 id 为 1 的记录的 age 列更新为 40。

7.删除数据:可以使用 "delete from" 命令从 MySQL 表中删除数据。例如:

 

复制代码

delete from users where age > 40;

这将从 "users" 表中删除所有年龄大于 40 的记录。8.

8.关闭 MySQL 连接:可以使用 "quit" 命令关闭 MySQL 连接并退出命令行工具。或者,可以使用 "CTRL + C" 组合键来中断当前的 MySQL 命令行操作。

9.补充查询数据分组

  1. 聚合函数:聚合函数用于计算数据表中的汇总信息,如平均值、最大值、最小值、总和等。常见的聚合函数包括 COUNT、SUM、AVG、MAX 和 MIN。例如:

    select count(*) as total_customers from customers;

    这将返回 "customers" 表中所有记录的数量。

  2. 分组查询:分组查询用于按照指定的列对结果集进行分组,并基于每个组执行聚合函数。可以使用 "GROUP BY" 子句来实现分组查询。例如:

    select country, count(*) as total_customers from customers group by country;

    这将返回每个国家的客户数。

  3. 排序查询:排序查询用于按照指定列排序结果集。可以使用 "ORDER BY" 子句指定排序顺序(默认为升序)。例如:

    select * from customers order by last_name desc, first_name asc;

    这将返回按照姓氏降序排序、然后按照名字升序排序的所有客户信息。

  4. 子查询:子查询是指在 SELECT、INSERT、UPDATE 或 DELETE 语句内部使用的 SELECT 语句。它们可用于检索与其他查询结果相关的数据。例如:

    select * 
    from orders
     where customer_id in (select id from customers where country = 'USA');
    
    这将返回在所有位于美国的客户所下的订单。
  5. 连接查询:连接查询用于联合多个表中的数据。可以使用 INNER JOIN、LEFT JOIN、RIGHT JOIN 或 FULL OUTER JOIN 命令来执行不同类型的连接查询。例如:

    select * from orders join customers on orders.customer_id = customers.id;

    这将返回 "orders" 和 "customers" 两个表中所有 customer_id 相等的记录,其中包括订单信息和客户信息。

10.用户权限管理

  1. 创建用户:可以使用 "CREATE USER" 命令创建 MySQL 用户。例如:

    create user 'myuser'@'localhost' identified by 'mypassword';
    

    这将创建一个名为 "myuser" 的新用户,并为该用户设置密码为 "mypassword"。

  2. 授予权限:可以使用 "GRANT" 命令授予 MySQL 用户特定权限。例如:

    grant select, insert, update on mydatabase.* to 'myuser'@'localhost';

    这将授予名为 "myuser" 的用户对 "mydatabase" 数据库中的所有表执行 SELECT、INSERT 和 UPDATE 操作的权限。

  3. 撤销权限:可以使用 "REVOKE" 命令撤销 MySQL 用户的特定权限。例如:

    revoke select on mydatabase.* from 'myuser'@'localhost';

    这将从名为 "myuser" 的用户中撤销在 "mydatabase" 数据库中执行 SELECT 操作的权限。

  4. 修改用户信息:可以使用 "ALTER USER" 命令修改 MySQL 用户的密码或其他属性。例如:

    alter user 'myuser'@'localhost' identified by 'newpassword';
    

    这将更改名为 "myuser" 的用户的密码为 "newpassword"。

  5. 删除用户:可以使用 "DROP USER" 命令删除 MySQL 用户。例如:

    drop user 'myuser'@'localhost';

    这将删除名为 "myuser" 的用户。

  6. 查看权限:可以使用 "SHOW GRANTS" 命令查看 MySQL 用户的当前权限。例如:

    show grants for 'myuser'@'localhost';

    这将显示名为 "myuser" 的用户在 MySQL 数据库中具有哪些权限。

  7. 查看所有用户和权限:可以查询 "mysql.user" 表来查看所有 MySQL 用户和他们的权限。例如:

    select user, host, authentication_string from mysql.user;

    这将显示所有 MySQL 用户及其主机、密码等信息。

注意:为了保证 MySQL 数据库的安全性,应该严格控制用户的权限,并不断更新密码并删除不必要的用户。

 11.联表查询

  1. 内连接:内连接是最基本的连接方式,它只返回两个表都满足连接条件的记录。可以使用 "JOIN" 或 "INNER JOIN" 命令来执行内连接。例如:

    select * from orders join customers on orders.customer_id = customers.id;

    这将返回 "orders" 和 "customers" 两个表中所有 customer_id 相等的记录,其中包括订单信息和客户信息。

  2. 左连接:左连接返回左表 (第一个表) 的所有记录,以及右表 (第二个表) 中与左表记录匹配的记录。对于没有匹配记录的左表记录,右表相关列将显示 NULL 值。可以使用 "LEFT JOIN" 命令来执行左连接(LEFT OUTER JOIN 也是同样的效果)。例如:

    select * from customers left join orders on customers.id = orders.customer_id;

    这将返回 "customers" 表中的所有记录,以及与之匹配的 "orders" 表中的记录。如果某个客户没有任何订单,则相应的订单信息将显示为 NULL。

  3. 右连接:右连接返回右表 (第二个表) 的所有记录,以及左表 (第一个表) 中与右表记录匹配的记录。对于没有匹配记录的右表记录,左表相关列将显示 NULL 值。可以使用 "RIGHT JOIN" 命令来执行右连接(RIGHT OUTER JOIN 也是同样的效果)。例如:

    select * from customers right join orders on customers.id = orders.customer_id;

    这将返回 "orders" 表中的所有记录,以及与之匹配的 "customers" 表中的记录。如果某个订单没有对应的客户信息,则相应的客户信息将显示为 NULL。

  4. 全连接:全连接返回两个表中所有记录,无论是否存在匹配记录。如果没有匹配记录,则相应的列将显示 NULL 值。可以使用 "FULL JOIN" 或 "FULL OUTER JOIN" 命令来执行全连接。但是,MySQL 并不支持这种语法。您可以使用 UNION 和 LEFT/RIGHT JOIN 的组合来实现全连接,如下所示:

    select * 
    from customers 
    left join orders on customers.id = orders.customer_id 
    union 
    select * 
    from customers 
    right join orders on customers.id = orders.customer_id 
    where customers.id is null or orders.order_id is null;
    
    这将先执行左连接和右连接,并通过 UNION 将结果组合在一起。然后,它使用 WHERE 子句筛选出那些没有匹配记录的行,并将其相关列设置为 NULL。

注意:连接查询可以帮助我们从多个表中检索数据,并进行更复杂的查询操作。但是,在使用连接查询时应特别小心,因为它们可能会增加查询的复杂性和时间成本。

12.事务系统

  1. 事务:事务是指将一组操作作为单个逻辑单元执行的过程。在关系型数据库中,事务可以通过使用 START TRANSACTION、COMMIT 和 ROLLBACK 命令来实现。例如:

    start transaction;
    
    insert into customers (first_name, last_name, email) 
    values ('John', 'Doe', 'john.doe@email.com'); 
    
    insert into orders (customer_id, order_date)
    values (last_insert_id(), now()); 
    
    commit;
    
    这里我们创建了一个包括两个 INSERT 语句的事务,第一条语句插入了一个新客户,第二条语句插入了该客户的订单记录。如果两条语句都成功执行,则提交事务。
  2. 原子性:原子性是指事务被视为独立的工作单元,并且要么被执行完全,要么被完全取消。如果事务中的任何一部分失败,则整个事务都会被回滚到起始点。例如:

    start transaction; 
    
    
    insert into customers (first_name, last_name, email) 
    values ('Jane', 'Smith', 'jane.smith@email.com'); 
    
    insert into orders (customer_id, order_date) 
    values (last_insert_id(), 'not a valid date'); 
    
    
    rollback;
    
    因为第二条语句中的日期值无效,事务将回滚到事务开始前的状态。这意味着前面插入的客户记录也会被删除。
  3. 一致性:一致性是指事务执行过程中数据库始终保持正确的状态。事务不应该破坏数据表之间的完整性约束。例如:

    start transaction; 
    
    insert into customers (first_name, last_name, email) 
    values ('John', '', 'john.doe@email.com'); 
    
    insert into orders (customer_id, order_date) 
    values (last_insert_id(), now()); 
    
    commit;
    
    因为在第一条语句中我们未提供姓氏,所以该操作将违反了 "customers" 表中的 NOT NULL 约束。如果我们提交了这个事务,则会导致数据表不再处于一致状态,因此事务将会回滚。
  4. 隔离性:隔离性是指在多个事务同时执行时,每个事务都应该感知到其他事务对数据库所做的更改。在关系型数据库中,可以使用锁定机制来实现事务的隔离性。例如:

    start transaction; 
    
    select * 
    from orders
    where customer_id = 1 for update;  
    
    
    -- 这里进行一些更新操作 
    commit;

    在上面的代码中,我们使用 "for update" 子句锁定了所有满足条件的行。这样,就可以防止其他事务在此过程中更改或删除这些行。

  5. 持久性:持久性是指事务完成后,其更改应该永久保存,并且不能被回滚。 可以使用 COMMIT 命令将更改保存在数据库中。例如:

    start transaction; 
    
    insert into customers (first_name, last_name, email) 
    values ('John', 'Doe', 'john.doe@email.com'); 
    
    insert into orders (customer_id, order_date) 
    values (last_insert_id(), now()); 
    
    commit;
    
    这些 INSERT 语句成功执行后,数据将被永久保存。

注意:理解事务的概念和如何使用 SQL 来管理它们非常重要。合理地使用事务可以确保数据表之间的关系得到维护,同时避免数据损坏和错误插入的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海424

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值