找到关于数据库的6705 篇文章
725 次浏览
借助 DATEDIFF(expr1, expr2),我们可以查找两个指定日期之间的工作日。例如,如果我们想查找“2017-05-27”和“2017-05-23”之间的工作日,则以下将是 MySQL 查询:mysql> Select DATEDIFF('2017-05-27','2017-05-23') AS 'Total Business Days'; +----------------------+ | Total Business Days | +----------------------+ | 4 | +----------------------+ 1 row in set (0.00 sec)
98 次浏览
众所周知,MySQL 支持用于参照完整性的外键,但不支持 CHECK 约束。但是,我们可以使用触发器来模拟它们。这可以用下面的例子来说明:示例假设我们有一个名为“car”的表,它可以具有固定的语法注册号,例如两个字母、一个短划线、三个数字、一个短划线、两个字母,如下所示:mysql> Create table car2 (number char(9)); Query OK, 0 rows affected (0.32 sec) mysql> Insert into car2 values('AB-235-YZ'); Query OK, 1 row affected (0.10 sec)上述值是有效的,但是…… 阅读更多
80 次浏览
我们可以按如下方式计算日期:mysql> SET @year=2017, @week=15, @day=4; Query OK, 0 rows affected (0.00 sec)上述查询将分别在“year”、“week”和“day”变量中传递值“2017”、“15”、“4”。然后在应用以下查询中的公式后,我们可以得到日期。mysql> SELECT Str_To_Date( Concat(@year,'-',@week,'-',If(@day=7,0,@day) ), '%Y-%U-%w' ) AS Date; +--------------+ | Date | +--------------+ | 2017-04-13 | +--------------+ 1 row in set (0.00 sec)
75 次浏览
众所周知,MySQL 支持用于参照完整性的外键,但不支持 CHECK 约束。但是,我们可以使用触发器来模拟它们。这可以用下面的例子来说明:示例假设我们有一个名为“car1”的表,它可以具有固定的语法注册号,例如两个字母、一个短划线、三个数字、一个短划线、两个字母,如下所示:mysql> Create table car1 (number char(9)); Query OK, 0 rows affected (0.32 sec) mysql> Insert into car1 values('AB-235-YZ'); Query OK, 1 row affected (0.10 sec)上述值是有效的,但是…… 阅读更多
285 次浏览
我们可以按如下方式根据出生日期计算年龄(以年为单位):mysql> SET @dob = '1984-01-17'; Query OK, 0 rows affected (0.00 sec)上述查询将在“dob”变量中传递值“1984-01-17”。然后在应用以下查询中的公式后,我们可以得到年龄(以年为单位)。mysql> Select Date_format( From_Days( To_Days(Curdate()) - To_Days(@dob) ), '%Y' ) + 0 AS ‘Age in years; +---------------+ | ‘Age in years’| +---------------+ | 33 | +---------------+ 1 row in set (0.00 sec)
273 次浏览
启用 SQL MODE 为 ALLOW_INVALID_DATES 后,MySQL 也将能够在表中存储无效日期。以下示例可以帮助理解:mysql> Insert into order1234(ProductName, Quantity, Orderdate) values('B',500,'2015-11-31'); Query OK, 1 row affected (0.06 sec) mysql> Select * from order1234; +-------------+----------+--------------+ | ProductName | Quantity | OrderDate | +-------------+----------+--------------+ | A | 500 | 0000-00-00 | | B | 500 | 2015-11-31 | +-------------+----------+--------------+ 2 rows in set (0.00 sec)我们可以看到 MySQL 也将无效日期插入表中。
367 次浏览
MySQL 在遇到超出范围或无效日期时的响应将取决于 SQL MODE。如果我们启用了 ALLOW_INVALID_DATES 模式,则 MySQL 将把超出范围的值转换为全零(即“0000:00:00 00:00:00”),并将其存储在表中,而不会产生任何错误或警告。例如,我们可以按如下方式更改 SQL MODE,然后插入超出范围的值:mysql> set sql_mode = 'ALLOW_INVALID_DATES'; Query OK, 0 rows affected (0.00 sec) mysql> Insert into order1234(productname, quantity, orderdate) values('A', 500, '999-05-100'); Query OK, 1 row affected, 1 warning (0.13 sec) mysql> Select * from order1234; ... 阅读更多
166 次浏览
众所周知,MySQL 支持用于参照完整性的外键,但不支持 CHECK 约束。但是,我们可以使用触发器来模拟它们。这可以用下面的例子来说明:示例假设我们有一个名为“car”的表,它可以具有固定的语法注册号,例如两个字母、一个短划线、三个数字、一个短划线、两个字母,如下所示:mysql> Create table car (number char(9)); Query OK, 0 rows affected (0.32 sec) mysql> Insert into car values('AB-235-YZ'); Query OK, 1 row affected (0.10 sec)上述值是有效的,但是…… 阅读更多
4K+ 次浏览
MySQL 允许我们在表中的多个列上添加 FOREIGN KEY 约束。条件是子表中的每个外键必须引用不同的父表。示例假设我们有一个表“customer2”,它在字段“cust_unq_id”上具有主键约束,如下所示:mysql> describe customer2; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | cust_id | int(11) | YES | | NULL | | | First_name | varchar(20) | ... 阅读更多
10K+ 次浏览
这两种数据类型都以“YYYY-MM-DD HH:MM:SS”格式存储数据,并且包含日期和时间。尽管有这些相似之处,但它们具有以下区别:范围 - Datetime 数据类型支持介于 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之间的日期和时间。但是 timestamp 数据类型支持介于“1970-01-01 00:00:01”和“2038-01-19 08:44:07”之间的日期和时间。大小 - Datetime 需要 5 个字节,以及用于存储小数秒数据的额外 3 个字节。另一方面,timestamp 数据类型需要 4 个字节,以及用于存储小数秒数据的额外 3 个字节…… 阅读更多