数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答


1
MySQL的行大小错误
我在Macbook上运行MySQL服务器(用于测试)。版本是Homebrew的5.6.20。我开始遇到“行大小太大”错误,并且能够将其减少到此测试用例。表: mysql> describe test; +-------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | stuff | longtext | YES | | NULL | | +-------+----------+------+-----+---------+----------------+ 表格状态: mysql> show table status where …
11 mysql  innodb 

5
无法创建表,但表不存在
我正在使用这些步骤来创建一个表my_user,该表已经存在,但以某种方式从我的数据库中消失了my_db: mysql> USE my_db; mysql> DROP TABLE my_user; mysql> ERROR 1051 (42S02): Unknown table 'my_user' mysql> CREATE TABLE my_user (id INT AUTO_INCREMENT NOT NULL, username VARCHAR(255), group_id VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB; mysql> ERROR 1005 (HY000): Can't create table 'my_db.my_user' (errno: …
11 mysql  innodb 

3
从表中获取最后一行的最快方法是什么?
我有一个PostgreSQL表Prices,其中包含以下列: price (十进制) product_id (整数) 也有created_at和updated_at列。 价格会定期更新,我将旧价格保留在表格中。对于给定的产品,表中的最后一个价格是当前价格。 获得特定产品最后价格的最有效方法是: 索引product_id并查询最后一条记录 添加第三列active(布尔值)以标记最新价格,并创建一个复合索引(product_id和active) 或者是其他东西?

3
从集合中设置随机值
我需要将一些随机值放入数据库中,但是我不想最终得到完全随机化的文本(例如7hfg43d3)。相反,我想随机选择我自己提供的值之一。

3
使用LIMIT是否可以提高性能,并且引人注意?
我想了解以下内容。 假设我有一个复杂的查询,假设一个5个表的联接按求和和排序。 抛开对查询本身的任何优化(例如索引等)。使用 是否有任何明显的性能优势LIMIT?我认为必须在应用LIMIT 之前处理所有查询(和结果),因此使用LIMIT检索结果的子集,这是否会带来重大/显着的改进?

5
DELETE语句与REFERENCE约束冲突
我正在尝试删除所有用户,但出现错误: Msg 547, Level 16, State 0, Line 1 The DELETE statement conflicted with the REFERENCE constraint "FK_M02ArticlePersons_M06Persons". The conflict occurred in database "workdemo.no", table "dbo.M02ArticlePersons", column 'M06PersonId'. The statement has been terminated. 查询: DELETE FROM [workdemo.no].[dbo].[M06Persons] WHERE ID > '13' GO 似乎我需要使用,on delete cascade;但卡住了。
11 sql-server  t-sql 

3
历史/时间表的最佳做法?
假设我有一个对象,其中包含我要跟踪历史记录的某些字段,以及某些我不想跟踪历史记录的字段。从规范化的角度来看,以下架构是否正确: CREATE TABLE MyObject AS ( MyObjectId INT IDENTITY NOT NULL PRIMARY KEY, MyObjectField1 VARCHAR(100) NOT NULL, MyObjectField2 VARCHAR(100) NOT NULL, MyObjectField3 VARCHAR(100) NOT NULL, MyObjectTrackedField1 VARCHAR(100) NOT NULL, MyObjectTrackedField2 VARCHAR(100) NOT NULL, MyObjectTrackedField3 VARCHAR(100) NOT NULL, ) CREATE TABLE MyObjectHistory AS ( MyObjectHistoryId INT IDENTITY NOT NULL PRIMARY KEY, …

3
UNION很慢,但是两个查询在单独的情况下都很快
邓诺(Dunno)对此还有什么可做的。我有一个具有开始和停止列的表,我想返回通过开始和停止连接的表的结果,我希望两者之间有明显的区别。现在,这两个查询分别快速运行: SELECT UNIX_TIMESTAMP(CONVERT_TZ(start_dev, '+00:00', GetCarrierTimezone(a0.carrier_id))) AS alertStart, NULL AS alertStop, c0.name AS carrier_name, carrier_image, l0.Latitude, l0.Longitude FROM carriers AS c0 INNER JOIN start_stop AS a0 ON a0.carrier_id = c0.id INNER JOIN pcoarg AS l0 ON a0.startLogId = l0.id WHERE FIND_IN_SET(a0.carrier_id, '89467,1,64578,222625,45013') > 0 AND start_dev > '2013-03-11 11:46:48' AND start_dev …
11 mysql 

1
DMV sys.dm_exec_query_stats中的last_worker_time和last_elapsed_time有什么区别?
DMV sys.dm_exec_query_stats中的last_worker_time和last_elapsed_time是什么意思,它们之间有什么区别? 当我在查询下面触发 SELECT TOP 20 qs.last_worker_time, qs.last_worker_time/1000000 last_worker_time_in_S, qs.last_elapsed_time, qs.last_elapsed_time/1000000 last_elapsed_time_in_S FROM sys.dm_exec_query_stats qs order by qs.last_worker_time desc 我得到如下结果。 关于我发现要么两者都是相等的,要么是经过的时间大于工作人员的时间。我想理解两者的意义,因此也可能有助于我进行性能调整。

1
在PostgreSQL Windows服务中登录文件
我需要一种替代方法来运行以下命令: C:\xxx\pgsql\bin\pg_ctl" -D "C:\xxx\pgsql\data" -l "C:\yyy\log\pgsql.log" start。 这样,服务器将启动并登录到C:\yyy\log\pgsql.log。但是,当我尝试将服务器注册为服务时-没有可用的日志记录选项,并且服务器将记录到事件查看器。从pg_ctl文档中: pg_ctl注册[-N服务名] [-U用户名] [-P密码] [-D数据目录] [-S a [uto] | d [emand]] [-w] [-t秒] [-s] [-o选项] 如何强制服务器登录文件?注意:我不想使用一键式安装程序,我只想使用解压缩的二进制文件。

1
每列值选择限制1?
可以说我有下表 ----------------------------- | user_id | comment | ----------------------------- | 2 | thats cool | | 2 | awesome | | 3 | i hate this | | 3 | okay | | 6 | this is weird | | 6 | hello? | | 6 | what is it | …

1
将输入限制为几个不同的字符串
嗨,我似乎无法以我期望的方式在postgreSQL中获得约束。从pgadmin内部,我执行以下SQL查询。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes'); COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes'; 执行后将转换为。 -- Check: "TypeCheck" -- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck"; ALTER TABLE "ComLog" ADD CONSTRAINT "TypeCheck" CHECK …

6
尝试在数据库2中获取逻辑页(5:65424)失败
SqlException在调用存储过程时,我得到以下信息: 尝试在数据库2中获取逻辑页(5:65424)失败。它属于分配单元7349876362857938944,而不属于4899918190390149120。 发生System.Data.SqlClient.SqlException Message =“试图在数据库2中获取逻辑页面(5:65424)失败。它属于分配单元7349876362857938944,而不是属于4899918190390149120。 Source =“。Net SqlClient数据提供程序” ErrorCode = -2146232060 类= 21 LineNumber = 257 Number = 605 过程=“ ispDisplayCount” Server =“ 10.10.1.1” State = 3 此异常是什么意思?上述问题有解决方案吗? 尽管上面的错误中引用的数据库指示tempdb,但使用以下答案可以修复引用消息605的类似错误。 消息605,级别21,状态3,行1 尝试获取数据库7中的逻辑页(1:8687634)失败。它属于分配单元72057594364821504,而不是72057594052476928。

2
如何记录mysqldump的详细输出?
通常,您可以像这样保存Linux命令的详细输出: # command > output.txt 但是,当您使用诸如之类的命令时mysqldump,该>选项会将数据库表的转储输出到所需的文件: # mysqldump --username=whatever --password=whatever -h localhost database > dump.sql 如果将-v(详细)选项添加到中mysqldump,它将输出有关该命令正在执行的帮助信息。由于该>选项用于将数据库表信息输出到文件,因此如何将这些详细输出保存到文件中? 更具体地说,我将一个数据库的输出转储到另一个数据库中,如下所示: mysqldump -alv -h 123.123.123.123 --user=username --password=p@ssw0rd --add-drop-table databasename | mysql --user=username --password=p@ssw0rd -h localhost localdatabase 我尝试了以下操作,但最终输出文件为空 mysqldump -alv -h 123.123.123.123 --user =用户名--password = p @ ssw0rd --add-drop-table数据库名| mysql --user =用户名--password = p @ …

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.