MySQL SQL模板语句
一、建表
create table promotion_price(
id int unsigned not null auto_increment,
promotion_name varchar(128) not null comment '优惠活动名称',
template_id bigint unsigned NOT NULL comment '优惠活动模版id',
product_code varchar(128) NOT NULL comment '优惠产品编码',
channel_code varchar(256) default null comment '渠道编码列表,null表示全部渠道',
group_code varchar(50) NOT NULL comment '分群编码',
category_id int unsigned default null comment '特殊判断:优惠分类表id',
priority int unsigned NOT NULL DEFAULT '0' COMMENT '优惠优先级',
start_time datetime NOT NULL COMMENT '优惠开始时间',
end_time datetime NOT NULL COMMENT '优惠结束时间',
description varchar(512) default null comment '活动描述',
approval_status tinyint not null default 1 comment '审批状态 1:待提交 10:审批中 20:审批完成 30:已驳回',
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`) USING BTREE,
INDEX idx_name (name),
UNIQUE KEY idx_email (email),
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='价格优惠表'
如:
CREATE TABLE aibox_deduct_detail (
id bigint unsigned NOT NULL AUTO_INCREMENT,
should_deduct_date date DEFAULT NULL COMMENT '应该代扣日期',
contract_id varchar(128) NOT NULL COMMENT '签约id',
user_id bigint unsigned NOT NULL COMMENT '小米id',
trigger_deduct_time bigint unsigned NOT NULL DEFAULT '0' COMMENT '发起代扣时间',
request_deduct_time bigint unsigned NOT NULL DEFAULT '0' COMMENT '请求代扣时间',
order_id varchar(128) NOT NULL DEFAULT '' COMMENT '订单id',
deduct_succ tinyint(1) NOT NULL DEFAULT 0 COMMENT '代扣是否成功,1:成功,0:失败',
deduct_fail_reason varchar(255) NOT NULL DEFAULT '' COMMENT '代扣失败原因',
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
INDEX idx_contract_id (contract_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='代扣详细信息表';
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致可以使正数的上限提高一倍。例如TINYINT UNSIGNED可以存储的范围是0~255,而TINYINT的存储范围是-128~127。
主键用int就足够了,上限为2^31-1 + 2^31 ,约为42亿
field_name varchar(128) not null default '' 的理解:
当使用insert field_name ,在insert语句中有此字段时,对应插入的值不能为null
当insert语句中没有指明此字段时,插入行使用默认值
时间类型精确到秒的问题:
datetime 只精确到秒级,毫秒会进行四舍五入
timestamp 也只精确到秒级,毫秒不会四舍五入,只保留秒
要精确到3位毫秒,使用 datetime(3)、timestamp(3)
新建表时创建索引
PRIMARY KEY ( `id` ),
UNIQUE KEY `index_code` ( `code` ),
INDEX `index_name` ( `name` )
二、DML
1、查询重复数据:
select a,b from 数据库 group by a,b having count(*)>1
2、不存在插入,存在则更新
INSERT INTO ... ON DUPLICATE KEY UPDATE语句的示例
# column1有唯一索引
insert into table_name(column1,column2)
values(#{value1},#{value2})
ON DUPLICATE KEY UPDATE
column2=values(column2)
3、根据关联表的字段更新当前表的字段
update table1 t1
left join table2 t2 on t1.column1=t2.column2
set t1.column_x = t2.column_y
where t1.column=xxx
and t2.column=xxx
# 示例:
update cp_video cv left join cp_media cm on cv.media_id=cm.id set cv.cp_media_id=cm.cp_media_id where cv.media_id>14530
三、DDL(data definition language)
创建索引:
alter table table_name add index index_name(column_name);
create index index_name on table_name(column_name);
唯一索引:
alter table table_name add unique key uk_idx_name(column1,column2);
CREATE UNIQUE INDEX uk_idx_name ON table_name(column1,column2);
删除索引:
alter table table_name drop index|key 索引名;
drop index 索引名称 on 表名;
修改字段类型
alter table table_name modify column 字段名 类型;
修改字段长度(也可修改字段类型):
alter table table_name modify column 字段名 类型(长度);
修改字段名
alter table table_name change 旧字段名 新字段名 新数据类型(长度);
增加表字段:
alter table table_name add column 字段名 类型(长度);
删除表字段:
alter table table_name drop column 字段名;
END.