mysql基础

一.创建表

create table mytable(

id int not null auto_increment,
col varchar(45) not null ,
col2 Date null,
primary key('id')
);

二.修改表

​ 1.添加列

alter table mytable
add col varchar(20); //这里的col是新增加的列名

​ 2.删除列

alter table mytable
drop column col;

​ 3.删除表

drop table mytable

三.插入表

1.普通插入

 insert into mytable(col1,col2)
values (val1,val2);

2.插入检索出来的数据

insert into mytable(col1,col2 )
select col1,col2 from mytable;

四.更新表

update mytable set col='java' where id=1;

五.删除一行

delete from mytable where id=1;

删除所有行

TRUNCATE TABLE mytable;

六.查询

Distinct

select distinct col1,col2 from mytable

这里面只有所有列都相同才算相同,否则也会返回

Limit

select * from mytable limit 5//返回前五行
select * from mytable limit 0,5//返回1,2,3,4,5行

七.排序

可以对一列或者多列指定排序

select * from mytable order by col desc,col2 asc;

八.通配符

% 匹配>=0个任意字符
_ 匹配==1个任意字符
[]匹配集合内的字符

select * from mytable where col like '[^ab]%'

九.计算字段

在数据库服务器完成数据的转换和格式化往往比客户端快的多,并且数据格式化之后网络的流量更小,计算字段可以使用as来取列 别名,否则输出的时候就是计算的表达式

十.函数

1.汇总

AVG:返回某列的平均值

COUNT:返回某列的行数

MAX():返回某列的最大值

MIN():返回某列的最小值

SUM():返回某列值之和

select avg(distinct col) as avg_col from mytable

2.文本处理

left():返回左边的字符

right():返回右边的字符

lower():准换为小写字符

upper():转换为大写字符

LTRIM():去除左边的空格

RTRIM():去除右边的空格

LENGTH():长度

3.日期和时间处理

adddate():增加一个日期(天,周)

addtime():增加一个时间(时,分)

curdate():返回当前日期

curtime():返回当前时间

date():返回当前日期和时间部分

now():返回当前日期和时间

4.数值处理

sin():正弦

abs():绝对值

sqrt():平方根

mod():余数

exp():指数

rand():随机数

十一.分组

group by自动按照分组字段进行排序,order by按照汇总字段来进行排序

where 过滤行

having 过滤分组

十二.子查询

子查询只能返回一个字段的数据,可以将子查询的结果作为where语句的过滤条件

十三.连接

1.内连接

inner join 也可以使用普通查询并在where中将两个要连接的列用等值方法连接起来

select A.value,B.value from tablea as A inner join tableb as B on A.key=B.key
select A.value,B.value from tablea as A,tableb as B
where A.key=B.key

2.自连接

自连接可以看成内连接的一种,只是连接的表是本身而已

子查询版本

select name from employee where department=(
select department from employee where name='jim')

内连接版本

select e1.name from employee as e1 inner join employee as e2 on e1.department=e2.department and 
e2.name='jim'

3.自然连接

自然连接把同名列通过等值测试连接起来,通名列可以有多个

select A.value,B.value from tablea as A natural join 
tableb as B

4.外连接

外连接保留了没有关联的行,分为左外连接,右外连接以及全外连接。

左外连接就是保留左边没有关联的行

eg:检索所有顾客的订单信息,包括还没有订单信息的顾客

select C.cust_id,O.order_num from Customers as C left outer join Orders as O on C.cust_id=O.cust_id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iO2tBZeS-1580630904575)(C:%5CUsers%5Czhangmin%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5Cimage-20200202113628537.png)]

十四.组合查询

使用union来组合两个查询,第一个返回m行,第二个返回n行,那么组合查询一般就返回m+n行。

每个查询必须包括相同的列,表达式和聚集函数

默认会去除相同的行,如果需要保留相同的行,那么使用union all

只能包含一个order by子句,并且放在语句的最后

select col from mytable  where col=1 union
select col from mytable where col=2

十五.视图

视图 是虚拟的表,本身不包含数据,也不能对其索引操作

视图具有以下好处:

  • 简化复杂的sql操作,比如复杂的连接
  • 只使用实际表的一部分数据
  • 通过只给用户访问视图的权限,保证数据的安全性
  • 更改数据格式和表示
CREATE VIEW myview AS
SELECT Concat(col1, col2) AS concat_col, col3*col4 AS compute_col
FROM mytable
WHERE col5 = val;

十六.存储过程可以看做是一系列sql操作的批处理

好处:

  • 代码封装,保证了一定的安全性
  • 代码复用
  • 预先编译,具有很高的性能

包含in ,out和inout三种参数

参数in的使用(代表输入,意思说你的参数要传到存过过程的过程里面去)

参数out的使用(代表往外输出)

参数inout的使用(既能输入一个值又能传出来一个值)

给变量赋值都需要使用select into语句,每次只能给一个变量赋值,不支持集合的操作

命令行中创建存储过程需要自定义分隔符,因为命令行由; 为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成结束符,造成语法错误。

delimiter //分隔符

create procedure myprocedure( out ret int )
    begin
        declare y int;
        select sum(col1)
        from mytable
        into y;
        select y*y into ret;
    end //

delimiter ;

十六.游标

在存储过程中使用游标可以对一个结果集进行移动遍历

十七.逐步

初始化会在某个表执行以下语句而自动执行delete ,insert,update

十八.事务管理

基本术语

  • 事务:指一个sql语句
  • 回退:指取消指定sql语句的过程
  • 提交:指将为储存的sql语句写入数据库表
  • 保留点:指事务处理中设置的临时占位符,可以对它发布回退

不能回退select语句,也不能回退create和drop语句

mysql的事务提交默认为隐式提交,当出现start transaction语句,会关闭隐式提交,当commit或roll back语句执行后,事务会关闭,重新恢复隐式提交,设置auto commit为0可以取消自动提交,

如果没有设置保留点,roll back会回退到start transaction语句处,如果设置了保留点,并且在roll back中设置了保留点,那么就会回退到roll back上

START TRANSACTION
// ...
SAVEPOINT delete1
// ...
ROLLBACK TO delete1
// ...
COMMIT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值