草庐IT

SELECT-INSERT

全部标签

mysql - 用户在 MySQL 中具有 SELECT 权限的表的列表

精简版:如何编写SQL过程来列出特定用户可以访问MySQL数据库中的几个表中的哪些?更长的版本:我正在编写一个多用户应用程序,用于访问包含公司多个分支机构数据的数据库。该数据库有许多任何用户都可以访问的查找表,每个分支都有一个只有授权用户可以访问的表。我的策略是:编写一个存储过程,返回用户对其具有SELECT权限的相关表的列表。从应用程序中调用过程。如果只返回一个表,则使用它,否则让用户选择他们想要访问的分支(例如,对于经理)。我不知道如何编写这样的存储过程。SHOWGRANTSFORCURRENT_USER是一种明显的可能性,但解析如下:GRANTSELECTONCompany.Br

MySQL INSERT IF NOT EXIST else DELETE 行

我有一张表将另外2个表链接在一起。我有一个复选框列表,当其中一个被选中时,它会通过ajax将值发送到服务器。我想做的是,如果值不在数据库中,则插入它们(选中),或者如果它们存在,则删除它们(未选中)有没有办法不用写几个查询就可以做到?我知道插入/更新并不难,但是删除呢? 最佳答案 您可以随时删除,如果受影响的行为0,则插入。简单、简单且有效。 关于MySQLINSERTIFNOTEXISTelseDELETE行,我们在StackOverflow上找到一个类似的问题:

mysql - SQL Select 基于经纬度的半径搜索

我有2个表:Events:-id-name-placePlaces:-id-name-lat-lng我想从current检索10KMradius(基于地点lat&lng)内的所有事件lat和lng。我该怎么做?谢谢! 最佳答案 如果您愿意使用扩展,MySQL5.6及更高版本中的地理空间扩展旨在解决此类问题。您需要在places表上建立空间索引:ALTERTABLEplacesADDSPATIALINDEXlat,lngselectnamefromplacesorderbyst_distance(point(@lng,@lat),po

php - 使用 IN 子句与多个 SELECT

我想知道其中哪一个会更快(性能方面)查询(如果这很重要,在MySQL5.xCentOS5.x上):SELECT*FROMtable_nameWHEREid=1;SELECT*FROMtable_nameWHEREid=2;...SELECT*FROMtable_nameWHEREid=50;或者...SELECT*FROMtable_nameWHEREidIN(1,2,...,50);我有大约50个id要查询。我知道数据库连接通常很昂贵,但我发现IN子句[有时]也不是那么快。 最佳答案 我很确定第二个选项会给你最好的性能;一个查询,

php - 在不求助于 mysql_insert_id() 的情况下,在单个查询中将 SQL 关系插入到 2 个表

我对SQL并不完全陌生,但我对MYSQL感到生疏和挣扎(使用PhPMyAdmin)...看了这个:MySQLinserttomultipletables(relational)和其他一些相关主题,但还没有找到答案。我正在简化示例以阐明要点。如果你有两个表:'table1'has:id(primarykey,auto-increment),description(text)'table2'has:id(primarykey,auto-increment),title(text),description_id(int)如何创建单个INSERT语句以便description_id存储tabl

sql - 带有 last_insert_id() 的 Mysql 多行插入选择语句

好的。所以简而言之,我正在尝试执行INSERTSELECT,例如:STARTTRANSACTION;INSERTINTOdbNEW.entity(commonName,surname)SELECTnamefirst,namelastFROMdbOLD.user;SET@key=LAST_INSERT_ID();INSERTINTOdbNEW.user(userID,entityID,other)SELECTuser_id,@key,otherFROMdbOLD.user;COMMIT;当然,@key不会从每个插入返回每个后续的LAST_INSERT_ID(),而是仅从最后一个插入返回I

MySQL InnoDB 在 SELECT 上使用排他锁死锁(用于更新)

我这样做是为了确保这个进程的实例只运行一次(伪代码php/mysqlinnodb):STARTTRANSACTION$rpid=SELECT`value`FROMlocksWHEREname="lock_name"FORUPDATE$pid=posix_getpid();if($rpid>0){$isRunning=posix_kill($rpid,0);if(!$isRunning){//isRunningINSERTINTOlocksvalues('lock_name',$pid)ONDUPLICATEKEYUPDATE`value`=VALUES(`value`)}else{RO

mysql - SELECT COUNT(*) 贵吗?

您认为在每次页面加载时从一个非常大的表(如50K行)中计算条目是个好主意吗?SELECTCOUNT(*)FROMtable现在我有大约2000行并且看起来非常快,我没有看到页面加载有任何延迟:)但是该表应该达到50K个条目......我很好奇它会如何加载(ps:这个显示行数的页面是私有(private)的,在管理界面中,不是公开的) 最佳答案 COUNT(*)isoptimizedtoreturnveryquicklyiftheSELECTretrievesfromonetable,noothercolumnsareretrieve

MySQL 日期时间 : insert a date with timezone offset

我尝试将时间戳插入“日期”中:INSERTINTOdatesVALUES(4,"2011-10-0412:58:36-0600")4只是一个ID。在表中插入为:2011-10-0412:58:36or0000-00-0000:00:00所以我的问题是,时差-0600丢失了。我怎样才能插入它呢? 最佳答案 您可以使用SUBSTR()将其截断并使用CONVERT_TZ()对其进行转换。http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substrh

MySQL SELECT 非常慢,因为 LONGBLOB

为什么或如何解决mysql上的问题。tablexxx->idprimarykey->namevarchar255->datalongblob当我在这个表中存储100个文件,每个100MB,该表将有10GB然后尝试选择任何行...需要很长时间SELECTnameFROMxxxWHEREid=50LIMIT1;大约需要8秒我的问题可能在于,mysql在返回name之前读取整行,它只有255个字符...所以当我想列出100个文件的名称时,mysql读取10GB并且返回大约2KB的结果。 最佳答案 尝试将blob拆分到一个单独的表中。例如,