Mysql
基本准备
- cmd登录
mysql -rusername -ppassword
- 显示授权用户
show grants
- 创建数据库
create datebase datebase_name
- 展示所有数据库
show datebase
- 使用数据库
use database_name;
- 建表
create table table_name(
id int(11) auto_increment,
name varchar(30),
primary key(id)
)default charset=utf8;
- 展示表
show tables
- 删表
drop table table_name
- 修改表
alter table table_name
- 重命名表
rename table table_name to table_name
- 展示列
show columns form table_name
查询
- 基本查询 select
select * from table_name;
- 条件查询 select where
select * from table_name where id = ?;
- 分页查询 select limit
select * from table_name limit 0,5;
- 查询不同行 select distinct
select distinct colunm_name from table_name;
修改
- 基本修改 update set where
update table_name set column_name = value where id = ?
删除
- 基本删除 delete where
delete from table_name where id = ?
插入
-
基本插入 insert into
insert into table_name values(null,'');
-
插入多条数据
insert into table_name(column_name, column_name, column_name) VALUES(null, 'b', 'c'), values(null, null, 'd');
排序
- 基本单列升序 select order by
select column_name from table_name order by column_name
- 多列降序 select order by desc
slect column_name,column_name from table_name order by column_name,column_name desc
过滤
- 基本过滤 where
selcet * from table_name where id = ?
- 过滤空值 where is null
select * from table_name where column_name is null
- 范围过滤 where between
select * from table_name where column_name between a and b
- 和操作 selcet where and
select * from table_name where column_name = a and column_name = b
- 或操作 select where or
select * from table_name where column_name = a or column_name = b
- 条件范围 select where in(a,b) 且column_name为a或者b
select * from table_name where column_name in (a,b)
- 否定 where not
select * from table_name where column_name not in (a,b)
- 通配符 % _ like
select * from table_name where colunm_name like '%a%' or column_name like '_a';
正则表达式
- 基本匹配 select regexp
select * from table_name where column_name regexp 'reg'
- Or匹配 select regexp |
select * from table_name where column_name regexp 'a|b'
- 匹配几个字符之一 select regexp []
select * from table_name regexp '[123] a'
- 匹配范围 select regexp [-]
select * from table_name where column_name regexp '[1-9] a'
- 匹配特殊字符 select regexp \
select * from table_name where column_name regexp '\\.'
计算字段
-
简介:在数据库服务器上完成不同表的列数据进行拼接,返回用户期待的数据,如:在地址表获得地址列,在联系表获得联系电话,两者拼接成收货信息,返会给用户
-
拼接字段 select Concat
select Concat(column_name,'(',column_name,')')
-
去除空格 selct RTrim
select Concat(RTrim(column_name),'(',RTrim(column_name),')')
-
重命名 select Concat as
select Concat(column_name,'(',column_name,')') as column_name
基本函数
- 文本处理
- 日期时间
- 数值处理
聚集函数
- avg()函数 select avg() as
select avg(column_name) as colunm_name from table_name
- count()函数 selct count()
select count(column_name) from table_name
- max()函数
- min()函数
- sum()函数
- 统计不同值 select avg distinct
select avg(distinct column_name) from table_name
- 组合函数
select count(*) as colunm_name,min(colunm_name) as coulunm_name from table_name
分组数据
-
基本分组 select group by
select column_name,count(*) from table_name group by column_name
-
分组过滤 select from where group by having count 返回12个月内具有两个订单以上的顾客,where过滤12个月,having过滤两个订单分组
select vend_id,count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >= 2;
子查询
-
基本嵌套 先执行内嵌套 select from where in selcet
select column_name,column_name from table_name where id in (select id from table_name where num in (select num from table_name where id = 'a'));
关系表
-
相同数据出现多次决不是一件好事,此因素是关系数据库 设计的基础。如:多个供应商与多个产品的关系,用三张表,vendors表存储所有供应商信息,每个供应商占一行,以ven_id为主键。products表存储所有产品信息以及供应商id,以pro_id为主键,通过pro_id的查询得到ven_id,从而在vendors表中找到供应商的信息,又称pro_id为vendors的外键。
-
外键:某个表中的一列,列值为另外一个表的主键。
- 供应商信息不重复,不浪费时间空间
- 供应商信息变更时,仅需更新供应商的单个记录
- 数据无重复,数据一致处理更加简单
-
基本双表where内联结 select where table_name.column_name = table_name.column_name
select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id = products.vend_id order by vend_name,prod_name;
-
基本双表inner内联结 select inner join on table_name.column_name = table_name.column_name
select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id
-
内连结查询可以代替嵌套子查询 selcet from where and
select cust_name from customers,orders,orderitems where customers.order_num = orders.order_num and customers.cust_id = orders.cust_id and prod_id = 'tnt2';
-
表别名 select from where and as 实现在单一的select语句中多次引用同一张表
select p1.prod_id,p1.prod_name from products as p1,products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'dtntr';
-
外部联结 select from right outer join on 实现查询包括没有关联行的行,如未下单客户
select * from customer right outer join orders on oreders.cust_id = customers.cust_id
-
聚合函数联结
select customers.cust_name count(orders.order_num) as num_ord from customers inner join orders on customers.cust_id = orders.cust_id group by customers.cust_id;
组合查询
-
基本组合查询 union
select vend_id,prod_id,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_price from products where vend_id in (1001,1002);
全文搜索
-
前置条件 启用全文本搜索,需要建立MyISAM引擎的表
ENGINE=MyISM
,不同于一般的InnoDB表,并且在创建表时添加FULLTEXT子句FULLTEXT(note_text)
-
基本搜索 select from where Match Against
select note_text from productnotes where Match(note_text) Against('rabbit');
视图
-
基本介绍
- 视图命名唯一
- 不能索引,不能有关联的触发器和默认值
- 可以和表一起联结使用
- MySQL的select语句层次的封装,用于简化数据处理以及重新格式化基础数据或保护数据
-
创建视图 create view as select from where and
create view view_name as select cust_name,prod_id from customers,orders,orderitems where customers.cust_id = order.cust_id and orderitems.order_num = orders.order.order_num;
存储过程
-
基本介绍
- 维护数据的一致性
-
执行存储过程
call productpricing(@pricelow, @pricehigh, @priceaverge);
-
创建存储过程 使用//作结束符号。等效于";"
delimiter // create procedure productpricing() begin select avg(prod_price) as priceaverage from products; end //
-
删除存储过程
drop procedure productpricing;
使用游标
使用触发器
-
基本准备
- 唯一触发器名
- 触发器关联的表
- 触发器响应的活动
- 触发器执行时机
-
创建触发器 插入执行之后,将对每个插入的行显示一次
create trigger newproduct after insert on products for each row select 'Porduct added';
-
删除触发器
drop trigger newproduct
-
insert触发器 create trigger after insert on for each row new
create trigger neworder after insert on orders for each row select new.order_num;
代码解读:插入一个新的订单到orders表时,MySQL生成一个新的订单号并保存到order_num中。触发器从NEW.order_num取得这个值并返回它。
-
delete触发器 create trigger before delete on for each row OLD delete触发器在delete语句执行之前或之后执行。在delete触发器代码内,你可以引用一个名为OLD的虚拟报表,访问被删除的行。
create trigger deleteorder before delete on orders for each row begin insert into archive_orders(order_num,order_date,cust_id) values(OLD.order_num,OLD.order_date,OLD.cust_id); END;
代码解读:在任意订单被删除之前将执行此触发器,它使用一条insert语句将OLD中的值(被删除订单)保存到一个名为archive_orders的存档表中
事务
-
基础准备
- 事务:指一组SQL语句
- 回退:指撤销指定SQL语句的过程
- 提交:指将为存储的SQL语句写入数据库表
- 保留点: 回退部分事务的标记点
-
回撤 start tansaction rollback
selete * from ordertotals; start transaction; delete from ordertotals; select * from ordertotals; rollback; selete * from ordertotals;
代码解读:查询表,然后开启事务管理,用一条delete语句删除所有行,另一条selete语句验证表已空。再用一条rollback回退开启事务之前的所有语句
-
提交 start commit
start transaction; delete from orders where order_num = 20010; delete from orders where order_num = 20021; commit;
代码解读:若有一句执行失败,另一句也不会执行,只有两个句都成功执行,才会执行
-
设置保留点
savepoint delete1
-
使用保留点
rollback to delete1
备份
- 基本备份
"path\mysqldump.exe" -uusername -ppassword -hlocalhost -P3306 datebase_name -r path\test.sql
来源:oschina
链接:https://my.oschina.net/u/4270970/blog/4120183