Questions tagged «mysql»

MySQL的所有版本(不是Microsoft SQL Server)。如果与此问题相关,还请添加特定于版本的标记,例如mysql-5.7。

2
授予典型用户什么是合理的特权?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引文回答。 6年前关闭。 我发现MySQL提供的特权列表有些让人不知所措。我不确定谁应该拥有什么特权。在我看来,有三种典型的用户适合我的情况: root developer application root不言自明。为此,developer该用户需要能够轻松访问任何数据库,对其进行调整等。对于初学者,我将该用户设置为以下特权集: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON application有一个更有限的设置。它应该仅限于处理特定的数据库。 我不确定要授予什么合理的特权。授予开发人员和应用程序合理的特权集是什么?为什么?

2
如何在MySQL中正确实现乐观锁定
如何正确地在MySQL中实现乐观锁定? 我们的小组推断出我们必须执行下面的#4,否则就有另一个线程可以更新相同版本的记录的风险,但是我们想验证这是最好的方法。 在要使用乐观锁定的表上创建一个版本字段,例如列名=“ version” 在选择时,确保包括版本列并记下版本 在对记录进行后续更新时,更新语句应发出“ where version = X”,其中X是我们在#2中收到的版本,并将该更新语句中的version字段设置为X + 1 SELECT FOR UPDATE对我们将要更新的记录执行a ,以便我们序列化可以更改我们要更新的记录的人员。 为了澄清起见,我们试图防止两个线程在同一时间窗口中选择同一条记录(如果它们试图同时更新记录)在它们捕获相同版本的记录时彼此覆盖,因此它们将无法覆盖彼此。我们认为,除非我们执行#4,否则如果两个线程同时输入各自的事务(但尚未发布其更新),则有机会在它们进行更新时,将使用UPDATE的第二个线程...其中version = X将对旧数据进行操作。 我们是否正确地认为即使使用版本字段/乐观锁定,更新时也必须执行这种悲观锁定?
13 mysql  locking 

1
MySQL:事务会锁定行吗?
我以前没有尝试过使用MySQL事务,我只是想澄清一下。 如果两个用户在非常精确的时间执行查询,MySQL将如何处理呢?例如,用户正在尝试更新记录。 user1:更新表集column = column-4,其中column_id = 1; user2:更新表集column = column-7,其中column_id = 1; 现在,如果我使用事务,MySQL是否会选择首先执行哪个查询并锁定第二个用户,直到提交第一个查询?是表锁还是行锁? 如果第三位用户发出选择声明怎么办?MySQL将返回什么值? PS这将在Innodb上。

4
电话号码的数据类型:VARCHAR,INT或BIGINT?
因此,这将是今年的虚拟问题,但我要问的是,这不是我第一次通过此问题。看一下下表定义: 看一下当前的专栏from_number,VARCHAR(45)但其中包含电话号码。由于我不知道手机在世界范围内可能有多少个号码,因此我尝试涵盖几乎所有号码。我想尽可能地保持数据库的完整性,所以我认为VARCHAR这不是保存此类信息的合适类型-也许我错了,你告诉我-所以我在考虑更改INT甚至更改BIGINT。 当我在Workbench中定义列时,我不应该()在所有情况下都指定括号之间的数字,而在我之前提到的情况下,则必须指定括号中的数字。因此,如果执行此操作:BIGINT()我收到此错误: 这使我在这里阅读了有关此MySQL类型的一些信息。基本上信息是这样的: 一个大整数。...无符号范围是0到18446744073709551615。 这让我问:定义BIGINT()类型时应为括号设置什么值。(我正在使用BIGINT,因为我不知道INT是否可以容纳电话所能容纳的尽可能多的数字-也许我也是错的)。在MariaDB / MySQL数据库中创建|设计列的正确方法是什么? 无论如何,我想知道您的意见,经验,当然我想得到一个答案 注意:我正在使用MySQL Workbench最新版本来创建ER图。我也在使用MariaDB 10.0.x

4
5列以上的主键对大型(1亿+)表不利吗?
我正在阅读有关一些现实生活中的数据库问题的信息,一个项目有一个拥有1亿行的表格,其中有5列作为主要表格。我认为这很糟糕,但是有人可以告诉我原因吗? 该表有点像微型汇总/汇总表,因此5列是(天,market_id,product_id ...)。起初,我认为5列主键并不理想,但我想多了一点,我真的无法提出一个很好的理由来说明它不好。 这是在半夜与公司一半的工程师进行的讨论中。一位高级工程师同意,有人刚刚提到这是一个糟糕的设计,但没人真正了解原因。因此尝试自己研究问题!

4
全文搜索导致“全文初始化”中花费大量时间
我目前正在尝试对Stack Overflow注释的数据转储运行一些查询。架构如下所示: CREATE TABLE `socomments` ( `Id` int(11) NOT NULL, `PostId` int(11) NOT NULL, `Score` int(11) DEFAULT NULL, `Text` varchar(600) NOT NULL, `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `UserId` int(11) NOT NULL, PRIMARY KEY (`Id`), KEY `idx_socomments_PostId` (`PostId`), KEY `CreationDate` (`CreationDate`), FULLTEXT KEY `Text` (`Text`) ) ENGINE=InnoDB …

3
如何从两个不同的表中将值插入到表中?
我有三张桌子 students table ------------------------------------ id(PK, A_I) | student_name | nationality teachers table ------------------------------------ id(PK, A_I) | teacher_name | email classroom table ---------------------- id(PK, A_I) | date | teacher_id(FK to teachers.id) | student_id(FK to students.id) 如果我得到了老师的名字(david例如)和student_id数据(7例如),并要求插入teacher_id到classroom基于表id的teachers表,我会做: insert into classroom (date, teacher_id, student_id) select '2014-07-08', id, 7 from teachers where teacher_name = …

1
梭子鱼和压缩的好处
一段时间以前,我一直在阅读有关MySQL的文件格式Antelope和Barracuda的信息,我想知道使用Barracuda和Compression是否可以受益。 我的服务器当前正在使用Antelope,因为它是MySQL的默认设置。 由于我拥有大型数据库,因此内存问题很多次了。我的数据库每天都在增加。 压缩似乎正在使一些人受益,例如:http : //www.mysqlperformanceblog.com/2008/04/23/real-life-use-case-for-barracuda-innodb-file-format/ 我知道内存和磁盘空间可能会更少,但是我不确定是否理解这一点(引自文章): “〜5%根据顶部的CPU负载(从80-100%主要等待I / O) 0.01通过主键的平均平均查找时间(转换之前的1-20秒)” 我以为这两件事不会改善,因为如果压缩了数据,则服务器必须解压缩才能再次获取原始数据,因此,CPU使用率会增加吗? 这对您的读/写密集型应用程序有好处吗?您会建议我改为梭子鱼和压缩吗? 您知道梭子鱼有什么问题吗? 以下问题的答案似乎指出了一些问题,但是由于它是从2011年开始的,所以我要说它们现在已经解决:https : //serverfault.com/questions/258022/mysql-innodb-how-to-switch梭子鱼格式

3
MySQL实例拖延“做SYNC索引”
问题 运行(主要是)一个带有InnoDB表的数据库的MySQL 5.6.20实例在1-4分钟的时间内偶尔出现所有更新操作的停顿,而所有INSERT,UPDATE和DELETE查询都保持“查询结束”状态。这显然是最不幸的。MySQL慢查询日志甚至记录了具有疯狂查询时间的最琐碎的查询,其中数百个具有相同的时间戳,对应于已解决停顿的时间点: # Query_time: 101.743589 Lock_time: 0.000437 Rows_sent: 0 Rows_examined: 0 SET timestamp=1409573952; INSERT INTO sessions (redirect_login2, data, hostname, fk_users_primary, fk_users, id_sessions, timestamp) VALUES (NULL, NULL, '192.168.10.151', NULL, 'anonymous', '64ef367018099de4d4183ffa3bc0848a', '1409573850'); 设备统计信息显示出增加了,尽管在此时间段内I / O负载没有过多(在这种情况下,根据上述语句的时间戳,更新停顿了14:17:30-14:19:12): # sar -d [...] 02:15:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util …

2
如何在Windows7启动时禁用启动MySQL服务?
当我打开桌面(Windows 7 SP1)时,我经常发现MySQL进程已经占用了2或3 GB的内存。我不关心数据库需要多少内存(如果它实际上运行一些查询),但是我确实关心,如果它是一个应用程序,我什至还不启动自己。因此,我在本地环境中开发一些Web应用程序时几乎不使用MySQL限制。 那么有可能停止这种暴食吗?我试图通过将该MySQL从启动组中删除msconfig,但是在那找不到它的名字。 这是额外的信息。 mysql Ver 14.14 Distrib 5.6.15, for Win64 (x86_64) MySQL Server 5.6 MySQL Workbench 6.0
12 mysql  windows 

1
在CREATE TABLE…AS SELECT中自动递增主键
我通过使用复杂的选择查询创建了表格CREATE TABLE ... AS SELECT...。如何在此查询中添加自动增量主键? 例如: create table `user_mv` select `user`.`firstname` as `firstname`, `user`.`lastname` as `lastname`, `user`.`lang` as `lang`, `user`.`name` as `user_name`, `group`.`name` as `group_name` from `user` inner join `user_groups` on (`user`.`user_id`=`user_groups`.`user_id`) left join `group` on (`group`.`group_id`=`user_groups`.`group_id`) where `user`.`lang`=`group`.`lang` 此查询创建一个包含表firstname,lastname,lang,username,group_name列。我希望它也具有id作为自动增量主键的列。 有什么办法可以通过更改此查询来做到这一点?我知道我可以通过在执行此查询后更改表来做到这一点,但是如果有任何直接在create table语句中执行此操作的方法,我想知道如何执行此操作。


3
基于同一表的UPDATE表
我有一张带有产品说明的表格,每个产品说明都有一个product_id和一个language_id。我想要做的就是更新所有与字段language_id的2等于同product_id在language_id是1。 到目前为止,我已经尝试了以下查询,但是却收到错误消息,指示MySQL不想更新在子查询中也使用该表的表。 UPDATE products_description AS pd SET pd.products_seo = ( SELECT pd2.products_seo FROM products_description AS pd2 WHERE pd2.language_id = 1 AND pd2.products_id = pd.products_id ) WHERE pd.language_id <> 1 在MySQL中是否有解决此限制的“简单”方法?还是任何“技巧”?我的查询无法正常运作,这有点合逻辑,这让我感到有些惊讶。
12 mysql  update 

2
导出所有关系数据的工具?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为数据库管理员Stack Exchange 的主题。 5年前关闭。 是否有一种工具可以从表中的选定行中导出数据,而所有数据都存储在通过关系设计链接的其他表中的其他表中? 目的是简化用于临时迁移的服务器之间的数据位迁移。我正在寻找具有定义的外键的MySQL InnoDB工具。

1
为什么默认的character_set_server是latin1?
我正在使用MySQL 5.5,当我显示有关字符集的变量时,我有 +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.