MySQL 语法

1. 创建新表         

 1.1. 创建一张数据表的基本格式
CREATE TABLE `trade` (
  `id` char(20) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `userid` int(1) NOT NULL DEFAULT '0',
  `type` int(1) NOT NULL DEFAULT '0' COMMENT '1:订货 2:消费',
  `orderid` char(32) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `psam` char(20) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `card` char(40) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL,
  `amount` int(1) unsigned NOT NULL DEFAULT '0',
  `itime0` int(1) NOT NULL DEFAULT '0' COMMENT '下单时间',
  `itime1` int(1) NOT NULL DEFAULT '0' COMMENT '交易发起时间',
  `itime2` int(1) NOT NULL DEFAULT '0' COMMENT '完成时间',
  `pay_type` int(1) NOT NULL DEFAULT '0' COMMENT '付款类型',
  `state` char(2) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL,
  `tradeNo` int(1) NOT NULL DEFAULT '0',
  `flag` int(1) NOT NULL DEFAULT '0' COMMENT '0未处理 1:已处理',
  `service_time` datetime DEFAULT NULL,
  `service_result` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `IDX_PA_IT_PS` (`pay_type`,`itime2`,`psam`),
  KEY `IDX_ORDERID` (`orderid`),
  KEY `IDX_USERID_ID` (`userid`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
     
    注:
       (1) <strong><span style="color:#008080;"># 若表中有自动增长的字段,若要设置primary key,只能为该字段</span></strong> 
       (2) 关于 CHARACTER SET xxx COLLATE xxx (上表中,char类型的字段都有该项)<p>            首先是MySQL里面关于<a target=_blank href="http://dev.mysql.com/doc/refman/5.0/en/charset.html" target="_blank">character set(字符集)和collation(整理?我认为翻译成比较规则可能更贴切)的概念</a>。</p><p>            Character set顾名思义,<span style="font-family:Arial;">就是字符、以及字符对应的编码的集合。<span style="font-family:Arial;">例如简体中文字符集gb2312就包括简体中文中的所有规定汉字,以及每个汉字对应的代码。</span></span></p><p>Collation,是指比较字符的规则的集合。有了比较规则,才能够将一组数据排序——例如按照英文字母顺序排序、汉字按照拼音顺序排序等等。显然,针对同样一组字符集</p><p>可以有不同的排序标准、规则。例如汉字可以按照拼音排序,也可以按照笔画多少排序。尤其是Unicode的字符集,由于其可以包含不同种类的语言,所以可以按照各种语言</p><p>的排序方法排序。此外,完全按照字符在字符集里的编码进行比较的方式称为binary比较。到了这里我们就容易理解了。举例来说,MySQL支持的gb2312字符集中,有gb2312_bin和gb2312_general_ci两种collation。很显然前者是binary比较规则,后者是一般的中</p><p>文字符比较规则。每种字符集都有其默认的collation。对于utf8字符集来说,其默认collation是utf8_general_ci。要获得MySQL里面支持的字符集和默认collation列表,可以使用<a target=_blank href="http://dev.mysql.com/doc/refman/5.0/en/charset-charsets.html" target="_blank">SHOW CHARACTER SET</a>语句:</p>       (3)KEY用于建立索引

2. 

     2.1 查询问题1

        table user_dict:

          

          table trade:

         

         查询语句:

         

SELECT
	tr.orderid,
  tr.pay_type,
	ud.type,
	ud.dict_value
FROM
	user_dict ud,
	trade tr
WHERE
 ud.type = tr.pay_type
AND tr.orderid = 'BM231001591588346045271'
       结果:

            出现大量交叉(查询据结果并没有错)


       2.2 连表查询

SELECT
	orderid,bi.`name`,ud.dict_value
FROM
	(
		SELECT
			orderid,
      pay_type
		FROM
			mpos.trade
		WHERE
			itime2 > UNIX_TIMESTAMP(
				DATE_SUB(
					'2016-03-24 00:00:00',
					INTERVAL 1 DAY
				)
			)
		AND itime2 < UNIX_TIMESTAMP(
			DATE_ADD(
				'2016-03-24 23:59:59',
				INTERVAL 1 DAY
			)
		)
		AND FIND_IN_SET(
			LEFT (pay_type, 2),
			'2,4,21,22,23,24'
		)
		AND state = '00'
	) tr left JOIN business_info bi on bi. CODE = LEFT (tr.orderid, 2)
    LEFT JOIN user_dict ud on ud.dict_key = LEFT(tr.pay_type , 2) and ud.type = 3
            先查trade 表3天的数据,在从business_info中得到business_info.name、从user_dict中得到user_dict.dict_value



你可能感兴趣的:(MySQL 语法)