mysql函数

SQL查询语句使用rand()的执行效率与优化

陌路散爱 提交于 2020-03-02 16:37:52
若要在 i ≤ R ≤ j 这个范围得到一个随机整数 R ,需要用到表达式 FLOOR( i + RAND() * ( j – i + 1))。例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机整数, 可使用以下语句: SELECT FLOOR(7 + (RAND() * 6)); 从 Mysql 表中随机读取数据不难,方法还挺多的,但是如果要考虑效率,得到一个快速的高效率的方法,那就不是一件简单的事情了(至少对我来说不简单)。 随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password……)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率相当相当的低!效率不行,切忌使用! SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) *

php操作mysql数据库

别等时光非礼了梦想. 提交于 2020-03-02 15:38:53
[php] <span style= "font-family:Arial,Helvetica,sans-serif">在php操作数据库过,会频繁对数据库进行各种操作,所以,php提供函数接口,很好的支持了对各种数据库的支持,包括MySql数据库。 php函数接口,事实上是对sql语句的分装</span> 1.数据库的连接 要使用数据库,首先需要连接数据库,链接命令为 [php] mysql_connect(servername, user, password); servername 为服务器名,可选项,默认为 localhost:3306; user 是用户名,可选,默认拥有服务器进程的用户名; pasword 规定登录所用的密码,可选,默认是""; [php] <?php $con=mysql( "localhost", "root", "password"); if( $con) { die( "couldn't connect!"); } //使用结束后,关闭链接 mysql_close( $con); ?> 另外可以用mysql_pconnect([host][:port][user][password]),此函数与mysql_connect函数功能基本相同,区别在于: 1. 当数据库操作结束后,由mysql_connect函数建立的连接将自动关闭, 而mysql

PHP之mysql笔记

倾然丶 夕夏残阳落幕 提交于 2020-03-02 15:31:47
1 :在 php 中提供了两个用于连接 MySQL 数据库服务器的函数。 (1)int mysql_connect(hostname[:port][:/path/to/socket],user,pass). (2)Int mysql_pconnect(hostname[:port][:/path/to/socket],user,pass). 这两个连接函数的区别: a: 使用 mysql_pconnect( ) 建立的是一种“牢固的”( persistent )连接,即在对数据库的操作结束后 , 已建的连接并不会被断开,而是一直保留着,即使使用 mysql_close() 也不能终止连接。而 mysql_connect() 会在结束了对数据库的操作后,自动的关闭已建立的连接。 b: 使用 mysql_pconnect() 时,系统总是先检查是否已经存在使用了同样的主机名、用户名和密码的“牢固连接”,如果有则直接返回该连接的连接号,而不会建立新连接。而在使用 mysql_connect() 时,如果用户再次使用相同的参数建立连接,系统不会建立新的连接,而是返回旧的连接号。 2 : PHP 对 MySQL 数据库的库级操作共有 3 种, 它 们主要是:创建数据库、选择数据库和删除数据库。这 3 个操作分别由 3 个函数来完成,它们是: int mysql_create_db

php中安全模式safe_mode配置教程及详解

喜你入骨 提交于 2020-03-02 07:26:50
(1) 打开php的安全模式   php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),   同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,   但是默认的php.ini是没有打开安全模式的,我们把它打开:   safe_mode = on (2) 用户组安全   当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同   组的用户也能够对文件进行访问。   建议设置为:   safe_mode_gid = off   如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要   对文件进行操作的时候。 (3) 安全模式下执行程序主目录   如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:   safe_mode_exec_dir = D:/usr/bin   一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,   然后把需要执行的程序拷贝过去,比如:   safe_mode_exec_dir = D:/tool/exe   但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:   safe_mode_exec_dir = D:/usr/www (4

mysql的sql_mode合理设置

泄露秘密 提交于 2020-03-02 02:55:20
mysql的sql_mode合理设置 sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题 sql_mode常用值如下: ONLY_FULL_GROUP_BY: 对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中 NO_AUTO_VALUE_ON_ZERO: 该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。 STRICT_TRANS_TABLES: 在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制 NO_ZERO_IN_DATE: 在严格模式下,不允许日期和月份为零 NO_ZERO_DATE: 设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。 ERROR_FOR_DIVISION_BY_ZERO: 在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL NO_AUTO_CREATE

Mysql:"select" is not valid at this position for this server verision,expecting:"(",with

不问归期 提交于 2020-03-01 22:49:23
今天两段看起来一样的代码,却一个报错,一个不报错。 报错提示:Mysql:"select" is not valid at this position for this server verision,expecting:"(",with 原因:count 与 (*) 中间有空格会导致语法出错。 解决方案:尝试删除“ COUNT”和方括号之间的空格。如下图。就没有错误提示了。 另外:MySQL中使用函数时,与后面括号不能之间不能加空格。 来源: CSDN 作者: jingyublog 链接: https://blog.csdn.net/aoban0653/article/details/104598738

Mysql基础(二)-常见函数与查询

依然范特西╮ 提交于 2020-03-01 15:28:27
进阶四:常见函数 功能:类似于java 中的方法,将一组逻辑语句分装在方法体重,对外暴露方法名 调用: select 函数名(实参列表)【from 表】 特点: 1. 叫什么(函数名) 2. 干什么(函数功能) 分类: 单行函数 如:concat,length,ifnull等 2.分组函数 功能:供统计使用,又称为统计函数,聚合函数,组函数等 A. 单行函数 一.字符函数 1. length :用于获取参数值的 字节 个数 `select length('john'); 2. concat : 拼接字符串 select concat(last_name,'_',first_name) 姓名 from employees; 3. upper ,lower select upper('john'); 变大写 select lower('JOHN'); 变小写 4. substr,substring 用于截取子字符串,注意:索引从1开始 截取从指定索引处后面所有字符 select substr('李莫愁爱上了陆展元',7) out_put 截取从指定索引处指定字符长度的字符 select substr('李莫愁爱上了陆展元',1,3) out_put 案例:姓名中首字母大写,其他字符是小写然后用_拼接,显示出来 select concat(upper(substr(last_name,1

mysql详解

佐手、 提交于 2020-03-01 11:59:43
mysql命令 mysql登录参数: -D, --database 指定数据库 --delimiter 指定分隔符 -h, --host 指定服务器地址 -p, --password 指定密码 -P, --port 指定端口 --prompt 设置提示符 -u, --user 指定用户名 -V, --version 输出版本信息并退出 修改命令提示符: 通过参数指定提示符, mysql -uroot -p123456 --prompt 提示符 通过命令指定提示符, mysql> prompt 提示符; 提示符: \D 完整的日期 \d 当前数据库 \h 服务器名称 \u 当前数据库 常用命令: SELECT VERSION(); 显示当前服务器版本 SELECT NOW(); 显示当前日期时间 SELECT USER(); 显示当前用户 mysql语句规范: 1. 关键字与函数名称全部大写 2. 数据库名称、表名称、字段名称全部小写 3. SQL语句必须以分号结尾 操作数据库 CREATE DATABASE 创建数据库 ALTER DATABASE 修改数据库 DROP DATABASE 删除数据库 创建数据库: {} 为必选项; | 表示或; [] 为可选项。下同 CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [

linux-deploy 安装MySQL,报错解决 ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause'

偶尔善良 提交于 2020-03-01 11:55:16
报错: ERROR 1054 (42S22) at line 1: Unknown column 'password' in 'where clause' 很诡异的错误。。。能正常启动和登入 error.log 中没有错误提示 查找原因: 启用一般日志 vi /etc/mysql/mysql.conf.d/mysqld.cnf 将general_log=1 注释去掉 登入mysql 命令 show variables like 'general%' 查看一般日志已启用,我的已被关闭请无视,并获得日志保存地址 查看一般日志: vi /var/lib/mysql/localhost.log 看到如下命令: SELECT count(*) FROM mysql.user WHERE user='root' and password='' 这也解释了为什么会报这个错 原因分析:这是在做启动mysql的一个root账户检查,但是由于5.7以后mysql.user表中的password字段被修改为了authentication_string,但是这个sql语句并没有更改,所以报错。。。。 所以解决办法就是找到这个sql语句,将其中的password 改为authentication_string 就可以了 方法: 打开配置文件下的debian-start vi /etc/mysql

mysql , java length

你离开我真会死。 提交于 2020-03-01 01:15:56
mysql length是mysql的一个用来来获取字符串长度的内置函数方法, 同样的获取字符串长度的还有char_length. length: 是计算字段的长度, utf8编码下,一个汉字是算三个字符,一个数字或字母算一个字符。 其他编码下,一个汉字算两个字符, 一个数字或字母算一个字符。 例子1: 查看mysql字符串的长度 SELECT LENGTH("要查看长度的mysql字段/mysql字符串"); 例子2: 根据记录的某个字段长度排序 SELECT * FROM table WHERE 1 ORDER BY LENGTH(name) ASC; char_length:在任何编码下, 不管汉字还是数字或者是字母都算是一个字符. CHARACTER_LENGTH(str) CHARACTER_LENGTH()是CHAR_LENGTH()的同义词。 BIT_LENGTH(str) 返回2进制长度. 转载:http://yishouce.com/mysql/func/length CREATE TABLE `tableName` ( `id` int(16) NOT NULL AUTO_INCREMENT, `name` varchar(6) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1