MYSQL学习笔记-打卡1

Task 1(3天)

1.1 - MySQL 软件安装及数据库基础

学习内容:
1.软件安装及服务器设置。http://www.runoob.com/mysql/mysql-install.html
2.使用图形界面软件 Navicat for SQL
3数据库基础知识
a.数据库定义
b.关系型数据库
c二维表
d.行
e.列
f.主键
g.外键
4.MySQL 数据库管理系统
a.数据库
b.数据表
c.视图
d.存储过程
参考资料
1.[SQL 必知必会] https://u18036366.pipipan.com/fs/18036366-300877816
2.[MySQL 教程] http://www.runoob.com/smysql/mysql-tutorial.html
额外的参考资料:
1.虚拟机安装Linux https://blog.csdn.net/yang5726685/article/details/78635388
2.Windows 10下 MySQL https://cloud.tencent.com/developer/article/1010608
3.Windows 安装 MySQL 常见问题 https://blog.csdn.net/qq_40942329/article/details/79125366

1.2 - MySQL 基础 (一)查询语句

1.导入示例数据库,教程 https://www.yiibai.com/mysql/how-to-load-sample-database-into-mysql-database-server.html
2.SQL 是什么?MySQL 是什么?
查询语句 SELECT FROM
a.语句解释
b.去重语句
c.前 N 个语句
3.筛选语句 WHERE
a.语句解释
b.运算符
4.分组语句 GROUP BY
a.语句解释
b.HAVING 子句
5.排序语句 ORDER BY
a.语句解释
b.正序、逆序
6.SQL 注释
7.SQL 代码规范
a.[SQL 编程格式的优化建议] https://zhuanlan.zhihu.com/p/27466166
b.[SQL Style Guide] https://www.sqlstyle.guide/

  • 以下操作均在Navicat for Mysql 中运行
  • 安装和运行过程中无明显问题,在mysql中新建了一个数据库test用于任务打卡

项目一:查找重复的电子邮箱(难度:简单)

创建 email 表,并插入如下三行数据
±—±--------+
| Id | Email |
±—±--------+
| 1 | a@b.com |
| 2 | c@d.com |
| 3 | a@b.com |
±—±--------+

编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱。
根据以上输入你的查询应返回以下结果:

±--------+
| Email |
±--------+
| a@b.com |
±--------+
说明:所有电子邮箱都是小写字母。

–创建表

CREATE TABLE email
(ID INT NOT NULL PRIMARY KEY,
 Email VARCHAR(255) NOT NULL);

–插入数据

INSERT INTO email VALUES('1','a@b.com');
INSERT INTO email VALUES('2','c@d.com');
INSERT INTO email VALUES('3','a@b.com');

–代码(编写一个 SQL 查询,查找 email 表中所有重复的电子邮箱)

SELECT Email FROM email
GROUP BY Email 
HAVING COUNT(Email) > 1;

–结果
在这里插入图片描述

项目二:查找大国(难度:简单)

创建如下 World 表

±-----------±---------±--------±-------------±--------------+
| name | continent| area | population | gdp |
±-----------±---------±--------±-------------±--------------+
| Afghanistan| Asia | 652230 | 25500100 | 20343000 |
| Albania | Europe | 28748 | 2831741 | 12960000 |
| Algeria | Africa | 2381741 | 37100000 | 188681000 |
| Andorra | Europe | 468 | 78115 | 3712000 |
| Angola | Africa | 1246700 | 20609294 | 100990000 |
±-----------±---------±--------±-------------±--------------+

如果一个国家的面积超过 300 万平方公里,或者(人口超过 2500 万并且 gdp 超过 2000 万),那么这个国家就是大国家。
编写一个 SQL 查询,输出表中所有大国家的名称、人口和面积。

例如,根据上表,我们应该输出:

±-------------±------------±-------------+
| name | population | area |
±-------------±------------±-------------+
| Afghanistan | 25500100 | 652230 |
| Algeria | 37100000 | 2381741 |
±-------------±------------±-------------+

–创建表

CREATE TABLE World
(name VARCHAR(50) NOT NULL,
continent VARCHAR(50) NOT NULL,
area INT NOT NULL,
population INT NOT NULL,
gdp INT NOT NULL
);

–插入数据

INSERT INTO World
  VALUES('Afghanistan','Asia',652230,25500100,20343000);
INSERT INTO World 
  VALUES('Albania','Europe',28748,2831741,12960000);
INSERT INTO World 
  VALUES('Algeria','Africa',2381741,37100000,188681000);
INSERT INTO World
  VALUES('Andorra','Europe',468,78115,3712000);
INSERT INTO World
  VALUES('Angola','Africa',1246700,20609294,100990000);

–代码(编写一个 SQL 查询,输出表中所有大国家的名称、人口和面积。)

SELECT name, population, area 
FROM world
WHERE area > 3000000 
OR (population > 25000000 AND gdp > 20000000)

–结果
在这里插入图片描述

### ARTS打卡 Java 学习或项目进展 #### 一、Algorithm 算法练习 在算法方面,最近研究了回文验证问题中的双指针方法。通过实现 `validPalindrome` 函数来判断给定字符串是否可以通过删除最多一个字符形成回文串[^2]。 ```cpp class Solution { public: bool validPalindrome(string s) { int i = 0; int j = s.size() - 1; int diffCount = 0; while (i < j) { if (s[i] == s[j]) { ++i; --j; } else { if (diffCount > 0) return false; // 尝试移除左边或右边的一个字符并继续比较剩余部分 string sub1 = s.substr(i + 1, j - i); string sub2 = s.substr(i, j - i); return is_palindrome(sub1) || is_palindrome(sub2); } } return true; // 辅助函数用于检测子串是否为回文 auto is_palindrome = [](const std::string& str){ int l = 0, r = str.length() - 1; while(l<r && str[l]==str[r]){ ++l;--r; } return l>=r; }; } }; ``` 此版本改进了原始逻辑,在遇到不匹配的情况时不再直接修改原字符串而是创建两个新的子串分别测试其合法性,从而提高了代码可读性和效率。 #### Review 技术文章阅读心得 关于数据库操作的学习笔记中提到 MySQL 支持四种不同的事务隔离级别:未提交读(Read Uncommitted),已提交读(Read Committed),可重复读(Repeatable Read),序列化(Serializable)[^1]。每种级别的特性决定了并发环境下数据的一致性程度以及性能表现之间的权衡关系。 另外还探讨了两种常见的锁机制——悲观锁(Pessimistic Locking) 和乐观锁(Optimistic Locking) 的原理及其适用场景: - **悲观锁** 假设冲突不可避免,因此总是先锁定资源再执行更新动作; - **乐观锁** 则认为大多数情况下不会发生竞争,仅当实际发生写入时才检查是否有其他更改影响到目标对象。 这两种策略各有优劣,具体选择取决于应用的具体需求和环境特点。 #### Tip 技巧总结 对于上述提及的内容,建议开发者们理解各自系统的默认配置,并根据业务逻辑调整合适的参数设置;同时也要熟悉如何利用编程语言提供的工具去处理并发控制问题,比如 Java 中可以借助框架如 Spring 提供的支持简化分布式事务管理过程。 #### Share 经验交流 分享过程中发现很多同学对多线程下的共享变量可见性和原子性的概念存在误解。实际上,Java 内存模型规定了 volatile 关键字能保证变量的即时可见性但不具备原子性保障,而 synchronized 或者 ReentrantLock 可以提供更强大的同步功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值