设为首页收藏本站

[PHP] MySQL设计与开发规范_MySQL

[复制链接]
查看15 | 回复0 | 2000-1-1 00:00:00 | 显示全部楼层 |阅读模式
1 目的 本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦;同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保证。
  
2 适用范围 本规划的适用人员范围包括涉及数据库设计与开发的相关技术人员。
  
3 术语约定 本规范采用以下术语描述:
★规则:也称为强规范是编程时必须强制遵守的原则
★建议:编程时必须加以考虑的原则
★说明:对此规则或建议进行必要的解释
★示例:对此规则或建议从正、反两个方面给出
  
4 规范及建议 4.1 书写规范 4.1.1 SQL书写规范 规则1: 数据库代码中,关键字大写,其他内容小写;
示例:
如下代码不符合规范:(关键字未大写)
select last_name ,job_id
from employees;
  
如下代码符合规范:
SELECT last_name, job_id
FROM employees;
规则2:程序块应采用缩进风格书写,保证代码可读,风格一致,缩进格数统一为4格;
  
规则3:代码中需要空位时,统一采用英文空格键输入,不允许用TAB键 产生空位;
说明:不同的编辑器对TAB的空位格数设置不一致,会导致使用TAB键产生空位的代码格式混乱;
  
规则4:同一条语句占用多行时,每一行的开始应是关键字, 且关键字应和第一行左对齐,如确实不能从关键字分行,则分行处应对其上一行被分行的同类代码的最左边;
示例:
如下代码不符合规范(分行书写时,其余行未和第一行左对齐)
SELECT last_name,
job_id
FROM employees;
  
如下代码也不符合规范(分行时,不是从关键字分行)
SELECT last_name,
job_id FROM employees;
  
如下代码符合规范
SELECT last_name, job_id
FROM employees;
  
如下代码符合规范
SELECT last_name,
first_name,
job_id
FROM employees;
  
规则5:查询数据时,尽量不使用SELECT *,而是给出明确的字段,但该规则不包括SELECT COUNT(*)语 句;
示例
如下语句不符合规范(SELECT操作未给出字段)
SELECT *
FROM employees;
  
如下语句符合规范
SELECT last_name, first_name
FROM employees;
  
规则6:INSERT语句应该给出字段列表;
示例
如下语句不符合规范(INSERT操作未给出字段名称)
INSERT INTO employees
VALUES
(
'GUO',
'DAVID',
100
);
如下语句符合规范
INSERT INTO employees
(
last_name,
first_name,
job_id
)
VALUES
(
'GUO',
'DAVID',
100
);
  
规则7:从表中同一笔记录中获取记录的字段值,须使用一SQL语句得到,不允许分多条SQL语句;
示例
如下语句不符合规范(从同一个表中取出记录,分成两条语句分别扫描)
UPDATE employees_new
SET last_name=
(
SELECT last_name
FROM employees
WHERE job_id = 100
)
WHERE job_id = 100;
  
UPDATE employees_new
SET first_name =
(
SELECT first_name
FROM employees
WHERE job_id = 100
)
WHERE job_id = 100;
  
如下语句符合规范
UPDATE employees_new
SET first_name =
(
SELECT last_name
FROM employees
WHERE job_id = 100
),
last_name =
(
SELECT first_name
FROM employees
WHERE job_id = 100
)
WHERE job_id = 100;
  
规则8:SQL语句中的逗号后面应增加一个空格,以使得代码清晰;
示例
如下代码不符合规范(逗号后面没有空格)
SELECT last_name,job_id
FROM employees;
  
如下代码符合规则
SELECT last_name, job_id
FROM employees;
  
规则9:不允许将SQL语句写成一行,再短的SQL也应该在谓词处分行;
示例
如下代码不符合规范(未在谓词部分进行分行)
SELECT last_name, job_id FROM employees WHERE job_id = 1;
  
如下代码符合规范
SELECT last_name, job_id
FROM employees
WHERE job_id = 1;
  
规则10:运算符以及比较符左边或者右边只要不是括号,则空一格;
示例
如下代码不符合规范(运算符没有空格)
SELECT CURRENT_DATE+INTERVAL 1 DAY
FROM dual;
  
如下代码符合规范
SLEECT CURRENT_DATE + (INTERVAL 1 DAY)
FROM dual;
  
规则11:不同类型的操作符混合使用时,应使用括号明确的表达运算的先后关系;
示例
如下代码不符合规范(运算优先级关系易混淆)
SELECT a*b/c+d*e
FROM dual;
  
如下代码符合规范
SELECT ((a * b) / c) + (d * e)
FROM dual;
  
规则12:任何SQL书写单行不得超过120字符(含左边的缩进);
  
建议1:对于INSERT…VALUES和UPDATE语句,一行写一个字段,每个字段相对于INSERT语句空4格,字段后面紧跟注释(注释语句左对齐),VALUES和INSERT左对齐,左括号和右括号与INSERT、VALUES左 对齐;
示例:
如下代码不符合建议(字段未和INSERT语句空格)
INSERT INTO sm_user
(
user_id, --用户ID,主键
user_name, --用户名
login_name --登录名
)
VALUES
(
p_user_id,
p_user_name,
p_login_name
);
  
如下代码符合建议
INSERT INTO sm_user
(
user_id, --用户ID,主键
user_name, --用户名
login_name --登录名
)
VALUES
(
p_user_id,
p_user_name,
p_login_name
);
  
建议2:INSERT…SELECT 语句时,应使每行的字段顺序对应,以每行最多不超过4个字段,以方便代码阅读,括号的内容另起一行缩进4格开始书写,关键字单词左对齐,左括号、右括号另起一行与左对齐;
示例
如下代码不符合建议(字段未和括号分行)
INSERT INTO sm_duty_bak(duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date)
SELECT duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date
FROM sm_duty
WHERE duty_id=88;
如下代码符合建议
INSERT INTO sm_duty_bak
(
duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date
)
SELECT
duty_id, duty_name, created_by, creation_date,
last_updated_by, last_update_date, disable_date
FROM sm_duty
WHERE duty_id = 88;
  
说明:
1.SELECT 语句中每行的字段应与INSERT 语句对应。
2.INSERT 语句中换行的字段名应缩进并与上一行的第一个字段名对齐。
3.SELECT 语句中换行的字段名应缩进并与上一行的第一个字段名对齐。
  
4.1.2 存储过程书写规范 规则1:不允许将多行语句书写在同一行;
示例
如下代码不符合规范(将两行定义书写在同一行)
SET v_count = 1; SET v_creation_date = CURRENT_DATE;
  
如下代码符合规范
SET v_count = 1;
SET v_creation_date = CURRENT_DATE;
  
规则2:相对独立的程序块之间应加空行;
示例
如下代码不符合规范(变量定义和程序段之间无空行)
SET v_duty_id = 1;
IF (v_disabled_date > v_current_date) THEN
SELECT duty_name
into v_duty_name
FROM sm_duty
WHERE duty_id = :duty_id;

END IF;
如下代码符合规范
SET v_duty_id = 1;
  
IF (v_disabled_date > v_current_date) THEN
SELECT duty_name
into v_duty_name
FROM sm_duty
WHERE duty_id = :duty_id;

END IF;
  
规则3:当一个SQL 语句中涉及到多个表时,始终使用别名来限定字段名,这使其它人阅读起来更方便,避免了含义模糊的引用,其中能够通过别名清晰地判断出表名;
说明 : 别名命名时,尽量避免使用无意义的代号a、b 、c… , 而应该有意义( 如表mtl_system_items_b 对应别名为msi,po_headers_all 别名对应为pha)。
示例
如下语句不符合规范(未使用有明确含义的表别名)
SELECT a.wip_entity_name, a.wip_entity_id, a.date_released
FROM wip.wip_entities b,
wip.wip_discrete_jobs a
WHERE b.wip_entity_id = a.wip_entity_id
AND a.status_type = 3
  
如下语句符合规范
SELECT wdj.we_entity_name, wdj.wip_entity_id, wdj.date_released
FROM wip.wip_entities we,
wip.wip_discrete_jobs wdj
WHERE we.wip_entity_id = wdj.wip_entity_id
AND we.status_type = 3
  
规则4:确保变量/参数的类型和长度与表数据字段的类型和长度相匹配;
说明:如果与表数据列宽度不匹配,则当较宽或较大的数据传进来时会产生运行异常。
示例
如下代码不符合规范(假定表wap_user的字段user_name的定义为VARCHAR(10))
CREATE PROCEDURE ps_add()
BEGIN
DECLARE v_user_name VARCHAR(15);
UPDATE wap_user
SET user_name = v_user_name
WHERE sky_id = 100;
END;
如下代码符合规范
CREATE PROCEDURE ps_add()
BEGIN
DECLARE v_user_name VARCHAR(10);
UPDATE wap_user
SET user_name = v_user_name
WHERE sky_id = 100;
END;
  
规则5:存储过程代码块必须有注释;
  
建议1:减少控制语句的判断次数,比如在ELSE(IF…ELSE) 语句中,尽量将尽快能检测到结果的判断放在前面;
示例
如下语句不符合规范(假定v_count=1的条件大多数情况会满足)
IF (v_count = 0) THEN
NULL;
ELSEIF (v_count = 1) THEN
NULL;
END IF;
  
如下语句符合规范(假定v_count=1的条件大多数情况会满足)
IF (v_count = 1) THEN
NULL;
ELSEIF (v_count = 0) THEN
NULL;
END IF;
  
建议2:尽量避免使用嵌套的IF语句,在这种情况下应使用多个IF语句来判断其可能性;
示例
如下语句不符合规范(使用了嵌套的IF语句来进行判定)
IF v_count = 0 THEN
IF v_flag = 0 THEN
NULL;
ELSE
NULL;
END IF;
ELSE v_count = 1 THEN
IF v_flag = 0 THEN
NULL;
ELSE
NULL;
END IF;
END IF;
  
如下语句符合规范
IF (v_count = 0) AND (v_flag = 0) THEN
NULL;
ELSEIF (v_count = 0 ) AND (v_flag = 1) THEN
NULL;
ELSEIF (v_count = 1) AND (v_flag = 0) THEN
NULL;
ELSEIF (v_count = 1) AND (v_flag = 1) THEN
NULL;
END IF;
  
建议3:存储过程、函数、触发器、程序块中定义的变量和输入、输出参数在命名上有所区分;
说明:
用'v_ '开头代表程序块中定义的普通变量。
用'p_ '开头代表输入参数变量。
用'x_ '开头代表输入输出或输出参数变量。
用'cur_'开头代表游标变量。存放游标记录集。
  
4.2 对象命名规范 4.2.1 通用规则 规则1:任何数据库对象的命名,不得使用汉字;
示例
如下语句不符合规范(表明和字段名使用了汉字)
CREATE TABLE 用户
(
用户名 VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
规则2:库名,表名,字段名不得超过30个字符,用户名不得超过16个字符;
库名,表名,字段名最多支持64个字符,为了统一规范、易于辨识以及减少传输量,必须不超过30个字符。
示例
如下语句不符合规范(表命名达到65位长度)(修改)
CREATE TABLE wap_user_tel_number_region_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句符合规范
CREATE TABLE wap_user_tel_number_region
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
规则3:用户对象命名应全部为小写,使用下划线“_”分割;
说明:由于linux操作系统上的文件名是区分大小写的,所以MySQL表名是区分大小写的。
示例
如下语句不符合规范(表名应全部为小写)
CREATE TABLE Wap_user_tel_number_region
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句符合规范
CREATE TABLE wap_user_tel_number_region
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
规则4:命名应使用富有意义的英文,禁止使用拼音首字母, 一般情况下不建议使用拼音命名;
示例
如下语句不符合规范(表名使用了中文且字段使用了拼音首字母简写)
CREATE TABLE wap_yonghu
(
yhm VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
规则5:命名不得使用数据库保留字;
说明:使用了数据库保留字,会导致需要访问该对象时,需要代码做特别的转换才能访问
示例
如下代码不符合规范(假定user为数据库保留字)
CREATE TABLE wap_user
(
USER VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下代码符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
4.2.2 表  
规则1:同类业务的表,以相同的表示该类业务的英文开头;
说明:同类业务的表以相同的英文开头,在逻辑上清晰,且可避免维护过程中对该类表的误操作
示例
如下语句不符合规范(假定表wap_user和表user_login_log都属于wap类业务)
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
CREATE TABLE user_login_log
(
user_name VARCHAR(100),
login_date DATE
);
  
如下语句符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
CREATE TABLE wap_user_login_log
(
user_name VARCHAR(100),
login_date DATE
);
说明:各子系统不用加子系统名称前缀,如POS系统的表不用都加pos_前缀,如果遇到需要同步其他系统的表的表名与本系统的表名相同时,用子系统名称做后缀的形式重命名其他子系统表名,如POS系统需要同步MDM表bill_item_dtl而POS系统也存在这样的表名,则把MDM的表名重新命名为bill_item_dtl_mdm。
  
规则2:同类表,如果按照时间不同建立的表,后缀格式一般情况下应为’_YYYY[MM[DD]]’格式;
示例
如下语句不符合规范(将年份2010简写为10,导致含义模糊)
CREATE TABLE wap_user_login_1004
(
user_name VARCHAR(100),
login_date date
);
  
CREATE TABLE wap_user_login_1005
(
user_name VARCHAR(100),
login_date DATE
);
  
如下语句符合规范
CREATE TABLE wap_user_login_201004
(
user_name VARCHAR(100),
login_date DATE
);
  
CREATE TABLE wap_user_login_201005
(
user_name VARCHAR(100),
login_date DATE
);
  
  
4.2.3 字段 规则1:字段命名应具有含义,能反映该字段存储的内容,且字段应增加字段备注;
示例
如下语句不符合规范(假定存储的字段为用户名和密码,如下的字段名毫无意义也没有备注)
CREATE TABLE wap_user
(
col1 VARCHAR(100),
col2 VARCHAR(16)
);
  
如下语句符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句是使用了无意义字段名,但增加了字段说明,不作为推荐方法,但确实字段名无法表述含义时,必须使用该方法;
CREATE TABLE wap_user
(
col1 VARCHAR(100) comment 'username',
pass_word VARCHAR(16) comment 'password'
);
  
规则2:同种用途的字段,在所有表中,应保持有同样的字段类型和字段长度,并尽量保持一致的字段命名;
示例
如下语句不符合规范(字段user_name在两个有业务关系的表中字段长度不一致,易导致业务接口冲突)
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
CREATE TABLE wap_user_login_log
(
user_name VARCHAR(80),
login_date DATE
);
  
如下语句符合规范
CREATE TABLE wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR2(16)
);
  
CREATE TABLE wap_user_login_log
(
user_name VARCHAR(100),
login_date DATE
);
  
以下是建议的公共字段名称及类型
create_user
VARCHAR(32)
建档人
create_time
datetime
创建时间
update_user
VARCHAR(32)
更新人
update_time
datetime
更新时间
remark
VARCHAR(255)
备注
contact_name
VARCHAR(32)
联系人
tel
VARCHAR(20)
电话号码
mob
VARCHAR(20)
手机号码
address
VARCHAR(100)
联系地址
zip_code
VARCHAR(10)
邮编
identity_card
VARCHAR(25)
身份证号
fax
VARCHAR(20)
传真
email
VARCHAR(64)
电邮
  
建议1: 字段名建议不要用JAVA关键字来命名,;
  
4.2.4 主键 规则1:涉及到要做分库分表的表用有序UUID做主键,UUID主键类型选择CHAR(32);
规则2:不涉及分库分表的表选用自增长ID做主键,主键类型使用unsigned int或unsigned big int;
规则3:主键无特别要求的,字段名统一定义为 id;
  
4.2.4 外键 规则1:外键名应以”fk_”开头,后接表名;
示例
如下语句不符合规范(外键名未以fk_开头)
alter table wap_user_login_log
add constraint wap_user_login_log_f foreign key(user_name) REFERENCES tb_user_name(user_name)
如下语句符合规范
ALTER TABLE wap_user_login_log
ADD CONSTRAINT fk_wap_user_login_log FOREIGN KEY(user_name) REFERENCES tb_user_name(user_name)
规则2:不同的表的外键,如果引用的是相同表的相同字段,则外键字段名及类型应保持一致;
  
4.2.5 索引 规则1:唯一索引应以”uk_”+”表名_”+”字段名”命名;
示例
如下语句不符合规范(唯一索引未以uk_开头)
ALTER TABLE wap_user
ADD UNIQUE wap_user_username_u (username)
如下语句符合规范
ALTER TABLE wap_user
ADD UNIQUE uk_wap_user_username (username)
  
规则2:普通索引应以”idx_”+”表名_”+“字段名”命名;
示例
如下语句不符合规范(不符合索引命名规范)
ALTER TABLE wap_user
ADD INDEX wap_user_user_id_idx (user_id)
如下语句符合规范
ALTER TABLE wap_user
ADD INDEX idx_wap_user_user_id (user_id)
  
规则3:全文索引索引应以”fullidx_”+”表名_”+“字段名”命名;
  
4.2.6 视图 规则1:视图命名应以“v_”+“表名[_表名[_表名]]”命名,如果表名过多可以用“v_”+“功能描述”来命名;
示例
如下语句不符合规范(视图和表是不可以同名的,如下语句会引起错误且不符合规范)
CREATE VIEW wap_user
AS
SELECT first_name, last_name, job_id
FROM wap_user;
  
如下语句符合规范
CREATE VIEW v_wap_user
AS
SELECT first_name, last_name, job_id
FROM wap_user;
  
4.2.7 函数 规则1:函数命名以”func_”开头,后接函数的功能;
示例
如下语句不符合规范(未以func_开头)
CREATE FUNCTION get_money
BEGIN
……
END;
如下语句符合规范
CREATE FUNCTION func_get_money
BEGIN
……
END;
  
4.2.8 存储过程 规则1:存储过程以“proc_”开头,后接功能描述;
示例
如下语句不符合规范(未以proc_开头)
CREATE PROCEDURE update_user
BEGIN
……
END;
  
如下语句符合规范
CREATE PROCEDURE proc_update_user
BEGIN
……
END;
  
4.2.9 触发器 规则1:触发器以“trig_”+表名+“_ins/del/upd”+”_before/after”命名;
示例
如下语句不符合规范(未遵循命名规范)
CREATE TRIGGER trigger1
AFTER DELETE ON wap_user
BEGIN
……
END;
  
如下语句符合规范
CREATE TRIGGER trig_wap_user_del_after
AFTER DELETE ON wap_user
BEGIN
……
END;
  
4.2.10 临时表 规则1:临时表以“tmp_”开头,后接功能描述;
示例
如下语句不符合规范
CREATE TEMPORARY TABLE tab_tmp1
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
如下语句符合规范
CREATE TEMPORARY TABLE tmp_wap_user
(
user_name VARCHAR(100),
pass_word VARCHAR(16)
);
  
规则2:如果是在上线/割接中被重命名的表,命名应是原表名+“_YYYYMMDD”;
示例
如下语句不符合规范(临时表以old结尾,而非日期结尾)
RENAME TABLE wap_user TO wap_user_old;
如下语句符合规范
RENAME TABLE wap_user TO wap_user_20100416;
  
4.2.11 用户及数据库名 规则1: 数据库名:retail_前缀+模块名,如POS系统的数据库名为retail_pos,MDM的数据库名为retail_mdm,用户名与数据库名尽量一致;
示例
如下语句符合规范
retail_pos pos系统
retail_mps 营促销系统
retail_oc 订单中心
retail_pms 采购管理系统
retail_mdm mdm
retail_gms 货品管理系统
retail_fms 财务管理系统
4.3对象设计规范 4.3.1 表设计 规则1:数据库设计文档中,必须包含表数据保留时间;
规则2:数据库设计文档中,必须包含表在最大保留时间下的数据量;
规则3:数据库设计文档中,必须包含表的读写频率;
规则4:和其他表有关联的表,和其他表功能一致的字段类型以及长度,尽量使用相同的列名;
规则5: 每个表应设计一个主键;
规则6:数据库字符集,表字符集,字段字符集统一选用UTF8字符集,校对规则统一使用大小写敏感的utf8_bin;
规则7:表引擎选用INNODB引擎;
规则8:必须要有表的注释,用于描述表的功能;
  
建议1:对于需要同步到数据仓库的表,原则上必须包含同步频率以及同步机制;
建议2:历史表后缀建议用“_hist”;
  
4.3.2 字段 规则1:字段必须要有注释信息,如果字段的值是有限的(如状态值只有“有效”、“无效”,如性别只有“男”、“女”等)必须在字段注释中对每个值表达的意思进行描述;
规则2:定长字符列使用CHAR类型, 不定长字符型使用VARCHAR类型;
规则3:日期字段只需要表达年月日的选用DATE类型,需要表达年月日时分秒的字段选用DATETIME类或TIMESTAMP类型,但请注意各自能表达的范围以及TIMESTAMP的时区特性;
说明:MySQL中的DATETIME对应ORACLE的DATE类型,而MySQL的DATE类型只是ORACLE DATE类型的年月日部分不包括时分秒部分,MySQL TIME类型是ORACLE DATE 类型的时分秒部分,下表是MySQL各时间类型的格式样例
  
Data Type
“Zero” Value
DATE
'0000-00-00'
TIME
'00:00:00'
DATETIME
'0000-00-00 00:00:00'
TIMESTAMP
'0000-00-00 00:00:00'
YEAR
0000
  
DATETIME与TIMESTAMP类型的区别
DATETIME
TIMESTAMP
存储长度
8字节
4字节
时区支持
不支持
支持
表达范围
1000-01-01 00:00:00
9999-12-31 23:59:59
1970-01-01 00:00:01
2038-01-19 03:14:07
保存格式
实际格式保存
UTC格式
  
规则4:ORACLE转MySQL之NUMBER字段类型转换;
number(M,N)如果N是0则为整形,对应MySQL的整形类型,下面是MySQL的各整形类型的所需字节数及能表达的范围(摘抄至官网5.6),
Type
Storage
Minimum Value
Maximum Value
  
(Bytes)
(Signed/Unsigned)
(Signed/Unsigned)
TINYINT
1
-128
127
  
  
0
255
SMALLINT
2
-32768
32767
  
  
0
65535
MEDIUMINT
3
-8388608
8388607
  
  
0
16777215
INT
4
-2147483648
2147483647
  
  
0
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
  
  
0
18446744073709551615
如果number(M,N)中N大于0则对应MySQL的decimal类型,如oracle的number(5,2)则MySQL为decimal(5,2),值得注意的是,在超出范围的情况下ORACLE会报错,而MySQL会取它能表示的最大值来替代原来的值,如decimal(5,2)/number(5,2)能表达的范围为 -999.99-999.99 如果要插入1000的数据,oracle会提示超表达范围的错,而MySQL会以999.99来替代
  
规则5:固定长度的字符串使用CHAR,单字符字段使用CHAR(1)类型;
规则6:字段避免使用NULL值,用默认值来替代,修改时间,审核时间等用“0000-00-00 00:00:00”这样的默认值进行替代,备注用‘’的空字符进替代;
规则7:不建议使用ENUM,SET类型,用TINYINT替代;
  
建议1: 尽量不使用BLOB,TEXT类型,大字段建议单独设计表,通过关联进行查找;
建议2: 建议使用UNSIGNED 存储非负数值;
同样的字节数,存储的数值范围更大
4.3.3 索引 规则1: 无特别说明,每个表的索引不得超过5个;
规则2: 单字段上的索引不得超过2个;(即一个单字段最多可在上面建立一个单字段索引和一个组合索引包含这个字段)
规则3: 复合索引原则上不得超过3个字段;
规则4: 外键列需要创建索引;
  
建议1: 频繁出现在where子句里的字段建议建立索引;
建议2: 用来和其他表关联的字段建议建立索引;
建议3: 索引字段建议有高的选择性和过滤性(count(distinct)/count(*)>0.6);
建议4: 建立索引的时候,建议考虑到SELECT和INSERT,UPDATE,DELETE的平衡;
建议5: 一般建议在查询数据量10%以下使用索引;
建议6: WHERE子句的查询条件构成索引字段前导字段;
建议7: 选择性更高的字段放在组合字段索引的前导字段;
建议8: 如果字段选择性接近,则把频繁查询的字段放在前面;
建议9: 进行GROUP BY或者是ORDER BY的字段应在组合字段索引的前导字段;
  
4.3.6 视图 规则1:视图中不允许出现ORDER BY排序;
规则2:基于多表关联的视图,必须在字段名前指定表别名;
  
建议1:视图的基础数据尽量从表中获取,尽量不要嵌套视图;
  
4.3.7 存储过程 规则1: 避免将业务逻辑放在存储过程中,那样容易将业务逻辑和DB耦合在一起;
规则2: 存储过程,必须有异常捕获代码;
规则3: 存储过程中严禁使用GOTO语句进行跳转;
规则4: 有循环更新的存储过程,必须进行批量提交,且必须进行事务控制;
说明:MySQL存储过程中必须用START TRANSACTION 来显示开始一个事务,否则会按默认的每个DML做个一个事务。
规则5: 存储过程中如果使用了游标,则在存储过程正常或者异常退出必须关闭所有打开的游标;
规则6: 存储过程中如果有更新,必须在异常捕获代码中做回退操作;
规则7: 注释格式如下,存储过程说明放在在COMMENT中,其他用”##”进行注释说明;
CREATE PROCEDURE prc_vendor
COMMENT '说明:同步下发接收; 参数:xxxx; 返回:标志0=成功;’
##建立:xxx 2012.07.17
## Modify by xxx 2012.08.08 增加供应商状态字段
##Modify by xxx 2012.11.10 增加供应商英文名称字段
BEGIN
...
END;
建议1:存储过程每次被更新,应在注释中说明更新的内容,更新的日期,以及更新的责任人,并且在更新前保留旧版本代码
建议2:尽量避免在存储过程中使用动态SQL。
  
4.3.8 函数 规则1: 避免将业务逻辑放在函数中,那样容易将业务逻辑和DB耦合在一起;
规则2: 函数中,如果进行了事务处理,必须有异常捕获代码;
规则3: 函数中严禁使用GOTO语句进行跳转;
规则4: 有循环更新的函数,必须进行批量提交,且必须进行事务控制;
规则5: 函数中如果使用了游标,则在函数正常或者异常退出必须关闭所有打开的游标;
规则6: 函数中如果对数据进行了更新操作,必须在异常捕获代码中做回退操作;
规则7: 注释格式如下
CREATE FUNCTION func_get_serialno
(
p_request VARCHAR ###请求编号
)
return VARCHAR
COMMENT ’说明:产生序列号函数,通过serialno_config配置表响应产生序列号; 参数:p_requestid 请求编号 返回:返回需要的序列号‘
##建立:xxx 2013.07.02
##modified by xxx 2014-6-18 xxx
BEGIN
...
END;
  
建议1:函数每次被更新,应在注释中说明更新的内容,更新的日期,以及更新的责任人,并且在更新前保留旧版本代码;
建议2:函数尽量只是实现复杂的计算功能,不对数据库进行更新操作;
4.3.9 触发器 规范1:如无必要,不得设计触发器,任何触发器的设计,必须得到DBA批准;
规范2:应用的完整性不应由触发器保证,而是通过代码的事务控制;
建议1:有高度一致性依赖的逻辑,触发器应设计为BEFORE而非AFTER方式;
  
4.4 开发规范 4.4.1. 基本规范  
规则1: 避免使用存储过程、触发器、函数等,容易将业务逻辑和DB耦合在一起,并且MySQL的存储过程、触发器、函数中存在一定的BUG;
规则2: 禁止进行字段数据类型的隐式转换,所有转换必须进行明确的数据类型转换;
说明:隐式转换会导致字段上的索引失效, 最为常见的隐式类型转换常见于时间类型与字符串类型之间,建议所有时间类型字段在myBatis中均以时间类型传入,或者以字符串传入然后通过时间函数转换字符串为合法的时间格式 ,如下:
SELECT name
FROM member
WHERE vgmt_create=DATE_FORMATE('2009010101:02:03','%Y-%m-%d %H:%i:%s');
规则3: 禁止在多表关联的时候,在非索引字段上的关联;
规则4: 进行模糊查询时,禁止条件中字符串直接以“%”开头;
规则5: 在使用for update子句时一定注意限制条件,避免锁定全表或者不需要被锁定的行记录。如无必要锁定数据则应避免使用for update;
规则6: 在进行结果集合并(union或union all)时, 如不需要进行结果去重,则必须使用union all,而不能使用union;且尽量减少进行数据集的去重;
规则7: 除非必要,避免使用 != 等非等值操作符,会导致用不到索引;
规则8: 禁止在 WHERE 条件中出现的过滤字段上使用任何函数进行类型或格式的转换;正确的做法是把传入的值转换为列类型所需要的;
错误的写法:
SELECT username
FROM gl_user
WHERE DATE_FORMAT(gmt_create, %Y%m%d%H%i%s')='20090501022300‘;
  
正确的写法:
SELECT username
FROM gl_user
WHERE gmt_create=DATE_FORMAT('20090501022300', '%Y-%m-%d %H:%i:s');
  
规则9: 禁止使用order by rand();
order by rand() 会将数据从磁盘中读取,进行排序,会消耗大量的IO和CPU。
规则10:避免大使用大SQL,可以拆分成多个小SQL来替代;
  
4.4.2. 绑定变量使用规范 规则1: 应用端所有查询的 where 条件中的变量,都需要使用绑定变量来实现,以防SQL注入,同时性能也会更优;
规则2: 在 myBatis 的 SqlMap 文件中绑定变量使用 "#{var_name}"表示,替代变量使用"${var_name}";所有需要动态 Order By 条件的查询,在使用替代变量过程中,需要将可能传入的内容以枚举类写死在代码中,禁止接受任何外部传入内容;对于不变的常量条件,请使用常量而不是变量;


规则3: IN子句,使用"Iterate + 数组类型变量"的方式实现绑定变量而不是通过代码拼接 Query 语句;
例如:


myBatis会生成user_level in (1,2,3,4,5 ...)的语句
  
4.4.3. 分页规范 假如有类似下面分页语句:
SELECT * FROM table ORDER BY create_time DESC LIMIT 10000,10;
这种分页方式会导致大量的IO,因为MySQL使用的是提前读取策略。
推荐分页方式:
SELECT * FROM table WEHRE create_time
SELECT * FROM table INNER JOIN (SELECT id FROM table ORDER BY create_time LIMIT 10000,10) AS t USING(id);
  
4.4.4. 建议 建议1: 尽量使用if来简化SQL访问数据库的次数;
示例:
如下两个语句实现的功能
SELECT COUNT(*) , SUM(salary)
FROM employees
WHERE department_id = 20
AND first_name LIKE 'SMITH%';
  
SELECT COUNT(*) , SUM(salary)
FROM employees
WHERE department_id = 30
AND first_name LIKE 'SMITH%';
可以使用IF改写为如下语句
SELECT COUNT(IF(department_id=20, '*', NULL)) d20_count,
COUNT(IF(department_id=30, '*', NULL)) d30_count,
SUM(IF(department_id=20, salary, NULL)) d20_sal,
SUM(IF(department_id=30, salary, NULL)) d30_sal
FROM employees
WHERE first_name LIKE 'SMITH%';
建议2: 避免使用HAVING子句, HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销;
示例
如下语句使用的是HAVING子句
SELECT last_name, avg(salary)
FROM employees
GROUP BY last_name
HAVING last_name != 'Grant'
AND last_name != 'Fay'
  
改写使用WHERE的语句如下
SELECT last_name, avg(salary)
FROM employees
WHERE last_name != 'Grant'
AND last_name != 'Fay'
GROUP BY last_name
建议3: 尽量少用not exist/no in等反向写法。如果一定要用时,尽量选择not exist;
建议4: 尽量少用is null/is not null等null的处理;
建议5: SQL语句中IN子句里的值不应超过300;
建议6: 对于大表查询中的列项应尽量避免进行诸如CAST()或CONVERT()的转换;
建议7: 尽量避免进行全表扫描,限制条件尽可能多,以便更快搜索到要查询的数据;
建议8: SELECT查询语句建议增加limit 1000 限定返回的行数;
建议9: 进行数据库结构设计的时候,考虑适当的冗余,尽量确保应用读写数据的SQL简洁;
建议10: 要返回MySQL自增序列的ID值,可以考虑使用函数LAST_INSERT_ID(),此函数只能返回同
一个SESSION最近一次对有AUTO_INCREMENT属性表INSERT的ID值
4.5. 开发实用技术 4.5.1. CHAR(N)或VARCHAR(N)中的N解释 MySQL中此两类字符串定义时候填写的长度N,不是字节数的意思 ,而是字符数的意思。
我们MySQL所有数据库的字符集都为UTF8,字符集校对规则为UTF8_bin。对于中文汉字,实际存储的时候占三个字节,而数据或字母,则只占一个字节。例如:
CREATE TABEL company_inventory (color VARCHAR(44) COMMENT '颜色');
则color最多能存储40个字符。
4.5.2. 日期操作函数 获取当前时间:NOW(),CURDATE()、CURTIME()
其中, NOW()函数精确到秒, 格式:YYYY-MM-DD HH:MM:SS
CURDATE函数精确到天,格式:YYYY-MM-DD
CURTIME函数精确到秒,格式:HH:MM:SS
  
日期数值的加减函数:
DATE_ADD(date,INTERVAL expr type)
DATE_ SUB(date,INTERVAL expr type)
常用的几种type类型:YEAR、MONTH、DAY、HOUR、MINUTE,其中expr可以为正数或负数,我们在开过程中,一般使用DATE_ADD()函数,若要作日期减去一个数字的方式,就使用负数。
DATEDIFF(expr1,expr2),是返回 开始日期expr1与 结束日期expr2之间,相差的天数 ,返回值为正数或负数。
  
返回日期某部分信息的函数:
YEAR(expr1) 返回日期expr1部分的年份;
MONTH(expr1) 返回日期expr1部分的月份;
DAY(expr1)返回expr1部分的天数;
WEEKDAY(expr1)返回expr1对应的星期数字
  
4.5.3. 类型转换函数 字符串转换成日期方式,DATE_FORMAT()或STR_TO_DATE(),
两个函数的格式如下:
DATE_FORMAT(expr1,format)
STR_TO_DATE(expr1, format)
常用的日期格式YYYY-MM-DD HH:MM:SS 对应的format为%Y-%m-%d %H:%i:%S
通用的类型转换函数:
CAST(expr AS type)
CONVERT(expr,type)
CONVERT(expr USING transcoding_name)
  
4.5.4. INNODB与MYISAM的主要区别
MyISAM
InnoDB
构 成上的区别:
每个MyISAM表在磁盘上存储三个文件。文件的名字以表的名字开始,扩展名指出文件类型。
.frm文件存储表定义。
.MYD文件存储数据 (MYData)。
.MYI文件存储索引 (MYIndex)。
InnoDB表空间数据文件和日志文件,InnoDB表的大小只受限于操作系统文件的大小
事务处理上方面:
MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持
InnoDB提供事务支持事务,外部键等高级 数据库功能
SELECT UPDATE,INSERT,Delete操 作
如果执行大量的SELECT,MyISAM是更好的选择
1.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表
2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除。
3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
表的具体行数
select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的
InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

表锁,MyISAM表锁读写互相阻塞,写锁优先级高于读锁。参数选项low_priority_updates设置写锁优先级比读锁低、参数选项concurrent_insert配置是否使用并发插入特性,concurrent_insert=0 表示不允许并发插入,concurrent_insert=1表示允许对没有空数据块的表使用并发插入(缺省),concurrent_insert=2表示对所有表允许并发插入
提供行锁(locking on row level),提供与Oracle类型一致的不加锁读取(non-locking read in SELECTs)。MySQL的行锁是针对索引加的锁,不是针对记录加的锁,在不通过索引条件查询的时候,InnoDB使用的是表锁,而不是行锁。
另外,即便在条件中使用了索引字段,但是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关键词 游戏源码 源码 网站源码 小程序源码 app源码 源码之家 源码资本 棋牌源码 源码网 源码时代 php源码 阿奇源码 源码下载 刀客源码 源码是什么 源码论坛 易语言源码 论坛源码 源码交易 java源码 源码中国 商城源码 asp源码 影视源码 源码站 安卓源码 时时彩源码 站长源码 a5源码 源码分享 网站源码下载 企业网站源码 android源码下载 php 源码 php源码下载 免费源码 asp源码下载 个人主页源码 网址导航源码 手游源码 源码天空 c源码 源码熊 asp 源码 在线客服源码 商业源码 精品源码 个人网站源码 asp网站源码 博客源码 私服源码 vb源码 aspnet源码 中国源码 cms源码 视频网站源码 易语言源码大全 神马影院php源码 c#源码 net源码 网页游戏源码 软件源码 源码哥 在线考试系统源码 安卓源码下载 源码库 源码爱好者 源码资源网 php网站源码 商业源码网 音乐网站源码 导航网站源码 源码商城 钓鱼网站源码 熊猫烧香源码 门户网站源码 .net源码 web源码 彩票源码 代刷网源码 小说网站源码 delphi源码 在线客服系统源码 整站源码 交友源码 房产网源码 广告联盟源码 aspnet 源码 源码社区 学校网站源码 公司网站源码 775源码屋 源码吧 新闻网站源码 云购源码 源码交易网 淘客源码 vb源码下载 股海网指标公式源码 通达信指标公式源码 源码集合 vip源码 电脑维修网站源码 web游戏源码 酷源码 彩票网站源码 源码程序 创业网站源码 asp.net源码 net源码下载 vbnet源码 亿乐社区源码 易语言源码网 源码超市 卖源码 电影网站源码 404源码社区 旅游网站源码 源码出售 flash源码 h站源码 net网站源码 网络公司源码 android游戏源码 莎莎源码 旅游网站源码下载 asp.net 源码 jsp源码 游戏源码网 网页源码 android源码 表白网站源码 淘宝客网站源码 棋牌源码论坛 易语言qq源码 表白网站源码大全 psd源码 易语言源码大全 卡盟源码带分站 狗扑源码 yy头像源码 淘宝客源码 51aspx源码 手机网站源码 love源码 易语言钓鱼源码 一元云购源码 一元夺宝源码 a5源码网 外星人源码 易语言游戏源码 苍老师高清种子源码 直播源码 云矿机源码分享 装修erp管理系统源码 vscode 源码解析 淘宝asp源码 seaweedfs源码分析 贪吃蛇大作战 ts 源码 陕西挖坑源码 全本书屋免费源码 数据结构java源码 淘客返现源码 网站登陆界面源码 视频学习网站源码 微信小程序源码可靠吗 999朵玫瑰花表白源码 linux fork源码 源码hostsir 友情链接平台 源码 易语言电话源码 源码 数码 商城 易语言 留言源码 淘宝公式源码 溯源码有假的吗 源码 编辑器控件 c 控件源码 小程序源码导入修改 下载站网站源码 dede网站源码 dnf辅助源码附带模块 rss 订阅 源码 qq钓鱼源码怎么用 p2p searcher源码 怎样打开asp源码 qq飞车抽奖辅助源码 t9输入法源码 qq粒子头像源码下载 svip源码论坛 vb源码 2000 仿刀塔传奇 源码 百度vb源码例子 次世代音频源码 仿92直播源码 安卓 电话本源码 天下通源码 如何更该html源码怎么 单页源码程序 淘宝上源码是什么 如何修改exe程序源码 商业进销存源码 软件源码破解 春哥源码邀请码 八位源码表示范围 天书奇谈 辅助 源码 楠秀直播源码 微信 小说 付费 源码 ddx多个周期指标源码 头像psd源码打包下载 童装网站源码 同城交友完美整站源码 网站群源码 网站证书编号查询源码 土豆播放器源码 坦克宝贝全套源码 树形菜单 源码 透明flash源码 十字绣 网站源码 图书销售源码 探花教程网源码下载 网站工具源码 手机psd源码 手机qq 源码 网页gps定位源码 微信消息恢复源码 视频聊天室源码asp 斗牛源码价格 荣耀原生java影视app源码 59pic美女图片源码 php人事管理系统源码 labview源码 易支付网站源码 dnf驱动源码 爱秀直播诱导源码 applem2引擎全套源码 小程序 分销商城源码 cocos2dx lua游戏源码 易语言窗口同步器源码 烈火雄心 gotv 源码 ionic 项目源码 fd源码教程 c p2p 源码 织梦旅游网站源码 foxtable erp源码 jar包源码查看工具 jsp框架源码 醉八仙登录器源码 jquery源码学习笔记 unity开发3d麻将源码 js天猫抓娃娃游戏源码 jdk6.0 源码 java 团购网 源码 lpk.dll源码 javaee.jar源码 flash源码短片下载 java网站 源码 dhcp server 源码 flv播放器源码下载 jsp api源码 html课程表源码 dnf箱子源码 永利娱乐系统源码搭建 ssh项目源码下载 jvm 源码下载 java在线支付源码 java实现发帖页面源码 java捕鱼达人免费源码 jpeg 源码 blog 租房网站源码下载 通达信盘中选股源码 jsp源码出现乱码 中国 商业 源码 征婚交友网站源码合买 google talk 源码 unity3d源码下载 统计语言模型 源码 rockplayer 源码 微信公众号asp源码安装 文件源码 重发软件源码 linux 源码解析 openerp 源码 nehe opengl 源码 中国源码基地 android java源码 文字直播源码 文件下载 源码 物业源码pb csdn qq炫舞卡八音 源码 ons交友源码 phpcms源码文件 ok168源码 代理网站源码 带网上充值功能 源码 安卓相册源码 仿猎聘网源码 八批psd头像源码 出售vb源码 爱购物电子商城源码 个人门户网站源码 安卓新闻客户端源码 高仿蘑菇街源码 底部异动k线源码 爱情黑页源码 超级病毒源码 搜猫x源码下载 淘宝首页 源码 美女 数字卡盟网站源码 天空源码社区 汕头招聘源码 办公app源码 头像 源码 皮肤 全站源码下载 输入法 源码 投资网源码 淘宝出售源码 淘宝相册 源码 深度网站导航源码 java easyui项目源码 20秀诱导直播源码 咸鱼源码 dsa善领源码 ghost远控源码详讲 android源码 打包下载 flapmmo源码 java 源码交易 flash网站整站源码xml h.264源码解析 asp企业源码html 燕窝溯源码 访问次数 apicloud demo源码 javah 源码 flash 源码 翻页 emoi源码 dedecms官方网站源码 hao123整站源码 flex 游戏 源码 ibos 源码 ios手机麻将源码 flash as3 源码下载 数字代币源码 centos源码包下载网站 jsp mvc 源码 java 高效获取url源码 flash留言板源码下载 h站源码共享 flash透明素材源码 jsp网站开发源码 整形美容网站源码 java源码 电子商务 ios 网易新闻 源码 ie 查看源码快捷键 j2me浏览器源码 万挂作坊全套源码 go9go源码 java web完整项目源码 java 地图源码 支撑压力线源码 网络祭祀网站源码 源码天空密码 php 心愿墙系统源码 竞猜 源码 java 中国餐饮技术网源码 网站分类目录 源码 乌龙学院 源码 h5酒店预订系统源码 opc client 源码 psd空间源码 qq三国源码 qq钓鱼软件源码.rar qq屋动态空间源码 直销源码修改 qq 乐园 源码 ps源码图 网上售书系统源码 制作dnf自动喊话源码 qq业务网站源码v3 运行jquery源码 ssh 项目源码 pdf to excel 源码 源码软件下载 python毕设源码 discuz 验证码 源码 移动端h5页面源码下载 网易彩票源码 门店展示 小程序源码 下吧源码 qq刷赞平台网站源码 拼团app源码下载 网站源码wgwzs 系统 订单 源码 微擎会员卡源码 寻源码 建站 网站格子店铺源码下载 源码库 开源中国 夜魅直播源码 网速测试源码 远程木马 源码 优酷 土豆 源码 图像 vb 源码 虚拟网店源码 物通网源码 微品秀 源码下载 dota类网页游戏源码 firefox 源码解析 javascript程序源码 flash宣传动画源码 flash3d游戏源码 g722 源码 gdal 源码 srtm java 8583 源码 flash图片源码 java flex源码下载 装修crm 源码 flash源码查看器 站长吧源码社区 dj网站源码代 e语言验证码源码 中国商业源码 sgl查看工具源码 doom3源码分析 flash引导页源码 filemon 源码 java calendar源码 delphi 应用教程 源码 c 标签打印源码 中国服装网 源码 网络爬虫 源码 xpay 个人收款 源码 在线祝福网站源码 炫 办卡网贷平台 源码 网页源码 改 asp网页 源码 逐浪cms源码 红包流水统计源码 网络公司asp源码 万挂作坊4.x源码 在线录制视频 源码 整人域名源码 php 短信平台 源码 ogre 源码 qq号源码 php天气源码下载 中国龙flash网站源码 python的exe源码分析 育儿网源码 带数据 qq空间皮肤3d源码下载 支撑线源码 直播8源码 qq上线远控源码 协同过滤算法源码 武林delphi源码 校园表白小程序源码 在线视频点播java源码 彩虹代刷网源码4.2 场地预约 php源码 struts2网站源码 android su源码 vb 商业程序源码 2018汪年全家福 源码 html5连连看源码 h5抓娃娃机源码 彩虹易支付app源码 java嗅探源码 html编辑器asp源码 gcov 开源 源码 idc 网站 源码 html页面显示源码 dnf秒拍卖源码 iphoneqq协议源码 flash源码下载网站 找你妹源码 e语言笔记加密源码 ie 10 察看源码 asp店铺源码免费下载 jsp源码库存管理 jetty 源码 下载 asp小游戏源码 java连接数据库源码 java sdk源码 flash带后台源码 html 静态页面源码 idc网站源码支付 ip地址查询 源码 iphoneqq在线软件源码 hibernate3源码下载 jvm源码下载 ftp工具上传网站源码 如何把安卓源码变成apk h5万人猜源码 个股指标公式源码 彩虹代刷网源码美化 动态源码语言排行 dedecms笑话 源码 windows锁屏截屏源码 flash请柬源码 eclipse源码下载 flash站源码 js树形结构源码 html 制作 源码 jsp 网上商城源码 新闻大数据爬取源码 ethtool 源码 ios 股票 源码 招聘职位源码 dnf后台喊话源码 dw聊天室源码 gtk 源码下载 iphone开发源码 android 2.2源码 web表白 程序源码知乎 图标秒点器易语言源码 之道返利源码 ons交友网站源码 psd空间 源码下载 qq网页登录源码 qq 网址 源码 qq解除限制钓鱼源码 php网盘程序源码 英文站b2b 源码 网站源码什么意思 qq秀设计网源码 ps怎么修改源码文字 世界杯足球竞猜源码 虚拟主机评测网源码 彩虹云任务源码7.1.8 小刀娱乐易源码 区块马 源码 微信强制分享群 源码 android源码 ios源码 android互动屏保源码 jsp oa源码 gh0st源码编译 易语言抢票源码 java 串口源码 google maps 源码 div css 源码 杂志迷 源码 java 源码包 网站源码在线翻译 flash文字效果源码 flash 导航源码 jsp oa办公系统源码 dj网站源码代收费功能 asp动网论坛源码 java io源码 java 彩信 源码 jdk1.5源码 html5砸金蛋源码 怎样获取天猫网页源码 最好的源码网 ps红色火焰源码 易拍网 源码 赞不停源码 mysql源码pdf minix 源码 txt mpeg2解码器源码 源码 html php建站源码下载 麻将游戏源码安卓 易语言 网页 源码 ssh开发源码 php webgame 源码 php登陆界面源码 qq酷淘宝客源码 php 源码 投票 struts2的源码 源码天空下载 android 超级画板源码 易语言 百度 源码 tcmalloc 源码分析 易语言基础源码 小猪cms源码2017 易语言语音说话源码 易语言超文本源码 倚天蝴蝶形态指标源码 易语言邮箱扫号的源码 易语言破解源码 易语言网页变速器源码 mybatis源码包下载 android10源码打包下载 zip源码 易语言修改源码教程 易语言客户登记源码 订单文件网站源码 仿58同镇源码 源码如何打包ipa 订货批发系统源码 小高教程网的源码 织梦采集侠源码解析 漫画小说源码带采集 淘宝搜索功能源码 源码售卖网 手机github下载源码 仿5173交易平台源码 传奇评测网源码下载 传奇源码如何泄露的 先锋影音资源码 sql仓库管理系统源码 海外源城系统平台源码 琪琪源码 栗子发卡网源码 机房运维管理系统源码 西游记张卫健tvb源码种子 新闻站源码自动采集 九转指标源码 源码直播免费 大商创源码安装 返利app原生前后端源码 下载 免费社区团购系统源码 图片社交平台源码 淘客导购cms源码 通达信发行价源码 刷脸支付系统源码 在线作图网站源码 区块链钱包系统开发源码 殷保华公式源码 变色龙源码 安卓源码助手 欧傅算命源码下载 黑阔站长吧源码 抄底主图指标公式源码 火速拍卖源码 html5魂斗罗源码 布艺网站源码 在线库app源码 beginthreadex源码 通达信买卖金点源码 建站公司企业源码 免费自助建站平台源码 医院管理信息系统源码 exe怎么查看源码 冒险岛ijl15.dll源码 黑色分类目录源码 模型展示源码 美女一对一加视频app源码 震荡波源码 微信三方平台源码 箱体指标源码 宝塔线公式源码附图 深入浅出mfc源码 实验室设备管理系统源码 云服务器编译安卓源码 ios马甲包老外源码库 flvjs源码 webpack的loader源码 嗨玩源码 刷脸saas系统源码 net源码是什么 qq业务乐园源码 ps动态qq头像源码 netants源码 php地方信息港源码 qq屋模版源码 oa 项目源码下载 制作聊天软件源码 qq业务 源码下载 php服装商城源码 装修网网站源码 linux 0.11源码下载 net 订货系统源码 多城市商城源码 我画你猜源码 tcpdump 源码分析 重庆婚嫁网最新源码 易语言电影菜单源码 md5解密源码php 易语言挂机脚本源码 易语言目录监视源码 易语言本地验证源码 shopex仿天猫商城源码 python源码剖析买不到 dba要研究数据库源码吗 块儿快递查询源码 微信qq机器人整站源码 无极任务平台源码 asp棋牌游戏源码 期货app源码 百度小程序支付回调源码 刮刮卡系统源码 党建网站源码 易语言给软件做激活码源码 算命取名源码 群友通讯录源码 程序员阅读源码 正版满堂彩源码 汽车之家网站源码 创盟整站源码下载 九艺棋牌源码 骑士人才源码 好看的html黑页源码 java怎么查看jar包的源码 商城源码吧 万词霸屏 源码 天使测试工具源码 传奇源码哪几种 impress源码 几年前的php源码 十秒竞拍源码下载 游戏源码及素材下载 ai人工智能主播 源码 ihucms导航网源码 虚拟路由源码 三货币对冲ea源码 霸屏天下源码修改 视频一对一交友源码 方块导航源码 飞狐抛物线公式破解源码 dz论坛资源源码 买了源码能做什么 影视博客源码 源码安装openssh h视频网站源码带裂变 qt彩票源码下载 高清播放器源码 仿百度图片搜索源码 pcm和源码 易语言163邮箱源码 simpledateformat源码 外贸手机网页源码 电影视频网站模板源码 比分源码 安卓客服系统源码 dk买卖点公式源码 1737棋牌源码 java2实用教程源码 notepad源码分析 高清电影下载源码 小夜网php卡盟源码 因酷源码 mysql多表查询源码 填大坑源码 彩虹url转发源码 乞讨网php源码 买卖交割的论坛源码 a5源码opensns 外贸导购源码 asp网站源码 查看 溯源码真伪 dnf怎么源码泄露的 av平台源码 电子地图源码 旅游项目源码 热血虎卫源码 大挂武林源码 快递单号查询系统源码 map源码分析 源码转换成补码的规则 zblog源码分享 php发邮件接口源码 广告平台源码下载 vb 销存源码access 空包单号网源码 voicechatter源码 cc2540串口透传源码 大番薯12人牛牛源码 安卓手机锁屏病毒源码 传奇引擎源码修改教程 linux 源码包 mysql 仿搜狐视频分享源码 tpshop微信小程序源码 服装门户 源码 短地址赚钱源码 微信免费影视小程序源码 易语言采集网页源码 刀疤兔源码 动力社区源码 动网博客源码 源码制作器 下载 茶叶网站源码下载 采购软件源码 飞狐公式源码 捕捞季节公式源码 飘花电影网源码 小鹏 网络摄像头直播源码 zhe800 源码 ws源码群 webgl源码下载 在线礼佛源码 vc项目源码包含引用 十三水源码 qince vb节假日提醒源码 食材配送源码 指定程序走代理 源码 apm飞控源码 小程序识别文字源码 易语言吃鸡源码 边缘源码 农业中子出售网站源码 新闻app 源码下载 云呼源码 php自动收录导航源码 2018世界杯竞猜源码 新闻聚合app完整源码 多城市家教平台源码 短线操盘手指标源码 单位主页网站源码 多功能记事本源码 大漠插件 源码 顶部线的公式源码 仿爱玩源码 国外flash片头源码 黑色音乐网站源码 久久信息网源码 简单的网址导航源码 婚庆 门户 源码 僵尸终结者 源码分析 建站大师 源码 留言本源码下载 极品源码社区 局域网通讯 源码 绿麻雀系统源码 流动字幕源码 大气拍卖公司网站源码 后盾网许愿墙源码 微信同城分类信息源码 three.js机房源码 全民k歌 解析 源码 物业收费系统源码 母婴小程序源码 google keep 源码 定位平台 源码 windowbuilder源码 win8网站源码 机器猫 拖拽 源码 记事本 源码 金字塔魔鬼通道源码 柳州房产网 源码 寒江独钓源码 即时通源码 简单导航网站源码 进进窗口化源码 换客 源码 汉字显示屏 源码 类似树洞外链的源码 绝版动态皮肤源码下载 集团首页 源码 竞拍系统 源码 开盘预警抓涨停 源码 接水管 游戏源码 关键字搜索的asp源码 黑域基地网站源码 慧眼识金指标源码 航海家 源码 寒龙源码 监控买卖指标源码 黑客360 qq刷钻源码 酒吧网站源码下载 酒店在线订房系统源码 集成搜索源码 侯杰stl源码剖析 家政公司源码 婚恋 在线聊天 源码 酷酷导航源码 酒店预定网站源码 卖源码网站 马士兵struts2源码 马甲 指标 源码 黑客源码网 绿色源码之 黑客之门 源码 军事门户源码下载 炫酷html表示源码 linux2.6内核源码注释 车位检测车牌识别源码 扫码挪车小程序 源码 arrsylist源码 帝隆p2p网贷系统源码 麻将胡牌算法源码 广告平台小程序源码 刺激战场源码在哪里找 workerman 游戏源码 cmake编译opencv源码 yy最新活动源码.zip 在线小说 网站源码 办公用品商城 源码 微赞微擎源码最新版 源码寻仙打怪辅助源码 赵鹏下吧 源码 vc 乐谱源码 centos 7 mysql 源码 黑马手机安全卫士源码 彩票门户源码 h5 翻牌抽奖源码 毕向东源码 安卓rom源码下载 仿qq游戏大厅源码 仿思道oa源码增强版 标题栏 源码 点卡源码 网站正在建设中 源码 多空风险指标源码 attention机制源码 vb串口源码下载 java web直播源码 vb源码 保存图像 vc 图形 源码 vb erp源码 vb ie 源码 分时博弈源码 商之翼yii2源码 python3.6源码下载 跑酷游戏源码完整版 采集电影网站源码 编辑 html 源码 采购申请入口系统源码 java类源码怎么看 布林带 源码 俄罗斯方块安卓源码 出售网址导航源码 源码啊 农业 信息网 源码 带源码sae建站 大盘指标 源码 附图 产品展示 php源码 批量修改网站源码 服务器源码如何 简单的游戏源码 莱整形医院源码 空间psd皮肤源码 家装后市场 源码 航海 至尊数据 源码 建站程序源码系统 家装php带源码下载 简易新闻发布源码 计算器 mfc 源码 换客中国源码 股票软件 delphi 源码 猴岛cf窗口化源码 华软源码网 灰色按钮克星源码 经过代理vb源码 竞拍网源码 机械类源码 论文网源码下载 相册 小程序 源码 eclipse关联maven源码 韩国源码下载站 竞价低开池初选源码 yy最新源码 垃圾源码 股票论坛 源码 卡哇猪电影网站源码 酷源码asp调试工具 科讯地方门户源码 空间psd源码 空间闪动标题栏源码 酷跑游戏源码完整版 卡盟源码哪个好 节日祝福源码 局域网 斗地主 源码 公司网站的源码 剑灵服务器emu源码 谷歌android 4.1源码 火爆的商机网整站源码 聊斋ol 源码 好吃猫外卖点餐源码 会计从业考试网站源码 垃圾x站换量用源码 红木家具代源码 喊话器源码 机房管理系统源码 就爱源码社区 黑客 指标源码 rtmp源码是什么 怪老头电脑源码 企业统一通信 源码 地方旅游网整站源码 白狼答题器源码 超级搜索引擎源码 淘宝客网站源码php 冲击波源码 十字消除的源码 淘宝卖家工具箱源码 三国跑酷源码 随意贴源码 旅行社综合业务管理系统源码 随机数生成器源码 威客整站源码 最新易企秀v13.0 源码 人才网源码 下载 网站整站源码下载免费 请销假系统h5源码 同城 聊天室 源码 压力线和支撑线的源码 iapp的源码用什么编译 通达信 波段王 源码 视频网站源码 jsp easyui tab 事件源码 世纪星平台源码 树型论坛源码 2017闲鱼源码吧 视频传输源码 正版彩虹代刷网源码 android gps定位源码 myzly二级域名分发源码 奇摩女孩 源码 网站自动化宣传机器源码 软件试用版 源码 共享单车 源码 xwork源码 yy钓鱼网站源码下载 vb导出导入excel源码 微信机器人投注源码 mac 源码安装mongodb vrml与java源码 vc数据库编程源码 vb.net下载软件源码 微信收款 源码 倒计时软件源码 避庄洗盘指标源码 天高云淡秒赞源码最新 盗取网站源码教程 动站源码下载 筹码监控指标源码 洞穴狂奔源码 查看java源码工具 钓鱼抽奖网页源码 砍价微信小程序源码 源码资本已投项目 求购房产网源码 中值滤波实现源码python 数据商城源码 日志签名档源码 软件营销网站源码 网狐内核源码 神将世界太史慈源码 神经猫源码 图书馆管理系统源码下载 失物招领app源码 小程序房贷计算器源码 ecshop车商城源码 android 足球源码 英语趣配音 php源码 易语言截图软件源码 易语言准心源码 源码能修改嘛 直播刮彩票源码 汽车uds诊断协议源码 android通讯软件源码 思途旅游cms源码 整人yy协议源码.zip 易语言源码编辑框右键 win8网址导航源码 缘来客网站源码出售 qq飞车公子辅助源码 安卓源码包下载 大游戏论坛源码 点卡销售系统源码 傲气战歌网网站源码 床上用品源码 安卓2.2源码 安装软件进度条源码 大麦户网站源码 炒股软件的源码 超级外链 源码 通达信 振幅源码 网 站源码 易企秀v12.7源码下载 网胜b2b 源码 同城交友网 源码 广州南站离白马服装城源码 外卖网源码 网址导航源码带推广 python源码统计爬虫 数字卡源码 贴吧查ip源码 视频聊天k歌源码php 散户至宝指标源码 apk源码调试 安卓手机点餐系统源码 准确出击选股指标源码 下载器源码 微信小程序 源码抓包 团购聚合源码 学成家教网源码 荒野行动方块透视源码 问道手游扫拍源码 winform综合案例源码 web ssm 项目源码 站长统计 源码 学生管理系统源码下载 兔子卡盟网站源码 小说随身听 源码 小姐 威客 源码 网上的源码后门多 源码之家 软件 下载 学校整站源码下载 怎么学 gcc源码 新闻文章系统源码 小游戏php源码 修改mac vb源码 小说源码下载带采集的 淘宝返利api接口源码 源码免杀入口点 在线图片制作源码 形象设计源码 spark1.5源码编译安装 吾爱挂q源码 微信独立商城源码 在线投注 源码下载 黑马网源码 flappy bird 源码 省钱快报源码 小京东淘宝客源码 asp报修系统源码 c winform 源码下载 c#验证码识别源码 快三源码手机版 夺宝源码下载 网页抓包工具源码 团购打折网源码 验证真假qq源码 源码 javamail 幸运28 源码 源码中含有非法链 修改头像源码文字 营销软件下载源码 营销单页源码 下载google源码 图片水印psd源码 新闻发布系统asp源码 小说采集 源码 虚拟摄像头源码 网站源码打包工具 兄弟变速器源码 星辰变 采集源码 微信墙源码免费下载 项目源码打包下载 推广联盟 源码 源码安装openerp 微赞最新源码 电玩源码破解 php 卡片机器人源码 战舰少女资源码 无限弹窗源码 鲜花预定源码下载 能连续涨停公式源码 微擎微赞视频打赏源码 小猪cms源码 2017破解