小编Rey*_*rPM的帖子

电话号码的数据类型: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

mysql mariadb datatypes

13
推荐指数
1
解决办法
9万
查看次数

关系数据库中的完整性约束——我们应该忽略它们吗?

我正在与我工作的公司的开发人员进行永久讨论,因为他们说最好摆脱关系数据库中的关系强制(通过 FOREIGN KEY 约束定义)以加快大型查询并获得更好的结果表现。

考虑的平台是MySQL 5.x,没有设置FOREIGN KEY,甚至缺少相关表的一些PRIMARY KEY约束,至少对我来说是不合理的。也许他们是对的,我是错的,但我没有足够的论据来讨论这种情况。

三年来,这一直是首选方法。我是这家公司的新人(只有一个月),但是,随着产品“有效”,我对增强数据库犹豫不决;尽管如此,我注意到的第一件事是加载一个页面需要 1 分钟(是的,60 秒!)。

当前状况背后的说法之一是“非规范化”数据库比规范化数据库更快,但我不相信这是真的。

大多数相关查询都包括 JOIN 操作,这使得它们在处理大量数据(数据库包含数百万行)时运行非常非常缓慢。

通常,“CRUD”操作的处理是在应用程序代码级别实现的;例如,为了删除一些数据,让我们说TableA

  • 有必要先检查在运行,如果有排之间的一些关系TableATableB
  • 如果“检测到”所述关系,则应用程序代码将不允许删除相关行,但是
  • 如果由于某种原因应用程序代码失败,那么 DELETE 操作将“成功”,无论涉及的行和表是否存在任何关系。

你能帮我详细阐述一个好的、准确的和可靠的答案来丰富辩论吗?


注意:以前可能有人问过(并回答过)类似的问题,但我无法通过 Google 找到任何内容。

mysql normalization database-design relational-theory denormalization

10
推荐指数
2
解决办法
1717
查看次数

如何在 MariaDB 中启用查询日志

mysql Ver 15.1 Distrib 5.5.46-MariaDB在 CentOS 6.7 服务器上运行。我正在尝试记录查询,我正在通过将日志重定向到文件来做,如下所示:

#/etc/my.cnf.d/server.cnf
# this is only for the mysqld standalone daemon
[mysqld]
#
# * Fine Tuning
#
key_buffer              = 16M
max_allowed_packet      = 512M
thread_stack            = 192K
thread_cache_size       = 8

log-output = FILE

#General Query Log
general_log
general_log_file        = /var/log/mysql/mysql_query.log

#Error Log
log_error               = /var/log/mysql/mysql_error.log

#Slow Query Log
log-slow-queries
slow_query_log          = 1
slow_query_log_file     = /var/log/mysql/mysql_slow.log
long_query_time         = 2
log-queries-not-using-indexes

collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
Run Code Online (Sandbox Code Playgroud)

在重新启动 MySQL 服务之前,我确实运行了以下命令来创建每个文件并分配适当的权限: …

mysql mariadb logs log

6
推荐指数
1
解决办法
3万
查看次数

这些查询会返回相同的结果吗?

我有这个简单的查询:

SELECT 
    friend_id
FROM
    default_friend
WHERE
    user_id = 1
Run Code Online (Sandbox Code Playgroud)

结果如下:

+-----------+
| friend_id |
+-----------+
|      2250 |
|      4901 |
|      7187 |
|      9337 |
|      9843 |
+-----------+
Run Code Online (Sandbox Code Playgroud)

现在我有这个查询也有点复杂:

SELECT 
    friend_id, user_id, approved
FROM
    default_friend
WHERE
    user_id = 1
        AND (friend_id IN (SELECT 
            friend_id
        FROM
            default_friend
        WHERE
            user_id = 1))
        AND approved = 0
Run Code Online (Sandbox Code Playgroud)

我的问题是:进入第二个查询的 SELECT 会返回与第一个查询返回的数据相同的数据吗?意思是friend_id = 2250, 4901, 7187, 9337, 9843 还是我需要运行第一个并以编程方式拆分结果并构建第二个?我也想知道哪种方式更合适!

mysql performance query mysql-5.5 query-performance

5
推荐指数
1
解决办法
95
查看次数

如何通过根据条件添加“1”来更新列值?

我有下表fields

+----------+---------+-----------------+-------------+---------+--------------+---------------+-----------+------------------------------+-------------+------------------+
| field_id | form_id | form_section_id | is_required | grid_id | is_base_grid | field_type_id | field_seq |          field_name          | field_class | field_class_data |
+----------+---------+-----------------+-------------+---------+--------------+---------------+-----------+------------------------------+-------------+------------------+
|   220481 |    9926 | NULL            |           0 | NULL    | NULL         |             4 |        28 | Test                         | NULL        | NULL             |
|   281863 |    9926 | NULL            |           0 | NULL    | NULL         |            10 |        29 | insert after yes no question | NULL        | NULL             |
|   220496 …
Run Code Online (Sandbox Code Playgroud)

sql-server update sql-server-2016

5
推荐指数
1
解决办法
3万
查看次数

选择第一列中不存在第二列值的行

我有这个表结构:

 id1 id2
 1   2 
 1   3
 1   4
 2   1
 2   5
Run Code Online (Sandbox Code Playgroud)

我需要构建一个查询来选择id2where id1is not in id2. 例如,如果id1 = 1只有id2=3id2=4
我试过这个:

SET @a=1;
SELECT DISTINCT x.id2 
 FROM tt x, tt y 
 WHERE x.id1=@a AND x.id1 != y.id2;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

mysql join

4
推荐指数
1
解决办法
1万
查看次数

如何选择/计算列中存在相同值但不在同一表中的其他列中的行

我有这个表结构和数据:

CREATE TABLE IF NOT EXISTS `default_relations_users` (
  `id_user_rq` int(11) NOT NULL,
  `id_user_ap` int(11) NOT NULL,
  UNIQUE KEY `rusers_rq_ap_idx` (`id_user_rq`,`id_user_ap`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `default_relations_users` (`id_user_rq`, `id_user_ap`) VALUES
(1, 2),
(1, 3),
(1, 4),
(2, 1),
(2, 2),
(2, 3);
Run Code Online (Sandbox Code Playgroud)

我只需要获取值在左侧但不在右侧的行,例如:将不会选择 1,2 和 2,1 但 1,3 和 1,4 是。我试试这个查询:

SELECT * FROM default_relations_users
WHERE default_relations_users.id_user_rq = 1 
 AND NOT EXISTS (SELECT id_user_ap FROM default_relations_users WHERE id_user_ap = 1) 
Run Code Online (Sandbox Code Playgroud)

也许我不明白子查询是什么意思,或者我以错误的方式使用。所以有什么帮助吗?

mysql query subquery

4
推荐指数
1
解决办法
5万
查看次数

可以在没有用户和/或所有者的情况下创建数据库吗?

也许这是一个好或坏的问题,但在我的谷歌研究中,我无法找到一个好的答案(也许是因为我不擅长进行良好的搜索)。简而言之:

  • 可以在没有用户和/或所有者的情况下创建数据库吗?

我正在尝试回答Stack Overflow 上的一个问题,并且用户已经分享了它的数据库配置,有些东西引起了我的注意:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = 'gotche';
$db['default']['dbdriver'] = 'mysqli';
Run Code Online (Sandbox Code Playgroud)

数据库没有用户名!

不管使用的数据库 - 在场景中是 MySQL(不知道版本) - 这可能吗?

我不认为出于安全原因删除了用户名和密码:最好将其更改为类似的内容*****- 在这种情况下,每个人都会知道有用户名/密码,但我可以询问用户是否这是原因。

mysql configuration

4
推荐指数
1
解决办法
433
查看次数

一张表多行或多表几行

我脑子里有一个问题。最好创建一个表并在那里存储很多行,或者创建各种表并在其中存储几行?在物理级别上节省的性能和 I/O 是多少?多少空间将使用多张表而不是一张表?我正在考虑 Wordpress 如何处理多博客功能,因为我正在开始一个新项目并且正在寻找最佳方法。

mysql performance database-design database-recommendation

3
推荐指数
1
解决办法
5885
查看次数

绘制这种寻找性能和|或磁盘空间节省的“关系”的最佳方法是什么?

我正在处理一个数据库图表,我有一个名为cm_identifier_type. 该表的每条记录都可以有或没有可下载的文件(保存了文件路径)。我已经确定了两种可能的方法来实现这一目标。

  • 将列放置download_fileVARCHAR(250)NULL默认设置为(这是因为并非所有记录都与下载相关)

在此处输入图片说明

  • cm_identifier_type和 新表之间创建关系cm_download_file

在此处输入图片说明

现在,关于性能、磁盘空间节省、查询节省等,您会怎么做?您对这种边缘情况有什么建议?

注意:目前我使用的是 MariaDB 10.1.x 但这将在 MySQL 实例中,可能是 5.x 左右我完全不确定,因为我还没有得到这些细节

mysql mariadb performance database-design query-performance

3
推荐指数
1
解决办法
59
查看次数

需要有关此查询的一些帮助获取我和我所有朋友的所有状态及其相关评论

我有几天时间处理这个查询,但无法按我的意愿工作。这篇文章与此相关来自不同表的几个值,我在其中艰难找到了解决方案,但我完全错误并丢失了:(。所以基本上与另一篇文章的架构相同:5 个表:default_users、default_profiles、default_status、default_comment和 default_friend。这是每个的 SQL:

default_comment

CREATE TABLE `default_comment` (
  `comment_id` int(11) NOT NULL AUTO_INCREMENT,
  `friend_id` int(11) NOT NULL,
  `message` text COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `status_id` int(11) NOT NULL,
  `device` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13007 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)

默认好友

CREATE TABLE `default_friend` (
  `friend_id` int(8) NOT NULL,
  `user_id` int(8) NOT NULL,
  `is_suscriber` tinyint(1) NOT NULL DEFAULT '1',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `created_at` timestamp NOT …
Run Code Online (Sandbox Code Playgroud)

mysql performance query mysql-5.5 query-performance

2
推荐指数
1
解决办法
189
查看次数

如何设置唯一的列组合

看这张表:

    CREATE TABLE IF NOT EXISTS `default_messages_users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `message_id` int(11) NOT NULL,
  `owner_user_id` int(11) NOT NULL,
  `to_user_id` mediumint(8) NOT NULL
  PRIMARY KEY (`id`)
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)

我只需要设置 message_id、owner_user_id、to_user_id 列的一种可能组合,这意味着组合(例如)1,1,1 只能存在一次,因此不允许重复。我怎么做?在它们之间创建索引?

提前干杯和感谢

mysql database-design constraint mysql-5.5

2
推荐指数
1
解决办法
2311
查看次数

INSERT 不适用于 NOT NULL 但 UPDATE 可以,为什么?

我有这个表定义:

CREATE TABLE `media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `brands_id` int(11) DEFAULT NULL,
  `media_type` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
  `title` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `description` longtext COLLATE utf8_unicode_ci NOT NULL,
  `thumbnail_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `media_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `media_code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `inactive` tinyint(1) NOT NULL,
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  `titleHtml` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `descriptionHtml` longtext COLLATE utf8_unicode_ci NOT NULL,
  `useHtml` tinyint(1) NOT NULL,
  PRIMARY KEY …
Run Code Online (Sandbox Code Playgroud)

mariadb null insert update

2
推荐指数
1
解决办法
1485
查看次数