Mysql 设计规范

公司要开发一个新项目,之前是.NET Framework + Sql Server,这次要用.NET Core + Mysql,没怎么接触过mysql,所以做数据库设计之前,结合网上的资料,以及项目的使用,总结了一下Mysql设计规范。按照规范设计了数据库,目前项目开始正常开发,没遇到因为数据库设计产生的问题,记录一下。ps.随着开发,应该还会记录下mysql与SQL server的差异。

命名规范

基本命名原则

  • 使用有意义的英文词汇,不要使用拼音或拼音缩写。
  • 只能使用英文字母,数字,下划线,并以英文字母开头。
  • 表名库名全部小写用_分隔,列名Pascal(避免代码中太多attribute)
  • 避免用 MySQL 的保留字,如 desc,关键字如 index
  • 命名禁止超过32个字符,须见名之意,建议使用名词不是动词
  • 数据库,数据表一律使用前缀
    • 临时库、表名必须以tmp为前缀,并以日期为后缀
    • 备份库、表必须以bak为前缀,并以日期为后缀
阅读更多

LEFT JOIN ON AND/WHERE

LEFT JOIN ON AND/WHERE

Question

这两个SQL查询的结果相同吗?

SQL
1
2
SELECT * FROM TableA a LEFT JOIN TableB b ON  b.AId =a.TableAId AND a.TableAId =1
SELECT * FROM TableA a LEFT JOIN TableB b ON b.AId =a.TableAId WHERE a.TableAId = 1
阅读更多

WITH common_table_expression

WITH common_table_expression

先上个官方说明
Specifies a temporary named result set, known as a common table expression (CTE). This is derived from a simple query and defined within the execution scope of a single SELECT, INSERT, UPDATE, or DELETE statement. This clause can also be used in a CREATE VIEW statement as part of its defining SELECT statement. A common table expression can include references to itself. This is referred to as a recursive common table expression.

阅读更多

SQL PadLeft

SQL PadLeft

  • SQL
1
2
3
PRINT RIGHT(CAST(REPLICATE('0', LEN(no_start)) + CAST(no_start + (inventory - 1) AS VARCHAR(50)) AS VARCHAR(50)), LEN(no_start))

PRINT RIGHT(CAST(REPLICATE('0', LEN('000001')) + CAST('000001' + (50 - 1) AS VARCHAR(50)) AS VARCHAR(50)), LEN('000001'))
阅读更多