MySQL笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL笔记

子查询

SELECT *  FROM 
(
  SELECT a.*, b.`match_time` FROM `bifen_index_change` AS a 
  LEFT JOIN bifen_matches AS b ON a.`match_id` = b.`id` 
  ORDER BY b.`match_time` DESC 
) AS c 
GROUP BY c.match_id, c.type 
ORDER BY c.match_time DESC, c.match_id ASC, c.type ASC

MySQL三个表的连接查询

select first_name,title,salary,s.to_date
from employees e 
inner join titles t on e.emp_no = t.emp_no
inner join salaries s on e.emp_no = s.emp_no
where e.emp_no = 10001
outerjoin(外连接):left join 、right join
innerjoin (内链接):join

Linux查看MySQL版本的种方法

[root@iZ8vbbslxnnj3fheohrwncZ ~]# mysql -

MySQL查看数据库文件存放目录

SHOW VARIABLES LIKE '%datadir%'

www.runoob.com/mysql/mysql…

01ebd755782e4c909dad0843d3544acf.jpeg

MYSQL

cmd

C:\Users\Administrator>d:

D:\>cd d:\wamp64\bin\mysql\mysql5.7.14\bin

D:\wamp\bin\mysql\mysql5.6.17\bin

d:\wamp64\bin\mysql\mysql5.7.14\bin> mysql -u root (-p)

修改root密码

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

准则

  1. 两表关联用自增id来关联

company_id和odds_typeid的值并不够散列(company_id表少于1k条就表示不够散列),不必要创建索引。

唯一索引

多字段确定唯一索引,则md5建立一个字段wysy varchat(100)

$wysy = md5(hp_season_id.'_'.hp_team_selfid.'_'.'score_type_id)

01ebd755782e4c909dad0843d3544acf.jpeg

表复制

basketball_hp_teamdata_season表复制一张新的basketball_teamdata_season表,结构和记录一样


CREATE TABLE `basketball_teamdata_season` LIKE `basketball_hp_teamdata_season`;


INSERT INTO `basketball_teamdata_season` SELECT * FROM `basketball_hp_teamdata_season`;


mysql命令语句来去除掉字段中空格字符的方法

update `xinhu_crm_library` set `uniqueId`=replace(`uniqueId`,' ','');//清除news表中content字段中的空格

多表联合查询

SELECT a.*, b.name FROM xinhu_reads a LEFT JOIN xinhu_admin b ON a.optid = b.id where a.`table`= 'threadedtree';

tp5中mysql中decimal去掉后面多余 的0

$data = Db::database($this->database)
    ->table("basket_ball_hupu_team_season_data")
    ->field('0+CAST(ptsavg AS CHAR) as ptsavg')
    ->select();

TP5使用原生语句

$database = Env::get($this->database . ".database");
$sql = "select * from `{$database}`.{$this->table}  where hp_team_selfid = {$hpTeamSelfId} order by shirt_number+0 asc";
$data = Db::query($sql);

金额用int类型

prize_money int 11 中奖金额 1=1分 100=1元

给表添加一个新的普通索引

ALTER TABLE `show_ticket` ADD INDEX index_create_time(`create_time`);

使用`
TABLE `admin_op_log` ADD COLUMN `op_object_id`

查看纪录总数

SELECT count(*) FROM `sdsq-sports-data`.`basketball_player` WHERE ID=1;

表名称修改

rename table `sdsq-sports-data`.`basketball_ls_events_copy1` to `sdsq-sports-data`.`basketball_ls_events`;

给表添加一个新的字段

给admin_op_log表在字段op_object后添加一个op_object_id 字段备注为操作对象id,类型int11默认值0

ALTER TABLE `admin_op_log` ADD COLUMN `op_object_id` int(11) NOT NULL DEFAULT 0  COMMENT '操作对象id'  AFTER `op_object`;

修改一个字段的属性

ALTER TABLE `test_table` MODIFY `test_value`VARCHAR(10) NOT NULL DEFAULT '' COMMENT '字段注释';

修改一个字段的名称,此时要重新指定该字段的类型

ALTER TABLE test_table CHANGE test_value_old test_value_new VARCHAR(10) NOT NULL DEFAULT '' COMMENT '字段注释';

删除test_table表的 test_value字段

ALTER TABLE test_table DROP COLUMN test_value;

删除basketball_ls_events表 DROP TABLE `sdsq-sports-data`.`basketball_ls_events` ;

删除表指定记录

DELETE FROM lottery_history_forecast WHERE forecast_version='20200115' And lottery_id='fcsd'

将admin表ID=19的password字段改为别的值

UPDATE `admin` SET `password` = '9a47f30157a92ca673ab0cd5b1e948216848ad31' WHERE `id` = 19;

给表增一条记录

insert into banner_conf (name,code,size,is_del,sys) values('发现首页','app_findindex','710*280','0','sports');

修改某一条记录指定的字段数据

update `banners` set `direction`='app_findindex' where `id`=16;

ERROR 1045 (28000): Access denied for user 'root'@'10.116.4.95' (using password: YES)

mysql>update mysql.user set host='%' where user='root';

mysql>flush privileges;

01ebd755782e4c909dad0843d3544acf.jpeg

查找数据库文件位置使用命令

show global variables like "%datadir%";

查看某表某字段是否存在某值

SELECT * FROM user_oauth WHERE openid='15062703446';

将article表的from字段的乐窝窝值全部替换为owenzhang

UPDATE `article` SET `from` = REPLACE(`from`,'乐窝窝','OwenZhang');

将article表的from字段的值全部置空

UPDATE `article` SET `from` = REPLACE(`from`,NULL,'OwenZhang');

将某表某字段为空替换为某值

UPDATE `article` SET `from` = (CASE WHEN IFNULL(`from`, 'OwenZhang') = 'OwenZhang' THEN 'OwenZhang' ELSE `from` END)

查看某表某字段值为随机数300-1000

UPDATE article SET hot= (300 + RAND()*1000);

UPDATE `case` SET click= (240 + RAND()*580) where store_id = 739;

将同表的A字段若为空 则替换为同表B字段值

如果表名为关键字case order 则要加上反引号`case` `order`

use jumeijia;

update tablename set A='B' where A='';

update `case` set description=title where description='';

1表字段值字符串替换

article_store表中cont字段内容a替换为ab

height:auto !important;

替换为

height:auto !important;width: 100%;

use jumeijia;

UPDATE article_store SET cont = replace(cont, 'height:auto !important;', 'height:auto !important;width: 100%;') ;

打印SQL查询语句getLastSql

$Article = D('article_store');
var_dump($Article->getLastSql());
die();
D:\jumjia\App\Lib\Action\Home\StoreAction.class.php:206:string 'SELECT * FROM `article_store` WHERE ( `id` = 1 ) LIMIT 1  ' (length=58)

如果你只需要查询某个字段的值,还可以使用getField方法,例如:

  1. $Form = D("Form");
  2. // 获取标题
  3. title=title = title=Form->where('id=3')->getField('title');
    数据的更新操作在ThinkPHP使用save方法save方法则会自动把当前的数据对象更新到数据库,而更新的条件其实就是表的主键,这就是我们在编辑页面要把主键的值作为隐藏字段一起提交的原因。save方法会自动识别数据对象中的主键字段,并作为更新条件.数据对象赋值的方式,save方法无需传入数据,会自动识别。
    save方法的返回值是影响的记录数,如果返回false则表示更新出错。
    $Form   =   M('Form');
    result=result = result=Form->save();

修改某个字段的值,就可以使用setField方法,

$Form = M("Form"); 
// 更改title值
$Form->where('id=5')->setField('title','ThinkPHP');

对于统计字段,系统还提供了更加方便的setInc和setDec方法。

$User = M("User"); // 实例化User对象

$User->where('id=5')->setInc('score',3); // 用户的积分加3

$User->where('id=5')->setInc('score'); // 用户的积分加1

$User->where('id=5')->setDec('score',5); // 用户的积分减5

$User->where('id=5')->setDec('score'); // 用户的积分减1

删除数据很简单,只需要调用delete方法返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。
$Form = M('Form');
 $User->where('id=5')->delete(); // 删除id为5的用户数据

动态查询

借助PHP5语言的特性,ThinkPHP实现了动态查询,核心模型的动态查询方法包括下面几种:

方法名

说明

举例

getBy

根据字段的值查询数据

例如,getByName,getByEmail

getFieldBy

根据字段查询并返回某个字段的值

例如,getFieldByName

  1. user=user = user=User->getByName('liu21st');

1**、使用select方法**

当select方法的参数为false的时候select(false),表示不进行查询只是返回构建SQL,例如:

  1. // 首先构造子查询SQL
  2. subQuery=subQuery = subQuery=model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->select(false);

2、使用buildSql方法

subQuery=subQuery = subQuery=model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->buildSql();

调用buildSql方法后不会进行实际的查询操作,而只是生成该次查询的SQL语句(为了避免混淆,会在SQL两边加上括号),然后我们直接在后续的查询中直接调用。

多表联合查询语句

SELECT a.id,a.username,ag.name,a.password,a.gid,a.addtime,a.lastlogin,a.status FROM admin AS a,admin_group AS ag WHERE a.gid=ag.id;

Tp3.1框架的语句

$Model = new Model();// 实例化一个model对象 没有对应任何数据表
$result =$Model->query("SELECT a.id,a.username,ag.name,a.password,a.gid,a.addtime,a.lastlogin,a.status FROM admin AS a,admin_group AS ag WHERE a.gid=ag.id");



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
15 4
|
4天前
|
关系型数据库 MySQL 数据库
【MySQL实战笔记】 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?-01
【4月更文挑战第17天】MySQL的锁分为全局锁、表级锁和行锁。全局锁用于全库备份,可能导致业务暂停或主从延迟。不加锁备份会导致逻辑不一致。推荐使用`FTWRL`而非`readonly=true`因后者可能影响其他逻辑且异常处理不同。表级锁如`lock tables`限制读写并限定操作对象,常用于并发控制。元数据锁(MDL)在访问表时自动加锁,确保读写正确性。
70 31
|
4天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-01
【4月更文挑战第8天】这篇文章除了介绍索引的作用和提高查询效率的原理,还探讨了三种常见的数据结构:哈希表、有序数组和搜索树。哈希表适合等值查询,但不支持范围查询;有序数组利用二分查找实现快速等值查询,但更新成本高;二叉搜索树保持平衡时查询高效,但磁盘存储时效率低。文章指出,由于磁盘读取延迟,实际数据库索引设计需考虑减少磁盘访问次数。
35 5
|
4天前
|
SQL 安全 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-01
【4月更文挑战第6天】MySQL事务的隔离性确保数据操作的完整性和一致性,ACID原则包括原子性、一致性、隔离性和持久性。事务隔离级别有四种:读未提交、读提交、可重复读和串行化,分别解决并发问题如脏读、不可重复读和幻读。不同隔离级别在效率和安全性间权衡,例如读未提交允许未提交变更可见,而串行化通过锁保证安全但可能降低效率。在不同隔离级别下,事务看到的数据状态会有所变化,例如在可重复读级别,事务始终看到初始数据,而在串行化级别,事务会等待其他事务完成再继续,避免数据冲突。
278 10
|
3天前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
4天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】分库分表
分库分表是一种数据库架构设计的方法,用于解决大规模数据存储和处理的问题。 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储,这就相当于原来一台服务器提供服务现在改成多台服务器组成集群共同提供服务。
28 8
|
4天前
|
存储 SQL 关系型数据库
MySQL万字超详细笔记❗❗❗
MySQL万字超详细笔记❗❗❗
78 1
MySQL万字超详细笔记❗❗❗
|
4天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MySQL总结
MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
240 8
|
4天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
204 6
|
4天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
205 4