一、表的创建、查看、删除、修改
DDL 数据定义语言的缩写,对数据库内部的对象进行创建、删除、修改等操作
创建表
CREATE TABLE IF NOT EXISTS `tbl`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
`submission_date` DATE,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8; ENGINE
设置存储引擎,CHARSET 设置编码。
删除表
语法:drop table tablename
修改表
(1)修改某个表中某个列的某个数据类型
语法:alter table tablename modify column_name newcolumn_type;
(2)增加表字段
语法:alter table tablename add column newcolumn_name newcolumn_type;
(3)删除表字段
语法:alter table tablename drop column column_name;
(4) 字段改名
语法:alter table tablename change col_name new col_name col_type;
(将column_type更改,成为newcolumn_type,可同时更改字段类型)
(5)修改字段排列顺序
语法:①alter table tablename add newcol_name newcol_type after col_name;
作用:将newcol_name newcol_type 加在 column_name 后面。
②alter table tablename modify column_name column_type first;
作用:将newcolumn_name newcolumn_type 放在最前面。
(6)更改表名
语法:alter table tablename rename newtablename;
二、DML语句
DML操作是指对数据库中表记录的操作,主要包括表记录的插入、更新、删除和查询
1.concat(str1,str2,..)
把字符串str1,str2,..连接 返回一个字符串,
若其中一个字段为null,则返回null
2.LPAD(str,len,padstr)
用字符串 padstr对 str进行左边填补直至它的长度达到 len个字符长度,返回 str。
若str的长度长于 len',那么它将被截除到 len个字符。
例:SELECT LPAD('hi',4,'??'); -> '??hi'
3.RPAD(str,len,padstr)
用字符串 padstr对 str进行右边填补直至它的长度达到 len个字符长度,返回 str。
若str的长度长于 len',那么它将被截除到 len个字符。
例:SELECT RPAD('hi',5,'?'); -> 'hi???'
4. replace(object,search,replace)
把object中出现search的全部替换为replace
例:update `news` set `content`=replace(`content`,' ','')清除content字段的空格
5.replace into 表 values(1,2,3,4)
尝试向表里插入新行,当表里唯一索引或者primary key冲突的时候
a. 当存在pk(主键约束)冲突的时候是先delete再insert
b. 当存在uk(唯一索引)冲突的时候是直接update
6.TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
返回日期或日期时间表达式datetime_expr1 和datetime_expr2the 之间的整数差
interval 参数:
FRAC_SECOND 表示间隔是毫秒 | SECOND 秒 | MINUTE 分钟 | HOUR 小时 | DAY 天 | WEEK 星期 | MONTH 月 | QUARTER 季度 | YEAR 年
例:select TIMESTAMPDIFF(day,'2012-08-24','2012-08-30') --> 6
7.TIMESTAMPADD(interval,int_expr,datetime_expr)
将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。式中的
interval和上文中列举的取值是一样的。
例:select TIMESTAMPADD(MINUTE,8820,'2012-08-24 09:00:00')
-->2012-08-30 12:00:00
8. mysql 表示当前时间
CURRENT_TIMESTAMP | CURRENT_TIMESTAMP() | NOW()
LOCALTIME | LOCALTIME() | LOCALTIMESTAMP | LOCALTIMESTAMP()
9. Group by + 聚合函数 SUM, AVG, MAX, MIN, 和 COUNT
select [聚合函数] 字段名 from 表名
[where 查询条件]
[group by 字段名]
[having 过滤条件]
聚合和group by 详细用法:http://www.cnblogs.com/geaozhang/p/6745147.html
10. group by + having
对分组结果进行过滤, 先执行分组group by 在对结果过滤,
having 子句的列 可以为组函数(having a in ('1','2')),不能出现 having a> '1'
having 和 where 区别:
where子句在分组前对记录进行过滤 | having子句在分组后对记录进行过滤
11.group by + GROUP_CONCAT()
函数的值等于属于一个组的指定列的所有值,以逗号隔开,并且以字符串表示
例:select teamno,group_concat(playerno) from MATCHES group by teamno;
--> teamno | group_concat(playerno) |
-->| 1 | 6,6,6,44,83,2,57,8 |
group_concat 返回一列的所有的值,select group_concat(a) from 表;
---> '1,2,3,4,5'
12.union [all | distinct]
union用于把两个或者多个select查询的结果集合并成一个,
注意: select 列表的列数量 和对应的数据类型保持一致,默认去重不排序。 结果集的列名是第一个查询select 列表。 如果要对合并后的整个结果集进行排序,ORDER BY子句只能出现在最后面的查询中。 去重十如果包含 null,认为他们是相等的。
13.like 匹配/模糊匹配,会与 % 和 _ 结合使用。
'%a' //以a结尾的数据 | 'a%' //以a开头的数据
'%a%' //含有a的数据 | '_a_' //三位且中间字母是a的
'_a' //两位且结尾字母是a的 | 'a_' //两位且开头字母是a的
14. regexp 正则表达式
^ 开头 | $ 结束 | [...]字符集合。匹配所包含的任意一个字符
* 0次或多次 | + 1次或多次
表连接查询:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接):获取右表所有记录,即使左表没有对应匹配的记录。