子查询
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…
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');
准则
- 两表关联用自增id来关联
company_id和odds_typeid的值并不够散列(company_id表少于1k条就表示不够散列),不必要创建索引。
唯一索引
多字段确定唯一索引,则md5建立一个字段wysy varchat(100)
$wysy = md5(hp_season_id.'_'.hp_team_selfid.'_'.'score_type_id)
表复制
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;
查找数据库文件位置使用命令
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方法,例如:
- $Form = D("Form");
- // 获取标题
- 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
- user=user = user=User->getByName('liu21st');
1**、使用select方法**
当select方法的参数为false的时候select(false),表示不进行查询只是返回构建SQL,例如:
- // 首先构造子查询SQL
- 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");