mysql
数据库的一些设置
-
开放远程登录
grant all privileges on *.* to 'root'@'%' identified by 'wangshiyi';by后面是密码 flush privileges; //刷新权限
高版本数据库不能用这个命令要分步执行
create user 'root'@'%' identified by 'wangshiyi' grant all privileges on *.* to 'root'@'%' with grant option; flush privileges;刷新权限
-
MySQL GROUP BY 报错设置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启mysql服务
如果存储过程还有问题,就修改一下然后重新保存一下存储过程(比如在后面加个空格)
记住以后配置文件需要先改,再转移数据库数据
关于数据库优化
- 语句前加EXPLAIN
执行后会告诉你哪里缺少索引,执行的速度之类的
一些查询
- 字段的字符集不匹配
$query->whereRaw("BINARY ".$v['field']." ".$v['condition']." BINARY '".$v['parameter'] . "'");
sql server
一些查询及用法
- sql server 时间排序,空时间放前面
$query->orderByRaw("sort desc,case when status_date is null then 1 else 0 end desc,status_date desc")
- laravel seqserver存储过程查询报错
报错:The active result for the query contains no fields.
在存储过程前加
set nocount on
例如
ALTER PROCEDURE TESTPROC
@N INT
AS
BEGIN
SET NOCOUNT ON;
IF @N=1
RETURN 0;
SET NOCOUNT OFF;
PRINT '2';
END
php查询多结果集
- 不带参
$dbh = DB::connection()->getPdo();
$stmt = $dbh->prepare("exec SP_ORDERSEC_GETORDERID");
$stmt->execute();
$stmt->nextRowset();//下一个结果集
$rowset_2 = $stmt->fetch();
//不关闭后面就无法用DB
$stmt = null;//关闭pdo事务连接
$order_id = trim($rowset_2['ORDER_ID']);//第二个结果集
- 带参数
$dbh = DB::connection()->getPdo();
$stmt = $dbh->prepare("exec sp_demo_get ?,?,?,?");
$nReturnValue = "参数1";
$strReturnValue = "参数2";
$strSearchValue = "参数3";
$strSearchValues = "参数4";
$stmt->bindParam(1, $nReturnValue, \PDO::PARAM_STR);
$stmt->bindParam(2, $strReturnValue, \PDO::PARAM_STR);
$stmt->bindParam(3, $strSearchValue , \PDO::PARAM_STR);
$stmt->bindParam(4, $strSearchValues , \PDO::PARAM_STR);
$stmt->execute();
$stmt->nextRowset();
$rowset_2 = $stmt->fetch();
$stmt = null;//关闭pdo事务连接
$order_id = trim($rowset_2['k_wage']);//工令单ID,第二个结果集