Windows 命令行启动MySQL数据库

要想从命令行启动mysqld服务器,应当启动控制台窗口(或“DOS window”)并输入命令:

C:\> C:\MySQL\MySQL Server 5.0\bin\mysqld

根据系统中MySQL安装位置的不同,前面的例子中使用的路径也不同。

在非NT版本的Windows中,在后台启动mysqld。也就是,服务器启动后,应当可以看见后面的命令提示。

如果用该方法在Windows NT、2000、XP或2003中启动服务器,服务器则在前台运行,在服务器退出前,不会出现命令提示。因此,当服务器运行时,应当打开另一个控制台窗口来运行客户端程序。

下述命令可以停止MySQL服务器:

C:\> C:\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown

该命令调用MySQL管理工具mysqladmin连接服务器并告知它关闭服务。该命令使用MySQL的root用户连接,这是MySQL权限系统中的默认管理账户。请注意MySQL权限系统中的用户完全独立于Windows下的登录用户。

如果mysqld不能启动,检查错误日志看看服务器是否写入了显示问题原因的任何消息。错误日志位于C:\MySQL\MySQL Server 5.1\data目录中。是带后缀.err的文件。还可以尝试将服务器启动为mysqld –console;此时,可以从窗口中获得一些有用的信息,可以帮助解决问题。

最后选项是用–standalone –debug启动mysqld。此时,mysqld 写入日志文件C:\mysqld.trace,应当包含mysqld不启动的原因。

使用mysqld –verbose –help显示mysqld的所有选项。


关注公众号,了解更多it技术(it问答网

Mysql按指定顺序排序的两种写法

SELECT `ID` FROM wp_posts WHERE `ID` in (1,2,3,4,5) ORDER BY FIELD(`ID`,5,4,3,1,2); // 纯数字字段不用处理引号,比较好拼接
SELECT `ID` FROM wp_posts WHERE `ID` in (1,2,3,4,5) ORDER BY FIND_IN_SET(`post_title`,'A,B,C,D,E'); // 一个引号全包住,搞定字符值字段
 
-- 注意:第一个参数不能是字符串,否则不起作用
-- 性能差异
SELECT id FROM cbd_hots WHERE id in (155,154) ORDER BY FIELD(`id`,154,155); // 纯数字字段不用处理引号,比较好拼接

亲测有效!

针对tp5中的这样的写法[orderRaw 代替order  ] 请使用orderRaw方法替代order

有业务需求如下:

select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
但是也可以写成这样

->order("field(id,3,6,9,1,2,5,8,7)")
但是官方文档说了,当你的order排序中使用了SQL函数的时候,请使用orderRaw方法替代order 。

实践有效:

return Db::connect(config('database.sqla'))->name("hots")->where("id in (".$hots_ids.")")->orderRaw("field(id,".$hots_ids.")")->select();

 

 


关注公众号,了解更多it技术(it问答网

SQL用了Union后的排序问题

有小伙伴反映:

最近使用SQL语句进行UNION查询,惊奇的发现:SQL没问题,UNION查询也没问题,都可以得到想要的结果,可是在对结果进行排序的时候,却出问题了。

 

SELECT a.id,a.username,a.mobile,a.time,a.leader,a.time
FROM (SELECT `id`,`username`,`mobile`,`time`,id AS leader 
	FROM `grouporder_leader` WHERE `courseid` = 21 AND `merchid` = 23 AND `status` = 1 
	UNION ALL 
	SELECT leadorderid,username,mobile,time,null 
	FROM `grouporder_partner` WHERE courseid=21 and status=1 and merchid=23
) AS a 
ORDER BY a.time DESC

注意事项:

1、必须声明临时表;

2、必须使用别名


关注公众号,了解更多it技术(it问答网

mysql-blog类型

BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。根据Eric
Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。

mysql BLOB类型

MySQL中,BLOB是个类型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同。
MySQL的四种BLOB类型
类型 大小(单位:字节)
TinyBlob 最大 255
  Blob 最大 65K
  MediumBlob 最大 16M
  LongBlob 最大 4G

如果要插入大数据量,需要修改mysql的配置文件【linux修改etc/my.cnf】:
[mysqld]
max_allowed_packet = 16M

将max_allowed_packet改成合适的值,具体此变量的解释请参照:http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html


关注公众号,了解更多it技术(it问答网

mysql截取字符串转成数字并比较排序

 SUBSTRING_INDEX([列名],[分割符],[段数])
 列名:要分割列里内容的列名
 分割符:用来切割的符号
 段数:切割后取的长度
select showids,SUBSTRING_INDEX(showids,',',-1) as x from cbd_products 
order by x asc

select showids from cbd_products  order by (SUBSTRING_INDEX(showids,',',-1)+0) asc

mysql特性(+0会自动转化为数字),作数值的大小比较!
tp5中的应用: $list=$obj->db->where($tj)->order("(SUBSTRING_INDEX(showids,',',-1)+0) asc,id desc")->select();

参考url:https://www.cnblogs.com/cuiyf/p/10077707.html

其他:mysql的查询中怎么截取字符串:

从左开始截取字符串left(str, length);

从右开始截取字符串right(str, length);

截取字符串substring(str, pos, length),说明:substring(被截取字段,从第几位开始截取,截取长度);

按关键字截取字符串substring_index(str,delim,count),说明:substring_index(被截取字段,关键字,关键字出现的次数)。


关注公众号,了解更多it技术(it问答网

MySQL 数据库直接复制文件,InnoDB类型表不能用解决方案

不知道各位小伙伴有没有注意了,项目搬迁中,直接拷贝InnoDB的表文件不可用问题。解决过程如下:

一、 把data下的相关库文件拷贝至目的文件目录下;

二、再把data目录下的ibdata1拷贝至目的目录;

数据库运行ok!

总结:

如类型是MyISAM, 数据文件则以”Table.frm””Table.MYD””Table.MYI””三个文件存储于”/data/$databasename/”目录中.
如类型是InnoDB, 数据文件则存储在”$innodb_data_home_dir/″中的ibdata1文件中(一般情况),结构文件存在于table_name.frm中.
MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。

1:MyISAM类型的数据文件可以在不同操作系统中COPY,这点很重要,布署的时候方便点。(只需要拷贝 数据库名字文件夹下面的文件,这样数据库就拷贝完了)

2: InnoDB类型的 要注意多拷贝 ibdata1 , 最好不要是直接复制文件夹,而是应该用sql导入导出

整理:徐多蔚  xuduowei.com


关注公众号,了解更多it技术(it问答网

宝塔面板mysql怎么用mysql-front或者navicat 连接数据库呢

因为不是很习惯phpmyadmin,所以在本地使用了Navicat进行数据库远程连接,但是在连接数据库的时候出现了各种问题。因为从宝塔后台进行登录的时候,是直接进入数据库的,宝塔的phpmyadmin的登录端口是888,然后就在登录的时候将端口改为888,后来尝试登录的时候,数据库账号密码都是正确的,却提示错误信息无法登录。这里大家不要被phpmyadmin的登录端口888所迷惑了,这只是登录phpmyadmin进入数据库的端口,并不是MySQL的端口,MySQL的端口依然是3306,这个时候将Navicat中的端口改为3306即可。

今天想使用mysql-front 连接 宝塔服务器的其中一个虚拟主机的mysql数据库,发现填写信息,端口填写了3306,无法链接,看了很多文章,都是无效,一概而论,对新手误解太大。下面具体就解决步骤。

第一步:打开阿里云服务器ECS,配置安全组放开3306端口。【一般情况下,这个不同操作,因为服务器都默认开启了这个端口】。

第二步:宝塔 找到 安全 这个菜单。开放3306端口。

第三步:宝塔环境->数据库->对应的用户权限,选择全部用户。

最后就可以用此用户开心愉快的链接了。

 

 


关注公众号,了解更多it技术(it问答网

mysql获取某个表的所有字段名

mysql安装成功后可以看到已经存在mysql、information_schema和test这个几个数据库,information_schema库中有一个名为COLUMNS的表,这个表中记录了数据库中所有表的字段信息。知道这个表后,获取任意表的字段就只需要一条select语句即可。例如:

select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name';   (自测有效)

上述的做法有一点问题,如果多个数据库中存在你想要查询的表名,那么查询的结果会包括全部的字段信息。通过DESC information_schema.COLUMNS可以看到该表中列名为TABLE_SCHEMA是记录数据库名,因此下面的写法更为严格

select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name' and table_schema = 'your_db_name';  

 


关注公众号,了解更多it技术(it问答网