2022年9月27日

MySQL: Ubuntu 20.04 上安装 MySQL 及 MySQL基础

官方文档 本文目录: 1.1 安装 1.2 配置MySQL的安全性 1.3 以root用户登录 1.4 修改密码 1.5 撤销用户授权 1.6 删除用户 2.1 SQL书写规范 2.2 命名规则 2.3 数据类型 (1)数值类型 (2)日期和时间类型 (3)字符串类型 3.1 数据库的创建 3.2 数据库的查看 3.3 选择数据库 3.4 删除数据库 4.1 表的创建 4.2 表的删除 4.3 表的更新 4.4 表的查询 4.5 表的复制 5.1 算术运算符 5.2 比较运算符 5.3 逻辑运算符 6.1 聚合函数 6.2 对表分组 6.3 使用WHERE语句 6.4 为聚合结果指定条件 6.5 对表的查询结果进行排序 7.1 数据的插入 7.2 数据的删除 7.3 数据的更新 8.1 安装pymysql 8.2 连接数据库 8.3 创建游标 8.4 类方法 8.5 实战 前言 MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开…
2022年9月25日

MySQL: 多用户同时操作一条Mysql记录问题

目录 关于乐观锁和悲观锁 悲观锁: 乐观锁:   场景:两个用户同时读取了数据库中的一条记录,此时用户A对其中一个字段的值进行了修改操作并进行了提交,后来用户B也对这个字段进行了修改,用户B的提交将会覆盖用户A提交的值   回到顶部 关于乐观锁和悲观锁 悲观锁: 每次去取数据,很悲观,都觉得会被别人修改,所以在拿数据的时候都会上锁。 简言之,共享资源每次都只给一个线程使用,其他线程阻塞,等第一个线程用完后再把资源转让给其他线程。 synchronized和ReentranLock等都是悲观锁思想的体现。  乐观锁: 每次去取数据,都很乐观,觉得不会被被人修改。 因此每次都不上锁,但是在更新的时候,就会看别人有没有在这期间去更新这个数据,如果有更新就重新获取,再进行判断,一直循环,直到拿到没有被修改过的数据。 CAS(Com…
2022年9月20日

MySQL 导出导入数据

1. MySQL 导出数据 MySQL中你可以使用SELECT...INTO OUTFILE语句来简单的导出数据到文本文件上。 使用 SELECT ... INTO OUTFILE 语句导出数据 以下实例中我们将数据表 runoob_tbl 数据导出到 /tmp/runoob.txt 文件中: mysql> SELECT * FROM runoob_tbl -> INTO OUTFILE '/tmp/runoob.txt'; 你可以通过命令选项来设置数据输出的指定格式,以下实例为导出 CSV 格式: mysql> SELECT * FROM passwd INTO OUTFILE '/tmp/runoob.txt' -> FIELDS TERMINATED BY ',' ENCLOSED BY '"' -> LINES TERMINATED BY '\r\n'; 在下面的例子中…
2022年8月29日

MySQL: 自增字段(AUTO_INCREMENT)的一些常识

在系统开发过程中,我们经常要用到唯一编号。使用过mysql的人都应该知道,mysql有一个定义列为自增的属性:AUTO_INCREMENT。   指定了AUTO_INCREMENT的列必须要建索引,不然会报错,索引可以为主键索引,当然也可以为非主键索引。(不一定要做主键) 1 2 3 mysql> create table t4 (id int auto_increment); ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key mysql> 下面的定义把t5表的主键定义为了name,而非自增的id字段 1 2 3 mysql> mysql> create table t5 (id int au…
2022年8月9日

MySQL: 索引

索引分类 (1)普通索引(Key Indexes) (2)唯一索引(Unique Indexes) (3)主键索引(Primary Key Indexes) (4)组合索引(Composite Index) (5)前缀索引( Prefix Indexes) (6)全文索引(Full-Text Indexes) (7)哈希索引(Hash Indexes) (8)空间索引(Spatial Indexes) 普通索引 普通索引是最基本的索引,没什么限制,根据创建时机不同,主要有两种方式: (1)在创建表时同时创建普通索引 CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name( col_name column_definition, INDEX|KEY [index_name] [index_type] (col_name […
2022年8月9日

MySQL: 约束命名的作用

给约束取名字,   目的是将来你可以比较容易的删除掉. 否则你要自己去查询数据字典表.   例如下面的例子. 唯一约束的名字,  是  t_123,  那么当我不需要这个约束的时候 如果我知道名字, 那么可以直接去删除掉.   -- 创建测试表. CREATE TABLE test_123 (   id   INT,   value  VARCHAR(10) ); GO -- 创建 UNIQUE 约束. ALTER TABLE test_123   ADD CONSTRAINT t_123 UNIQUE (value); GO -- 删除  UNIQUE 约束. ALTER TABLE [test_123]      DROP CONSTRAINT [t_123]; GO   如果我不知道约束的名字, 那么我需要去查询数据…
2022年8月3日

MySQL: 实时查看日志

1. /etc/mysql/mysql.conf.d$ vim mysqld.cnf # # * Logging and Replication # # Both location gets rotated by the cronjob. # # Log all queries # Be aware that this log type is a performance killer. general_log_file = /var/log/mysql/query.log general_log = 1 2. $ tail -f /var/log/mysql/query.log…
2022年7月3日

MySQL: WITH ROLLUP + HAVING的结果分析

MySQL> select * from stu; +----+--------+-----+--------+--------+---------+-------+--------+ | id | name | age | height | weight | gender | class | del | +----+--------+-----+--------+--------+---------+-------+--------+ | 1 | Tom | 23 | 175.00 | 63.00 | male | cls1 | 0 | | 2 | Bonnie | 26 | 167.00 | 49.00 | female | cls2 | 0 | | 3 | Edith | 27 | 165.00 | 51.00 | female | cls3 | 0 | | 4 | Bert | 52 | | 52.00 | unknown | cls1 | | | 5 | Ken | 27 | | 55.…
2022年7月3日

MySQL: Failed to add the foreign key constraint. Missing index for constraint 'xxx_ibfk_1' in the referenced table 'xxx'

原因: 关联表的关联属性没有建立索引值。 创建外键约束的要求有以下几点: -- 1、父表和子表必须使用相同的存储引擎,而且禁止使用临时表 --具有外键列的表称为子表;子表所参照的表称为父表 -- 2、数据表的默认引擎只能为InnoDB -- 3、外键列和参照列必须具有类似的数据类型。其中数字的长度或是否有符号位必须相同,而字符的长度可以不同 -- 加FOREGIN KEY 关键字的列称为外键列 外键列所参照的列称为参照列 -- 4、外键列和参照列必须建立索引。如果外键列不存在索引的话,MYSQL将自动创建索引。如果参照列不存在索引的话,MySQL不会自动创建索引 -- MySQL会为主键自动创建索引…
2022年7月2日

MySQL: 注释

MySQL注释符有三种: 1、#注释内容,表示单行注释 2、"-- 注释内容" (注意--后面有一个空格) 3、/*注释内容*/ 另外,需要注意以下几点: /* .... */ 在大部分编程语言中都是注释,这个注释之中的语句是不被执行的。但是,在MySQL中为了保持兼容,比如从mysqldump导出的SQL语句能被其它数据库直接使用,它把一些特有的仅在MySQL上的语句放在 /*! ... */ 中,这样这些语句如果在其它数据库中是不会被执行,但在MySQL中它会执行。在这里,*和!之间不能有空格。 语句例如“/*!50701 select * from test */;”,这里的50701表示假设数据库服务器是5.7.01以上版本,该语句才会被执行。 示例如下所示: MySQL [(none)]> /*!select count(*) from mysql…