您的位置:首页 > 数据库 > MySQL

MySQL 语法

2016-04-27 14:17 411 查看
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

3. 判断空

select * from table where id is null or id=''

区分is null 和‘’
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: