![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MySQL
MySQL学习过程中相关记录
黄佳俊、
to be or not to be!
热爱生活!
执着学习!
展开
-
Unknown collation: ‘utf8mb4_0900_ai_ci‘的解决方法
分析出现这样的问题是原sql文件是mysql(8.0版本),高级往低级(5.6版本)导入时出现版本不兼容的情况。解决把文件中的所有的utf8mb4_0900_ai_ci替换为utf8_general_ci 以及utf8mb4替换为utf8原创 2022-05-11 19:47:43 · 7087 阅读 · 0 评论 -
MySQL牛客刷题:统计每个学校的答过题的用户的平均答题数
描述题目:运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。示例:用户信息表 user_profile,其中device_id指终端编号(认为每个用户有唯一的一个终端),gender指性别,age指年龄,university指用户所在的学校,gpa是该用户平均学分绩点,active_days_within_30是30天内的活跃天数。第一行表示:用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天最后一行表原创 2022-01-03 20:53:59 · 2346 阅读 · 0 评论 -
MySQL牛客刷题:分组计算练习题
描述题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。用户信息表:user_profile30天内活跃天数字段(active_days_within_30)发帖数量字段(question_cnt)回答数量字段(answer_cnt)第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4在过去的30天里面活跃了7天,发帖数量为原创 2022-01-02 18:46:28 · 1757 阅读 · 0 评论 -
sql语句:查询结果保留小数
select count(gender) ,round(avg(gpa),1)from user_profilewhere gender = 'male'例子中,将平均gpa保留一位小数原创 2022-01-02 18:37:35 · 2972 阅读 · 0 评论 -
MySQL牛客刷题:查看学校名称中含北京的用户
描述题目:现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。示例:用户信息表:user_profile根据示例,你的查询应返回如下结果:我的答案:select device_id,age,universityfrom user_profilewhere university like '%北京%'字符匹配一般形式为:列名 [NOT ] LIKE匹配串中可包含如下四种通配符:_:匹配任意一个字符;%:匹配0个或多个字符;[ ]:匹配[原创 2022-01-02 18:28:36 · 700 阅读 · 0 评论 -
sql语句:and与or的优先级
and的优先级大于or 我这里写大括号方便区分,表示两个条件或两个条件 可以省略括号select device_id,gender,age,university,gpa from user_profilewhere (university='山东大学' and gpa>3.5 )or (university="复旦大学" and gpa>3.8);等效于select device_id,gender,age,university,gpafrom user_profile.原创 2022-01-02 18:24:16 · 3248 阅读 · 1 评论 -
SQL语句:空值判断
不能用 !=select device_id,gender,age,universityfrom user_profilewhere age != null没有输出得用 is notselect device_id,gender,age,universityfrom user_profilewhere age is not null答案正确原创 2022-01-02 17:10:20 · 2212 阅读 · 0 评论 -
MySQL牛客刷题:查找除复旦大学的用户信息
描述题目:现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据示例:user_profile根据输入,你的查询应返回以下结果:三解法:1、用了!=select device_id, gender, age, university from user_profile where university != '复旦大学'2、有些数据库不支持!=,所以得用not inselect device_id,gender,age,university fr原创 2022-01-02 17:05:24 · 730 阅读 · 0 评论 -
MySQL牛客刷题:查询结果限制返回行数
题目描述:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。示例:根据输入,你的查询应返回以下结果:解题过程:我写的是:select device_id from user_profilewhere id <= 2;题解涨知识:使用LIMIT限制结果集LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果只给原创 2022-01-02 16:50:27 · 1591 阅读 · 0 评论 -
数据库设计 | 需求分析
一、需求分析要干一个什么样的事情?通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。 二、需求分析过程中要注重的是什么?调查、收集与分析用户在数据管理中的信息要求、处理要求、安全性与完整性要求。 信息要求是用户需要从数据库中获得信息的内容与性质。由用户的信息要求可以导出数据要求,即在数据库中原创 2021-12-30 09:10:56 · 4214 阅读 · 0 评论 -
数据库设计 | 怎样做一个数据库?
设计一个数据库是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)具体步骤:需求分析 概念结构设计 逻辑结构设计 数据库物理设计 数据库实施 数据库运行和维护...原创 2021-12-30 08:41:13 · 376 阅读 · 0 评论 -
MySQL外键字段为什么必须加索引
外键字段为什么需要索引?主要原因就在于查询性能了。父子表之间在进行外键检查时,需要一条一条每条必查地校验,而且在对父表的SELECT操作时,为了避免产出数据不一致,使用的是一致性锁定读(SELECT …… LOCK IN SHARE MODE),主动加一个阻塞其他修改操作的读锁。如果没有索引,对于大一点的表而言那效率就非常低下了。参考官方文档https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html,有一段具体的说明。M原创 2021-12-26 10:24:27 · 2721 阅读 · 0 评论 -
MySQL数据库的删除基本上是标记删除
通过从InnoDB存储空间分布,delete对性能的影响可以看到,delete物理删除既不能释放磁盘空间,而且会产生大量的碎片,导致索引频繁分裂,影响SQL执行计划的稳定性;同时在碎片回收时,会耗用大量的CPU,磁盘空间,影响表上正常的DML操作。在业务代码层面,应该做逻辑标记删除,避免物理删除;...原创 2021-12-26 09:34:54 · 1382 阅读 · 0 评论 -
python操作mysql数据库,为什么要在执行后加commit()?
p1:关于commit方法第一感觉是这个方法只用来提交“数据”,比如插入数据、更新数据需要在execute()后面跟上一个commit();现在看来,commit()方法需要跟在增(insert)、删(delete)、改(update)、查(select)的任何execute()语句后面。commit是把查询语句提交到数据库内,而不只是要向数据库提交增、添的数据。p2:查询不需要commit。增删改需要commit,提交事务,操作真正会影响到数据库中,否则数据库数据不变。p3:.原创 2021-12-26 09:31:24 · 12421 阅读 · 1 评论 -
pymysql的基本使用
一个简单基础的完整使用过程:import pymysql # python操作mysql 步骤:# 1, 建立数据库连接# 2, 创建游标对象# 3, 使用游标对象的方法操作数据库# 4, 提交commit# 5, 关闭游标对象# 6, 关闭数据库连接 try: #创建db连接对象 db = pymysql.connect("192.168.10.16","wang","123456","wang",charset = "utf8") #创建游标对象原创 2021-12-26 09:20:00 · 147 阅读 · 0 评论 -
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction的问题解决
问题描述:删除部分数据,在删除的时候出现报错:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction。解决方案:去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。SE原创 2021-12-26 09:13:43 · 5091 阅读 · 0 评论 -
MySQL数据库报错:Cannot change column ‘id‘: used in a foreign key constraint
原因:为表添加自增长,但由于该表有外键而报错发现是因为外键的影响,不能随便的更改表结构。要想更改表结构,首先要把基层的表修改了。意思是:A表 作为B表的外键,A表不能随便修改。B表 有A表的外键,必须先处理好B,然后A才能修改。解决办法1 把表中的外键全部去除。解决办法2 把表删了,重新建表。...原创 2021-12-25 10:43:50 · 5803 阅读 · 2 评论 -
在MySQL中,MUL、PRI和UNI有什么区别?
从Mysql 5.7文件:如果键是PRI,则列是主键或多列主键中的列之一。 如果键是UNI,则该列是唯一索引的第一列。(唯一索引允许多个空值,但可以通过检查Null字段来判断该列是否允许空。) 如果键为MUL,则该列是非唯一索引的第一列,其中允许在列中多次出现给定值。例子:此示例既没有PRI、MUL,也没有UNI:mysql> create table penguins (foo INT);Query OK, 0 rows affected (0.01 sec)mysql&g原创 2021-12-24 12:16:45 · 5494 阅读 · 0 评论 -
mysql数据库中如何将已建好表表的主码设为自增?
alter table 表名 change 字段名 新字段名 新字段类型 auto_increment;例子:alter table student change sno sno int auto_increment;字段名不变,则新字段名不变,但不可省,新字段类型也是使用这个命令,要保证字段是主键,只有主键才可设置自动增长属性...原创 2021-12-24 12:13:48 · 845 阅读 · 1 评论 -
MySQL | 数据表中有自增长主键时如何插入数据
MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候;如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值; 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填;具体:1.创建数据库Prettyprint代码<codeclass="hljssqlhas-numbering"style="display:block;padding:0px;background:trans...原创 2021-12-24 10:04:31 · 8335 阅读 · 0 评论 -
MySQL | 在mysql数据库中为什么要为字段添加索引
索引的好处在于可以讲指定列进行排序,提高检索的速度。一个简单的例子:某个列的数据是id name12 小李10 小龙5 小青99 小红id列创建索引后就会生成一个索引表id index5 310 212 199 4当查询 where id =10的 时候,使用到索引表。由于10下面是15,不可能有大于10的数。所以不再进行扫描表操作。返回第二条数据,对应回主表的第二行。这样就提高了查询的速度,如果没添加索引;则扫描整张主表。...原创 2021-12-23 15:24:24 · 511 阅读 · 0 评论 -
MYSQL | set names utf8是什么意思?
set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置,而且在设置编码的时候,这些地方最好是一致的,这样能最大程度上避免数据记录出现乱码。执行SET NAMES utf8的效果等同于同时设定如下:SET character_set_client='utf8';SET character_set_connection='utf8';SET character_set_results='utf8';另外,如果..原创 2021-12-23 15:19:13 · 1315 阅读 · 0 评论 -
python | 连接MySQL数据库的简单方法
1.安装pymysql进行Python连接mysql数据库之前,需要先安装一下pymysql。直接在终端执行下面的命令即可。pip install PyMySQL2.测试是否能连接成功以下代码实现了连接到一个database,并选择了其中一个表查询所有数据。import pymysql # 打开数据库连接conn = pymysql.connect(host='localhost', port=3306,原创 2021-12-21 15:23:19 · 21482 阅读 · 1 评论 -
MySQL | 创建用户与授权
一. 创建用户命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';说明:username:你将创建的用户名host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:CREATE USER 'dog'@'localhost' IDENTIFIED BY..原创 2021-12-04 22:18:20 · 87 阅读 · 0 评论 -
MySQL | 远程登录数据库
注:我这里是用虚拟机连接的本机数据库1、 关闭防火墙2、为本地数据库创建访问用户;代码含义是执行存储过程,创建用户登录。CREATE USER 'hjj'@'%' IDENTIFIED BY 'hjj';select host,user from user;% hjjlocalhost mysql.infoschemalocalhost mysql.sessionlocalhost mysql.syslocalhost root3、为用户设置访...原创 2021-12-03 20:02:35 · 1061 阅读 · 0 评论 -
MySQL | 查询当前数据库的连接数
1、 mysql> show status like'Threads%'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | Threads_cached | 32 | | Threads_connected | 10 | | Threads_created | 50 | ...原创 2021-12-03 19:54:04 · 3898 阅读 · 0 评论 -
MySQL | 级联操作的基本使用
1、一个小例子:create table sc(scid int UNSIGNED primary key auto_increment,sid int UNSIGNED not null,score varchar(20) default '0',index (sid), --外键必须加索引FOREIGN KEY (sid) REFERENCES stu(sid) ON DELETE CASCADE ON UPDATE CASCADE)2、例子的解释:FOREIGN key(s原创 2021-12-03 16:34:36 · 403 阅读 · 0 评论 -
mysql | 触发器的基本使用
1、基本结构CREATE TRIGGER trigger_nametrigger_timetrigger_event ON tbl_nameFOR EACH ROWtrigger_stmt#trigger_name:标识触发器名称,用户自行指定;#trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;#trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;#tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;#tr原创 2021-12-03 16:27:25 · 1197 阅读 · 0 评论 -
MYSQL: set names utf8是什么意思?
set names utf8 是用于设置编码,可以再在建数据库的时候设置,也可以在创建表的时候设置,或只是对部分字段进行设置,而且在设置编码的时候,这些地方最好是一致的,这样能最大程度上避免数据记录出现乱码。执行SET NAMES utf8的效果等同于同时设定如下:SET character_set_client='utf8';SET character_set_connection='utf8';SET character_set_results='utf8';另外,如果数据出现乱码...原创 2021-12-03 14:33:47 · 635 阅读 · 0 评论 -
MySQL DELETE 语句
你可以使用 SQL 的 DELETE FROM 命令来删除 MySQL 数据表中的记录。语法以下是 SQL DELETE 语句从 MySQL 数据表中删除数据的通用语法:DELETE FROM table_name [WHERE Clause]如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。 你可以在 WHERE 子句中指定任何条件 您可以在单个表中一次性删除记录。...原创 2021-12-03 14:34:07 · 160 阅读 · 0 评论 -
MySQL | 日期类型
DATETIME和DATE1、DATETIME占用8字节是占用空间最多的一种日期类型。既显示了日期又同时显示了时间。显示格式为:‘YYYY-MM-DDHH:MM:SS'表达日期范围:'1000-01-0100:00:00'to'9999-12-3123:59:59'2、DATE占用3字节,仅显示日期。显示格式为:'YYYY-MM-DD'表达的日期范围:'1000-01-01'to'9999-12-31'在MySQL数据库中,对日期和时间输入格式的要求是非常宽松的...原创 2021-12-03 14:34:20 · 1719 阅读 · 0 评论 -
MySQL 错误 | You are using safe update mode and you tried to update a table without ....
完整报错语句:You are using safe update mode and you tried to update a tablewithout a WHERE that uses a KEY column To disable safe mode, toggle the optionin Preferences -> SQL Editor and reconnect.这是因为MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命.原创 2021-12-03 14:34:33 · 15991 阅读 · 0 评论 -
MySQL | alter修改列
1,修改表名---- alter table 旧名 rename (to)新名,下面2种方式都可以alter table my_contacts rename students;alter table my_contacts rename to students;2,修改列名----alter table 表名 change ( column)原列名 新列名 列类型; 以下二选一都可以alter table students change gender 性别 varchar(...原创 2021-12-03 14:34:50 · 11370 阅读 · 0 评论 -
mysql | 中怎么删除表中所有数据
清空全部数据,不写日志,不可恢复,速度极快truncate table 表名;清空全部数据,写日志,数据可恢复,速度慢delete from 表名原创 2021-12-02 11:20:59 · 467 阅读 · 0 评论 -
数据库原理:如何求一个关系模式的候选码
若W是候选键,则必须满足两个条件:W的闭包是U;W没有冗余。设关系模式R中U=ABC.......等N个属性,U中的属性在FD中有四种范围:求候选码的简单方法方法:(1)如果有属性不在函数依赖集中出现,那么它必须包含在候选码中;(2)如果有属性不在函数依赖集中任何函数依赖的右边出现,那么它必须包含在候选码中;(3)如果有属性只在函数依赖集的左边出现,则该属性一定包含在候选码中。(4)如果有属性或属性组能唯一标识元组,则它就是候选码;算法:按以下步骤求候选键:1.只在FD右部出现的..原创 2021-12-02 10:10:02 · 7283 阅读 · 1 评论 -
数据库中主键、主码、主属性、关键字、候选关键字、码的区别
码是数据库系统中的基本概念,所谓码就是能唯一标识实体的属性,它是整个实体集的性质,而不是单个实体的性质。它包括超码、候选码和主码。(1)超码是一个或多个属性的集合,这些属性可以让我们在一个实体集中唯一地表示一个实体。如果K是一个超码,那么所有包含K的集合也是超码。(2)候选码是从超码中选出来的,自然的候选码也是一个或多个属性的集合。候选码是最小的超码,它的任意真子集都不能成为超码。(3)主码是被数据库设计者选中的,用来在同一实体集中区分不同实体的候选码。主码=主键=主关键字,关键字=候选码原创 2021-12-02 10:03:02 · 13811 阅读 · 3 评论 -
mysql里all的意思和用法
mysql中all的用法:1、all是“对于子查询返回的列中的所有值,如果比较结果为true,则返回true”;2、all可以与【=、>、>=、】结合是来使用,分别表示等于、大于、大于等于、小于、小于等于、不等于。db545fb86b62b97c8cfb69315b9d1e9c.pngmysql中all的用法:最近一直在练习MYSQL的多表查询,基本上每个查询语句我都会写至少两次:一次join连接,一次子查询。来对比一下MYSQL在不同的查询方式下的工作方式和效率。在子查询有any、原创 2021-11-30 16:51:52 · 2155 阅读 · 0 评论 -
MySQL 查询结果取交集的实现方法
1MySQL中如何实现以下SQL查询(SELECT S.NameFROM STUDENT S, TRANSCRIPT TWHERE S.StudId = T.StudId AND T.CrsCode = 'CS305')INTERSECT(SELECT S.NameFROM STUDENT S, TRANSCRIPT TWHERE S.StudId = T.StudId AND T.CrsCode = 'CS315')请各位不吝赐教,小弟先谢过~解:取交集select a.* fro原创 2021-11-30 16:50:26 · 2635 阅读 · 1 评论 -
ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregate
粗略来讲:报错原因可能是有group by 语句的select的属性中含有除无法查询的属性。也就是说,group by 属性1 语句使用后,select语句后接的属性只能是属性1或者是函数属性例如count(属性2)、max,min等。至于说解决办法就是去掉不和规矩的查询属性,或者使用其他SQL逻辑语句。...原创 2021-11-30 09:02:11 · 1368 阅读 · 0 评论 -
MySQL 删除数据表
MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。语法以下为删除MySQL数据表的通用语法:DROP TABLE table_name ;实例在mysql>命令提示窗口中删除数据表SQL语句为DROP TABLE:以下实例删除了数据表runoob_tbl:root@host# mysql -u root -pEnter password:*******mysql> use RUNOOB;D...原创 2021-11-01 16:21:03 · 113 阅读 · 0 评论