iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql刷题(不定时更新)
  • 768
分享到

mysql刷题(不定时更新)

mysql刷题(不定时更新) 2017-12-21 05:12:31 768人浏览 猪猪侠
摘要

面试阶段大家基本都会问一些Mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货 创建/删除表和索引系列 创建表 CREATE TABLE if not exists `test_date` (

mysql刷题(不定时更新)

面试阶段大家基本都会问一些Mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货

创建/删除表和索引系列

  • 创建表

CREATE TABLE if not exists `test_date` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` date DEFAULT NULL,
  `temp` int(11) NOT NULL,
  `updateTime` timestamp NOT NULL DEFAULT "0000-00-00 00:00:00" ON UPDATE CURRENT_TIMESTAMP COMMENT "更新时间",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  • 删除表
drop table if exists person; 
  • 清空表(delete不重置自增键,truncate重置,truncate不写日志速度更快)
delete from person;
truncate table person;
truncate person;
  • 增加索引
#alter table添加方式

1.添加PRIMARY KEY(主键索引) 

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

 

2.添加UNIQUE(唯一索引) 
ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

 

3.添加INDEX(普通索引) 

ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 

 

4.添加FULLTEXT(全文索引) 

ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

 

5.添加多列索引 
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )


#create方式只能添加这两种索引;
CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)

  • 删除索引
drop index index_name on table_name ;

alter table table_name drop index index_name ;

alter table table_name drop primary key ;

账户相关/权限分配

  • 查看已经存在的用户
SELECT USER,HOST FROM mysql.USER;
  • 创建mysql 用户

格式:CREATE USER "USERNAME"@"HOST" IDENTIFIED BY "PASSWord";


CREATE USER "vinter"@"%" IDENTIFIED BY "123456";
CREATE USER "jerry"@"localhost" IDENTIFIED BY "123456";
CREATE USER "Tom"@"126.96.10.26" IDENTIFIED BY "123456";

解析:
USERNAME                用户名 
HOST                    主机
PASSWORD                密码
localhost               只可以本地登陆
%                       本地登陆,远程登陆
126.96.10.26            指定登陆的ip
  • 删除mysql 用户:

格式:DROP USER "USERNAME"@"HOST";

DROP USER "vinter"@"localhost";
  • 用户授权:
    格式:GRANT CRUD ON DATABASE.TABLES TO "USERNAME"@"HOST";
GRANT ALL ON *.* TO "vinter"@"%";
GRANT select ON blog.article TO "vinter"@"%";
  • 修改Host 可以远程登陆
SET SQL_SAFE_UPDATES = 0
update MYSQL.user set host = "%" where user = "root"
  • 修改密码

set password for "USERNAME"@"HOST" = password("新密码");

set password for root@localhost = password("123"); 

或者直接更新表:

 use mysql;
 
 update user set password=password("123") where user="root" and host="localhost";
 
 flush privileges; 

数据查重

  • 查询重复数据
编写一个 SQL查询 来查找名为 Person 的表中的所有重复电子邮件。
示例:
+----+---------+
| Id | Email   |
+----+---------+
| 1  | a@b.com |
| 2  | c@d.com |
| 3  | a@b.com |
+----+---------+
根据以上输入,您的查询应返回以下结果:

+---------+
| Email   |
+---------+
| a@b.com |
+---------+

答案及解析:

#重复的也就是数量大于一的(主要考虑group by having的用法,但是题目却不指名分组)
SELECT
	Email 
FROM
	Person 
GROUP BY
	Email 
HAVING
	Count( * ) >1
  • 删除重复数据
编写一个SQL查询来删除Person表中所有重复的电子邮件,在重复的邮件中只保留Id最小(或最大)的邮件。

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
Id是这个表的主键.
例如,在运行查询之后,上面的 Person 表应显示以下几行:

+----+------------------+
| Id | Email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+

答案及解析:

#这里还是考虑group by 的用法,但是题目却不指名分组)
DELETE 
FROM
	person 
WHERE
	id NOT IN ( SELECT id FROM ( SELECT Min( id ) AS id FROM person st GROUP BY email ) temp );
SELECT
	* 
FROM
	person;
	
	
#这里解释一下为什么要套双层,不能直接写成
DELETE 
FROM
	person 
WHERE
	id NOT IN ( SELECT Min( id ) AS id FROM person st GROUP BY email );
会提示如下错误:	
You can"t specify target table "person" for update in FROM clause

这是因为mysql不允许同时删除和查询一个表,这里我们是用一个临时表temp来避免这种问题。

逻辑判断

  • 按条件更新数据
给定一个工资表,如下所示,m=男性 和 f=女性 。交换所有的 f 和 m 值
例如,将所有 f 值更改为 m,反之亦然。要求使用一个更新查询,并且没有中间临时表。

| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | m   | 2500   |
| 2  | B    | f   | 1500   |
| 3  | C    | m   | 5500   |
| 4  | D    | f   | 500    |
运行你所编写的查询语句之后,将会得到以下表:

| id | name | sex | salary |
|----|------|-----|--------|
| 1  | A    | f   | 2500   |
| 2  | B    | m   | 1500   |
| 3  | C    | f   | 5500   |
| 4  | D    | m   | 500    |

if的用法:
if(字段=值,前面条件为真值,前面条件为假的值)

正解:

update salary set sex = if(sex="m", "f", "m")

when case用法

小美是一所中学的信息科技老师,她有一张 seat 座位表,平时用来储存学生名字和与他们相对应的座位 id。其中纵列的 id 是连续递增的,小美想改变相邻俩学生的座位。你能不能帮她写一个 SQL query 来输出小美想要的结果呢?
示例:
+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Abbot   |
|    2    | Doris   |
|    3    | Emerson |
|    4    | Green   |
|    5    | Jeames  |
+---------+---------+
假如数据输入的是上表,则输出结果如下:
+---------+---------+
|    id   | student |
+---------+---------+
|    1    | Doris   |
|    2    | Abbot   |
|    3    | Green   |
|    4    | Emerson |
|    5    | Jeames  |
+---------+---------+
注意:如果学生人数是奇数,则不需要改变最后一个同学的座位。

正解:

SELECT
CASE
		
	WHEN MOD
		( id, 2 ) = 1 
		AND id != ( SELECT max( id ) FROM person ) THEN
			id + 1 
			WHEN MOD ( id, 2 ) = 0 THEN
			id - 1 ELSE id 
		END id,
	email 
FROM
	person 
ORDER BY
	id

4.常用函数类型

  • 取余函数 mod()
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

 

例如,下表 cinema:

+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   1     | War       |   great 3D   |   8.9     |
|   2     | Science   |   fiction    |   8.5     |
|   3     | irish     |   boring     |   6.2     |
|   4     | Ice song  |   Fantacy    |   8.6     |
|   5     | House card|   Interesting|   9.1     |
+---------+-----------+--------------+-----------+
对于上面的例子,则正确的输出是为:

+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   5     | House card|   Interesting|   9.1     |
|   1     | War       |   great 3D   |   8.9     |
+---------+-----------+--------------+-----------+

正解:

SELECT
	id,
	movie,
	description,
	rating 
FROM
	cinema 
WHERE
	description != "boring" 
	AND MOD ( id, 2 ) = 1 
ORDER BY
	rating DESC
  • TO_DAYS函数(将日期转换成天数的时间戳)
Given a Weather table, write a SQL query to find all dates" Ids with higher temperature compared to its previous (yesterday"s) dates.
翻译:给定一个天气表,写一个语句用来找出比前一天气温高的条目的id
+---------+------------+------------------+
| Id(INT) | Date(DATE) | Temperature(INT) |
+---------+------------+------------------+
|       1 | 2015-01-01 |               10 |
|       2 | 2015-01-02 |               25 |
|       3 | 2015-01-03 |               20 |
|       4 | 2015-01-04 |               30 |
+---------+------------+------------------+
For example, return the following Ids for the above Weather table:
+----+
| Id |
+----+
|  2 |
|  4 |
+----+

正解:


SELECT
	w1.id 
FROM
	weather w1,
	weather w2 
WHERE
	TO_DAYS( w1.date ) = TO_DAYS( w2.date ) + 1 
	AND w1.temperature > w2.temperature

解析:当你select * from TABLE1,TABLE2 ...的时候会显示出两个表的笛卡尔积
(即查出的记录中每一个TABLE1的条目都对应TABLE2的所有条目)

5 其他

  • 笛卡尔积
假设一个网站包含两个表,Customers 表和 Orders 表。编写一个SQL语句找出所有从不订购任何东西的客户。

表名: Customers。

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+
Table: Orders.

+----+------------+
| Id | CustomerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+
以上述表格为例,返回以下内容:

+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

正解:

SELECT name 
FROM
	customers 
WHERE
	customers.id NOT IN (SELECT
	customerid 
FROM
	orders)

  • 连接的join用法
The Employee table holds all employees including their managers. Every employee has an Id, and there is also a column for the manager Id.

+----+-------+--------+-----------+
| Id | Name  | Salary | ManagerId |
+----+-------+--------+-----------+
| 1  | Joe   | 70000  | 3         |
| 2  | Henry | 80000  | 4         |
| 3  | Sam   | 60000  | NULL      |
| 4  | Max   | 90000  | NULL      |
+----+-------+--------+-----------+
Given the Employee table, write a SQL query that finds out employees who earn more than their managers. For the above table, Joe is the only employee who earns more than his manager.

+----------+
| Employee |
+----------+
| Joe      |
+----------+

正解:

#方法1:
SELECT
	e.NAME
FROM
	employee e
	JOIN employee m ON e.ManagerId = m.Id 
	AND e.Salary > m.Salary;
	
#方法2:
SELECT
	e.NAME 
FROM
	employee e,
	employee m 
WHERE
	e.ManagerId = m.Id 
	AND e.Salary > m.Salary;
解析:一种是显示连接一种是隐式连接

您可能感兴趣的文档:

--结束END--

本文标题: mysql刷题(不定时更新)

本文链接: https://www.lsjlt.com/news/5116.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql刷题(不定时更新)
    面试阶段大家基本都会问一些mysql的题,具体的高深理论以后再慢慢补充,但是刷题是不可避免的,下面直接上货 创建/删除表和索引系列 创建表 CREATE TABLE if not exists `test_date` ( ...
    99+
    2017-12-21
    mysql刷题(不定时更新)
  • jquery定时刷新怎么用
    jQuery是一种常用的JavaScript库,可以帮助开发人员更轻松地操作HTML文档、处理事件、创建动画和实现异步请求等等,而定时刷新则是一个让网页自动刷新的功能,一些特定的场合下需要。本文将介绍如何在jQuery中使用定时刷新。一、使...
    99+
    2023-05-14
  • vue是不是实时刷新dom
    今天小编给大家分享一下vue是不是实时刷新dom的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。vue不是实时刷新dom。Vu...
    99+
    2023-07-04
  • Django+Ajax异步刷新/定时自动刷新实例详解
    目录前言一、Django是什么?二、Ajax异步刷新1.jQuery语法下的Ajax运用2.定时刷新页面的样例3.展示效果总结前言 分享一下最近在学习Django过程中,遇到和解决的...
    99+
    2022-11-11
  • vue-router中重定向不刷新问题如何解决
    这期内容当中小编将会给大家带来有关vue-router中重定向不刷新问题如何解决,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前阵子太忙了,自己一个人一边开发着新项目,一...
    99+
    2022-10-19
  • vue3.0Reactive数据更新页面没有刷新的问题
    目录vue3.0 Reactive数据更新页面没有刷新vue3.0中的reactive用法在 reactive 使用基本类型参数响应式代理 vs. 原始对象总结vue3.0 Reac...
    99+
    2023-05-16
    vue3.0 Reactive vue3 Reactive数据更新 Reactive数据更新页面刷新
  • AndroidComposeColumn列表不自动刷新问题
    目录1. 背景2. 解决方案3. 原因4. 结论4.1 解决方案一4.2 解决方案二5.自己实现一个mutableStateOf()1. 背景 我们都知道,Compose可以使用mu...
    99+
    2023-01-30
    Android Compose Column Android Compose Column列表刷新
  • AngularJS如何实现页面定时刷新
    这篇文章主要介绍了AngularJS如何实现页面定时刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。有时我们在前端可能会有这样的需求:1、...
    99+
    2022-10-19
  • ctfshow web(不定期更新)
    web1 源码 web2 最基本的sql注入 web3 考点:php伪协议 ctf.show_web3 文件包含漏洞,使用php伪协议探测 php://input 可以访问请求的原始数据,配合文件包含...
    99+
    2023-09-01
    php 安全 CTF
  • vue组件值变化但不刷新强制组件刷新的问题
    目录组件值变化但不刷新强制组件刷新bug复现解决强制刷新vue组件问题解决 – 强制刷新组件组件值变化但不刷新强制组件刷新 在调用组件的时候,如果数据中只是某个属性变化(...
    99+
    2022-11-13
  • vue返回上一页面时不刷新问题及解决方案
    目录返回上一页面时不刷新前景思路说明页面回退后,不刷新问题问题描述问题解决返回上一页面时不刷新 前景 在日常使用的时候,我们经常需要返回上一级页面的时候,不刷新页面,保持页面不变,这...
    99+
    2022-11-13
  • javascript中怎么让定时器刷新页面
    这篇文章给大家分享的是有关javascript中怎么让定时器刷新页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。给大家总结定时器刷新的三种方法方法一:添加 setInterval()函数<script&n...
    99+
    2023-06-14
  • react路由返回时不刷新怎么办
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。react路由返回时不刷新怎么办?react 跳转后路由变了页面没刷新的解决方案最近在学习React的过程中遇到了路由跳转后页面不刷新的问题,本文就详细的...
    99+
    2023-05-14
    React
  • MySQL 更新数据 不同条件(批量)更新不同值
    一般在更新时会遇到以下场景:1.全部更新;2.根据条件更新字段中的某部分内容;3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法。 一、方法分类 二、具体用法 (1)根据条件更新...
    99+
    2023-09-01
    mysql 数据库 sql
  • Windows11 开机自动同步时间(开机时间不更新问题)
    Windows11 开机自动同步时间 前言解决办法 前言 win11开发版bug多多,开机时间不会自动更新了,我怀疑是电池问题,后来发现是自动更新服务没有开机自启。 解决办法 确保已配置I...
    99+
    2023-09-13
    服务器 运维 linux
  • FineReport中如何用JavaScript解决控件值刷新不及时的问题
    这篇文章主要介绍“FineReport中如何用JavaScript解决控件值刷新不及时的问题”,在日常操作中,相信很多人在FineReport中如何用JavaScript解决控件值刷新不及时的问题问题上存在疑惑,小编查阅了各式资料,整理出简...
    99+
    2023-06-04
  • react纯函数组件setState更新页面不刷新的解决
    目录问题描述: 原因分析: 解决方案: 补:react中,hooks钩子时useState更新不渲染组件的问题问题描述: const [textList, setTextLis...
    99+
    2022-11-12
  • PHP如何进行定时查询数据刷新
    本文小编为大家详细介绍“PHP如何进行定时查询数据刷新”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP如何进行定时查询数据刷新”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、使用PHP实现定时器PHP提供...
    99+
    2023-07-06
  • angular2组件中定时刷新并清除定时器的示例分析
    这篇文章主要为大家展示了“angular2组件中定时刷新并清除定时器的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular2组件中定时刷新并清除...
    99+
    2022-10-19
  • react路由返回时不刷新如何解决
    这篇文章主要介绍“react路由返回时不刷新如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react路由返回时不刷新如何解决”文章能帮助大家解决问题。react路由返回时不刷新的解决办法:1...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作