sql promapt怎么不加表前缀

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql promapt怎么不加表前缀相关的知识,希望对你有一定的参考价值。

下载了一个sql promapt,但是每次我输入的时候,都会自动给我在表的前面增加前缀,就是我的登录名,怎么设置软件不自动加前缀呢?

方法一:使用sql语句修改mysql数据库表前缀名
首先我们想到的就是用sql查询语句来修改,这个方法也很方便,只需进入无忧主机控制面板——phpmyadmin登入后,在运行 SQL 查询框中输入如下语名就可以了。
ALTER TABLE 原表名 RENAME TO 新表名;
如:
ALTER TABLE old_post RENAME TO new_post;
Sql查询语句有一个缺点,那就是一句SQL语句只能修改一张数据库的表名,如果你要精确修改某一张表,很好用。如果数据库表很多的话,不推荐使用。有木有,批量修改多个数据库表前缀名称的方法类?有的,请看下面的介绍
方法二:php脚本批量修改mysql数据库表前缀
下面无忧主机(www.51php.com)小编收集的一个快速批量的修改数据表前缀的方法,小编已经测试,成功修改。如果你需要,请参考借鉴如下:
1、将下面的代码复制到记事本,根据自己人情况修改好数据库信息,并保存了51php.php。再上传您网站的根目录。您可以直接下载mysql数据库前缀名批量修改脚步:修改mysql数据库表前缀名。
<?php
//设置好相关信息
$dbserver=\'localhost\';//连接的服务器一般为localhost
$dbname=\'y8n9nghmze_shop\';//数据库名
$dbuser=\'y8n9nghmze_user\';//数据库用户名
$dbpassword=\'admin\';//数据库密码
$old_prefix=\'ecs_\';//数据库的前缀
$new_prefix=\'51php_\';//数据库的前缀修改为
if (
!is_string($dbname) || !is_string($old_prefix)|| !is_string($new_prefix) )

return false;

if (!mysql_connect($dbserver,
$dbuser, $dbpassword))
print \'Could not connect to mysql\';
exit;


//取得数据库内所有的表名

$result =
mysql_list_tables($dbname);

if (!$result)

print "DB Error, could not
list tables\\n";

print \'MySQL Error: \' .
mysql_error();

exit;



//把表名存进$data

while ($row =
mysql_fetch_row($result))

$data[] = $row[0];


//过滤要修改前缀的表名
foreach($data as $k => $v)

$preg = preg_match("/^($old_prefix1)([a-zA-Z0-9_-]+)/i",
$v, $v1);
if($preg)

$tab_name[$k] =
$v1[2];
//$tab_name[$k]
= str_replace($old_prefix, \'\', $v);


if($preg)

// echo \'<pre>\';
// print_r($tab_name);
// exit();
//批量重命名
foreach($tab_name as $k =>
$v)

$sql = \'RENAME TABLE
`\'.$old_prefix.$v.\'` TO `\'.$new_prefix.$v.\'`\';
mysql_query($sql);

print 数据表前缀:.$old_prefix."<br>".已经修改为:.$new_prefix."<br>";

else
print 您的数据库表的前缀.$old_prefix.输入错误。请检查相关的数据库表的前缀;
if ( mysql_free_result($result) )
return true;


?>

2、 在浏览器输入访问您的网址/51php.php.数据库表的前缀就可以修改成功了。
参考技术A

SQL Prompt菜单\\Options\\Qualification\\,取消【Qualify column names with table name】的勾选,然后单击【OK】。如图:

MySQL 进阶 索引 -- 索引使用原则(验证索引效率最左前缀法则范围查询索引失效情况SQL提示覆盖索引前缀索引单列索引与联合索引)索引设计原则

文章目录

1. 索引使用原则


1.1 验证索引效率

tb_sku 这张表中准备了 1000w 的记录。

这张表中id为主键,有主键索引,而其他字段是没有建立索引的。 我们先来查询其中的一条记录,看看里面的字段情况,执行如下SQL

select * from tb_sku where id = 1\\G;

可以看到即使有1000w的数据,根据id进行数据查询,性能依然很快,因为主键id是有索引的。 那么接下来,我们再来根据 sn 字段进行查询,执行如下SQL

SELECT * FROM tb_sku WHERE sn = '100000003145001';


我们可以看到根据sn字段进行查询,查询返回了一条数据,结果耗时 20.78sec,就是因为sn没有索引,而造成查询效率很低。

那么我们可以针对于sn字段,建立一个索引,建立了索引之后,我们再次根据sn进行查询,再来看一下查询耗时情况。

create index idx_sku_sn on tb_sku(sn) ; 


然后再次执行相同的SQL语句,再次查看SQL的耗时。

SELECT * FROM tb_sku WHERE sn = '100000003145001';


我们明显会看到,sn字段建立了索引之后,查询性能大大提升。建立索引前后,查询耗时都不是一个数量级的。


1.2 最左前缀法则

如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将会部分失效(后面的字段索引失效)。

注意 : 最左前缀法则中指的最左边的列,是指在查询时,联合索引的最左边的字段(即是第一个字段)必须存在,与我们编写SQL时,条件编写的先后顺序无关。

以 tb_user 表为例,我们先来查看一下之前 tb_user 表所创建的索引。

tb_user表的建表语句

CREATE TABLE `tb_user` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(50) NOT NULL COMMENT '用户名',
  `phone` varchar(11) NOT NULL COMMENT '手机号',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `profession` varchar(11) DEFAULT NULL COMMENT '专业',
  `age` tinyint unsigned DEFAULT NULL COMMENT '年龄',
  `gender` char(1) DEFAULT NULL COMMENT '性别 , 1: 男, 2: 女',
  `status` char(1) DEFAULT NULL COMMENT '状态',
  `createtime` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_user_phone` (`phone`),
  KEY `idx_user_name` (`name`),
  KEY `idx_user_pro_age_sta` (`profession`,`age`,`status`),
  KEY `idx_email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统用户表';

INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('吕布', '17799990000', 'lvbu666@163.com', '软件工程', 23, '1', '6', '2001-02-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('曹操', '17799990001', 'caocao666@qq.com', '通讯工程', 33, '1', '0', '2001-03-05 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('赵云', '17799990002', '17799990@139.com', '英语', 34, '1', '2', '2002-03-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('孙悟空', '17799990003', '17799990@sina.com', '工程造价', 54, '1', '0', '2001-07-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('花木兰', '17799990004', '19980729@sina.com', '软件工程', 23, '2', '1', '2001-04-22 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('大乔', '17799990005', 'daqiao666@sina.com', '舞蹈', 22, '2', '0', '2001-02-07 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('露娜', '17799990006', 'luna_love@sina.com', '应用数学', 24, '2', '0', '2001-02-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('程咬金', '17799990007', 'chengyaojin@163.com', '化工', 38, '1', '5', '2001-05-23 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('项羽', '17799990008', 'xiaoyu666@qq.com', '金属材料', 43, '1', '0', '2001-09-18 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('白起', '17799990009', 'baiqi666@sina.com', '机械工程及其自动 化', 27, '1', '2', '2001-08-16 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('韩信', '17799990010', 'hanxin520@163.com', '无机非金属材料工 程', 27, '1', '0', '2001-06-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('荆轲', '17799990011', 'jingke123@163.com', '会计', 29, '1', '0', '2001-05-11 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('兰陵王', '17799990012', 'lanlinwang666@126.com', '工程造价', 44, '1', '1', '2001-04-09 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('狂铁', '17799990013', 'kuangtie@sina.com', '应用数学', 43, '1', '2', '2001-04-10 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('貂蝉', '17799990014', '84958948374@qq.com', '软件工程', 40, '2', '3', '2001-02-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('妲己', '17799990015', '2783238293@qq.com', '软件工程', 31, '2', '0', '2001-01-30 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('芈月', '17799990016', 'xiaomin2001@sina.com', '工业经济', 35, '2', '0', '2000-05-03 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('嬴政', '17799990017', '8839434342@qq.com', '化工', 38, '1', '1', '2001-08-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('狄仁杰', '17799990018', 'jujiamlm8166@163.com', '国际贸易', 30, '1', '0', '2007-03-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('安琪拉', '17799990019', 'jdodm1h@126.com', '城市规划', 51, '2', '0', '2001-08-15 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('典韦', '17799990020', 'ycaunanjian@163.com', '城市规划', 52, '1', '2', '2000-04-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('廉颇', '17799990021', 'lianpo321@126.com', '土木工程', 19, '1', '3', '2002-07-18 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('后羿', '17799990022', 'altycj2000@139.com', '城市园林', 20, '1', '0', '2002-03-10 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status, createtime)
VALUES ('姜子牙', '17799990023', '37483844@qq.com', '工程造价', 29, '1', '4', '2003-05-26 00:00:00');


在 tb_user 表中,有一个联合索引,这个联合索引涉及到三个字段,顺序分别为:profession,age,status。

对于最左前缀法则指的是,查询时,最左边的列,也就是profession必须存在,否则索引全部失效。而且中间不能跳过某一列,否则该列后面的字段索引将失效。 接下来,我们来演示几组案例,看一下具体的执行计划:

explain
select *
from tb_user
where profession = '软件工程'
  and age = 31
  and status = '0';

explain
select *
from tb_user
where profession = '软件工程'
  and age = 31;

explain
select *
from tb_user
where profession = '软件工程';

以上的这三组测试中,我们发现只要联合索引最左边的字段 profession 存在,索引就会生效,只不过索引的长度不同。 而且由以上三组测试,我们也可以推测出profession字段索引长度为47age字段索引长度为2status字段索引长度为5

explain
select *
from tb_user
where age = 31
  and status = '0';

explain
select *
from tb_user
where status = '0';


而通过上面的这两组测试,我们也可以看到索引并未生效,原因是因为不满足最左前缀法则,联合索引最左边的列profession不存在。

explain
select *
from tb_user
where profession = '软件工程'
  and status = '0';


上述的SQL查询时,存在profession字段,最左边的列是存在的,索引满足最左前缀法则的基本条件。但是查询时,跳过了age这个列,所以后面的列索引是不会使用的,也就是索引部分生效,所以索引的长度就是47

思考题:

当执行SQL语句(查询条件的顺序发生了变化):

explain
select *
from tb_user
where age = 31
  and status = '0'
  and profession = '软件工程';

时,是否满足最左前缀法则,走不走上述的联合索引,索引长度?

可以看到,是完全满足最左前缀法则的,索引长度54,联合索引是生效的。


1.3 范围查询

联合索引中,出现范围查询(>,<)范围查询右侧的列索引失效

explain
select *
from tb_user
where profession = '软件工程'
  and age > 30
  and status = '0';

当范围查询使用 >< 时,走联合索引了,但是索引的长度为49,就说明范围查询右边的status字段是没有走索引的。

explain
select *
from tb_user
where profession = '软件工程'
  and age >= 30
  and status = '0';

当范围查询使用 >=<= 时,走联合索引了,但是索引的长度为54,就说明所有的字段都是走索引的。

所以,在业务允许的情况下,尽可能的使用类似于 >= 或 <= 这类的范围查询,而避免使用 > 或 < 。


1.4 索引失效情况


1.4.1 索引列运算

不要在索引列上进行运算操作,索引将失效。

tb_user 表中,除了前面介绍的联合索引之外,还有一个索引,是 phone 字段的单列索引。


A. 当根据phone字段进行等值匹配查询时,索引生效。

explain
select *
from tb_user
where phone = '17799990015';


B. 当根据phone字段进行函数运算操作之后,索引失效。

explain
select *
from tb_user
where substring(phone, 10, 2) = '15';


1.4.2 字符串不加引号

字符串类型字段使用时,不加引号,索引将失效。

接下来,我们通过两组示例,来看看对于字符串类型的字段,加单引号与不加单引号的区别:

第一组示例:

explain
select *
from tb_user
where profession = '软件工程'
  and age = 31
  and status = '0';

explain
select *
from tb_user
where profession = '软件工程'
  and age = 31
  and status = 0;

第二组示例:

explain
select *
from tb_user
where phone = '17799990015';

explain
select *
from tb_user
where phone = 17799990015;

经过上面两组示例,我们会明显的发现,如果字符串不加单引号,对于查询结果,没什么影响,但是数据库存在隐式类型转换,索引将失效。


1.4.3 模糊查询

如果包含头部模糊匹配,索引失效

接下来,我们来看一下这三条SQL语句的执行效果,查看一下其执行计划:

由于下面查询语句中,都是根据profession字段查询,符合最左前缀法则,联合索引是可以生效的,我们主要看一下,模糊查询时,%加在关键字之前,和加在关键字之后的影响。

explain
select *
from tb_user
where profession like '软件%';

explain
select *
from tb_user
where profession like '%工程';

explain
select *
from tb_user
where profession like '%工%';

以上是关于sql promapt怎么不加表前缀的主要内容,如果未能解决你的问题,请参考以下文章

路由技术随心谈

达梦数据库查询时如何省略表前面的模式名

MySQL 进阶 索引 -- 索引使用原则(验证索引效率最左前缀法则范围查询索引失效情况SQL提示覆盖索引前缀索引单列索引与联合索引)索引设计原则

MySQL 进阶 索引 -- 索引使用原则(验证索引效率最左前缀法则范围查询索引失效情况SQL提示覆盖索引前缀索引单列索引与联合索引)索引设计原则

字段或者属性命名加前缀规范

用于搜索最长公共前缀的 SQL 查询