Mysql 复习小计

1. show

show databases 查看数据库列表
show tables 选择一个数据库查看里面的表
show COLUMNS from 表名 查看表的列

Mysql 支持用describe作为show COLUMNS from 的快捷方式 = describe 表名
其他一些show语句:
show status 显示广泛的服务器状态信息
show create 数据库名 show create 表名 显示建库语句 建表语句
show grants 显示授权用户的安全权限
show errors show warnings 显示服务器错误或警告信息

2. limit

select prod_name from products limit 5; //显示不多于5行
select prod_name from products limit 5, 5; //从行5开始,检索出5行(索引从0开始)
select prod_name from products limit 5 offset 2; //从行2开始,检索出5行

3. between

select prod_name, prod_price from products where prod_price between 5 and 10; //包括开始值和结束值

4. 匹配

4.1 通配符:

  • % 匹配0个或多个任意字符
  • _ 匹配一个字符
  • 把通配符置于搜索模式开始处搜索起来是最慢的

4.2 正则:

select peod_name from products where prod_name regexp '1000'; //regexp 后的为正则表达式
select peod_name from products where prod_name regexp binary 'Jack .000'; //mysql正则默认不区分大小写,使用binary关键字区分大小写
select peod_name from products where prod_name regexp '1000|2000|3000'; //1000或2000或3000
select peod_name from products where prod_name regexp '[123] Ton'; //1 ton 或2 ton 或3 ton
//[^123]  匹配除1,2,3以外的字符,^不在集合中时指定开始处
//[1-6][0-9][a-z] 表示一个范围
select 'hello' regexp '[0-9]'; //测试正则表达式,返回0不匹配,返回1匹配

mysql使用\\来转义特殊字符,\\\转义\

4.3 拼接字段

select concat(vend_name, '(', vend_country, ')') from vendors;//concat() 拼接内容用逗号分隔
  • rtrim() 去除右空格
  • ltrim() 去除左空格
  • trim() 去除左右两边的空格

5. 函数

5.1 文本处理函数
left() 返回串左边的字符空格
right() 返回串右边的字符
length() 返回串的长度
locate() 返回串的一个字串
lower() 将串转换为小写
upper() 将串转换为大写
ltrim() 去掉串左边的空格
rtrim() 去掉串右边的空格
soundex() 返回串的SOUNDEX值(发音)
substring() 返回字串的字符

5.2 日期时间处理函数
addDate() 增加一个日期(天、周等)
addTime() 增加一个时间(时、分等)
curDate() 返回当前日期
curTime() 返回当前时间
date() 返回日期时间的日期部分
dateDiff() 计算两个日期之差
date_add()
date_format() 返回一个格式化的日期或时间串
day() 返回一个日期的天数部分
dayOfWeek() 对于一个日期返回对应的星期几
hour() 返回一个时间的小时部分
minute() 返回一个时间的分钟部分
month() 返回一个时间的月份部分
now() 返回当前日期和时间
second() 返回一个时间的秒部分
time() 返回一个日期时间的时间部分
year() 返回一个日期的年份部分

5.3 数值处理函数
abs() 返回一个数的绝对值
cos() 返回一个角度的余弦
exp() 返回一个数的指数值
mod() 返回除操作的余数
rand() 返回一个随机数
pi() 返回圆周率
sqrt() 返回一个数的平方根
tan() 返回一个角度的正切

5.4 聚集函数
avg() 返回某列的平均值
count() 返回某列的行数

  • count(*) 不管表列中包含的是空值还是非空值
  • count(column) 对表列中具有值的行进行计数,忽略NULL值

max() 返回某列的最大值
min() 返回某列的最小值
sum() 返回某列之和

6. 分组

with rollup


7. 组合查询

使用 union 的语句排序时,order by 字句加在最后一个select字句之后

8. 全文本搜索

9. 插入数据

9.1 插入多个行

insert into xxx (...) values (...), values(...), values(...); //mysql使用单条语句处理多个插入比使用多条语句快

insert low_priority into ... //降低insert语句优先级,提高检索性能

10. 删除数据

如果要清除表中全部数据,可以用 truncate table 语句,速度更快
truncate 语句实际是删除原来的表并重新建一个表

11. 创建表

11.1 仅在一个表不存在时创建

create table xxx if not exists ...

11.2 创建时指定主键

create table xxx if not exists (
...
...
primary key (xxx,xxx)
);

11.3 auto_increment

create table xxx if not exists (
	id int not null auto_increment,
	...
);

一个表只能有一个自增列,且必须被索引(如 成为主键)
last_insert _id() 返回最后一个自增值

11.4 指定默认值
只支持常量

11.5 引擎类型

11.6 更新表

alter table 表名 add 列名 ... //添加列

alter table 表名 add constraint abc foreign key(列名) references 表名 (列名); //添加外键

11.7 删除表

drop table 表名;
drop view 视图名;

11.8 重命名表

rename table 表名 to 表名 ;

11.9 更新视图
更新视图实际上是更新基表
视图定义有分组、联接、聚集函数等操作时,不能更新

12. 存储过程

create procedure xxx()
begin
...
end;

call xxx(); //执行
drop procedure xxx; //删除

create procedure xxx(
	in ph decimal (8,2), //输入参数
	out pl decimal(8,2) //输出参数
)
begin
...
end;

call xxx(2005, @def); 调用,mysql中变量都以@开头

13. 游标
mysql游标只能用于存储过程

...
declare done boolean default 0;

declare abc cursor   //定义游标
for 
select ...;

declare continue handler for sqlstate '02000' set done = 1;  //条件出现时执行,这里条件为当SQLSATTE 02000出现时,set done =1,这是一个未找到条件,当repeat由于没有更多的行供循环而不能继续时,出现这个条件

open abc; //打开游标

repeat  //循环
	fetch abc ...
	...
until done end repeat;

close abc; //关闭游标
...

14. 触发器
mysql中触发器在每个表中名字唯一,在数据库中不必唯一
单一触发器不能与多个表或多个事件相关联

create trigger abc after insert on 表名 for each row ...

new 和 old 虚拟表方便操作

15. 事务管理

你可能感兴趣的:(MySQL)