只返回不同的值
select distinct id from products;
限制结果
从行5开始的第5行,第一个数位置,第二个为要检索的行数;
select name from pr limit 5,5
从mysql5开始,从第三行开始取4行
limit 4 offset 3
排序:
默认ASC升序,DESC降序,先降序排列,相同的升序排列如下,找出最贵的两个,limit要放在orderby后面
select * from table order by prod DESC ,name limit 2
过滤数据
表范围 between and
组合 语句用and或者or,and优先权更高。
in更好
列出除了2012,2013两个价格的产品
where price not in(2012,2013)
常用通配符%
where table like ‘jet%’
%anvi%匹配任意位置
s%e s开头e结尾
下划线匹配单个字符而不是多个字符。
正则表达式也可以应用于搜索。
联结表
外键:某表中的一列包含另一张表的主键
简单sql
SELECT operator_no,operator_name,transit_depot_no,operator_role,transit_depot_name
FROM
tdop_operator_info WHERE transit_depot_no='755WF' LIMIT 0,10
SELECT operator_no,operator_name,transit_depot_no,operator_role,transit_depot_name
FROM
tdop_operator_info WHERE operator_no='955'
UPDATE tdop_operator_info SET operator_role='W' WHERE operator_role=NULL
DELETE FROM tdop_operator_info WHERE operator_no='120'
INSERT INTO tdop_operator_info(operator_no,operator_name,transit_depot_no,operator_role,transit_depot_name)
VALUES
('9557','zhanghang','755WF','W','黄田')
REPLACE INTO tdop_operator_info(operator_no,operator_name,transit_depot_no,operator_role,transit_depot_name)
VALUES
('9557','zhanghan','755WF','W','黄田')
修改表:
alter TABLE tdop_operator_info add operator_role VARCHAR(16) not NULL DEFAULT 'W'
alter TABLE tdop_operator_info add del_flag VARCHAR(8) DEFAULT '0'
建表语句:
CREATE TABLE tdop_crate_flight_match
(
id int identity(1,1) PRIMARY KEY COMMENT 'id',
crate_type varchar(16) COMMENT '舱位类型(1主舱,2下前舱,3下后舱)',
plane_type varchar(16) COMMENT '飞‘类型',
is_special_crate varchar(8) COMMENT'(1是,0不是)',
special_crate_name varchar(16) COMMENT '特殊板位名称',
crate_position varchar(8) COMMENT'板箱位置',
crate_type VARCHAR(8) COMMENT '板箱类型'
)
COMMENT='板箱机型匹配表'
ALTER TABLE tdop_crate_task DROP COLUMN crate_type;
ALTER table tdop_crate_task add `crate_type` varchar(16) DEFAULT NULL COMMENT '板箱类型';
ALTER table tdop_crate_task add `seat_type` varchar(2) DEFAULT NULL COMMENT '舱位类型{1:板箱、2:腹舱、3:尾箱}';
ALTER TABLE tdop_flight_task add `final_load_date` varchar(32) DEFAULT NULL COMMENT '截载日期';
ALTER TABLE tdop_flight_task add `final_load_time` varchar(16) DEFAULT NULL COMMENT '截载时间';
ALTER TABLE tdop_crate_flight_match DROP COLUMN seat_type ;
ALTER TABLE tdop_crate_flight_match ADD `seat_type` varchar(2) DEFAULT NULL COMMENT '舱位类型(1:主舱,2:下前舱,3:下后舱)' ;
ALTER TABLE tdop_crate_flight_match auto_increment=1
CREATE TABLE 'dds_appear_icon' {
'id' int(10) NOT NULL AUTO_INCREMENT,
'src_deptCode' VARCHAR(16) NOT NULL COMMENT '当前网点',
'start_time' VARCHAR(32) NOT NULL COMMENT '显示按钮开始时间',
'end_time' VARCHAR(32) NOT NULL COMMENT '显示按钮结束时间',
'create_time' timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
'modify_time' timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
PRIMARY KEY ('id')
}ENGINE=INNODB AUTO_INCRAMENT=17 DEFAULT CHARSET=utf8 COMMENT ='按钮显示时间段表'
索引操作:
1.添加PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (
`column`
)
alter table tc_dds_appear_icon drop index `src_deptCode`;
alter table tc_dds_appear_icon add unique key `srcDeptCode` (`src_deptCode`);
alter table table_name add unique key `new_uk_name` (`col1`,`col2`);
3.添加INDEX(普通索引)
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT (
`column`
)
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
删除:
alter table student drop index idx_name;
查看索引 show index from student\G
replace用法:
replace INTO tt(gg) VALUES ('WW')
(1)replace into原理
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,
如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则没有此行数据的话,直接插入新数据。
(2)replace into的应用注意事项
1)插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
2)如果数据库里边有这条记录,则直接修改这条记录;如果没有则,则直接插入,在有外键的情况下,对主表进行这样操作时,因为如果主表存在一条记录,被从表所用时,直接使用replace into是会报错的,这和replace into的内部原理是相关(ps.它会先删除然后再插入)。
3)正确做法是- 即先删除该条存在的数据,然后再次插入这条数据,这和外键约束相悖呢,因此只能采用update和insert这样的组合,来应对外键约束
原文:http://blog.csdn.net/helloxiaozhe/article/details/77427266
SQL中的DML、DDL以及DCL是什么?
DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。
DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。
DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
查询数据库所有表
select table_name
from information_schema.tables
where table_schema='db1'
select table_name
from information_schema.tables
有就不管,没有就插入
insert ignore into
有就修改,没有就插入
replace into
如果存在就修改,不存在就插入
INSERT INTO t_pro_gift
( _id,
name,
age )
VALUES
( 1,
'hello',
24 )
ON DUPLICATE KEY UPDATE
id = 1,
name = 'world',
age = 55
连接查询
SELECT a.id as id1,b.id as id2 FROM (SELECT * FROM tc_unmanned_store_grid WHERE id>565) a INNER JOIN tc_unmanned_store_grid_append b ON a.uniqueId=b.unique_id