数据库的基本操作
显示数据库
1 | show databases; |
创建数据库
1 | create database student; |
创建以关键字命名的数据库等
1 | create database `database`; |
创建前进行判断
1 | create database if not exists student;s |
删除数据库
1 | drop database student; |
删除前进行判断
1 | drop database if exists student; |
查看创建数据库时的设置信息
1 | mysql> show create database teacher; |
修改数据库的字符编码
1 | alter database teacher charset = gbk; |
使用数据库
1 | use rain_school; |
查看字符编码
1 | show variables like 'character_set_%'; |
表的基本操作
创建表
1 | mysql> create table student( |
显示当前所使用的数据库中的表
1 | mysql> show tables; |
更详细滴创建表
1 | mysql> create table if not exists teacher( |
查看之前创建表时的信息
1 | show create table teacher; |
查看表结构
1 | mysql> desc teacher; |
删除单个表
1 | drop table if exists stu; |
一次删除多个表
1 | drop table if exists stu, teacher, sss; |
修改表-添加字段
1 | alter table student add phone varchar(20); |
在指定位置添加字段
1 | alter table student add gender varchar(1) after name; |
删除表的某个字段
1 | alter table student drop phone; |
修改表中字段的类型
1 | alter table student modify age int(2); |
修改表名字
1 | alter table student rename to stu; |
数据的更新操作
向表中插入数据
1 | mysql> insert into teacher (id, name, phone, address) values (1, 'rain', |
一次性插入多条数据
1 | insert into teacher(id, name) values(7, "MIA"),(8, "sss"); |
删除数据
1 | delete from teacher where id = 6; |
清空表中的数据
1 | delete from student; |
1 | truncate table student; |
truncate 与 delete 清表的区别
- truncate 比 delete 更快 -> delete删除会记录到日志中
- truncate 是直接销毁表,delete 可以按照条件删除
- 清空后 truncate 的 id 会从头开始, delete 的 id 会接着删除之前的 id –> delete 清空表底层是通过 where 遍历;
修改数据
1 | mysql> update teacher set name = 'rain', address='DALIAN',phone='17824852705' where id = 1; |
修改数据时如果没有指定更新条件where -> 将所有数据全部更新
1 | mysql> update teacher set name = 'rain', address='DALIAN',phone='17824852705'; |
查询全部数据
1 | mysql> select * from teacher; |
查询指定字段的数据
1 | mysql> select id, name, address from teacher; |
数据的查询操作
单表查询
1 | mysql> select 2*5 as res from dual; #dual 为默认的伪表可以不写, as 定义表的别名 |
limit 限制条件
1 | mysql> select * from teacher limit 0,2; # 从下标 0 位置开始,共查询两条数据 |
distinct ->去重
1 | mysql> select address from teacher; |
聚合函数
1 | mysql> select count(*) from teacher; |
条件查询
1 | mysql> select * from teacher where address = 'beijing'; |
模糊查询
1 | mysql> select * from teacher where address like 'bei%'; |
排序查询
1 | mysql> select * from teacher order by age asc; #升序排列 默认为升序 |
分组查询 (格式 -> 聚合函数 + 分组字段)
1 | mysql> select avg(age) as '平均年龄', address as '地区' from teacher group by address; |
多表查询
数据库的连接方式
- 内连接
- 外连接 -> 左外连接、右外连接、全连接 (注意MySQL 已经取消全连接
full join但是可以用union关键字实现) - 交叉连接
内连接 -> inner join -> 在两张表的相同属性上做等值连接,当不使用 on 关键字时,与 cross join 交叉连接(取笛卡尔积) 相同
1 | mysql> select * from student; |
自然连接 natural join -> 根据同名字段自动进行连接并且去掉重复列,不需要使用 on关键字
如果两张表没有同名字段返回笛卡尔积
1 | mysql> select * from student natural join score; |
左连接 left join - > 以左表为基准连接右表,没有的值用null补全
1 | mysql> select student.id, student.name, score.cno, score.grade from student |
右连接 right join-> 已右排头为基准向右看齐
1 | mysql> select * from course; |
子查询
in and not in
1 | #找出成绩中有大于 95 的所有学生信息 |
exists and not exists
1 | #如果存在符合子查询条件的返回值则执行父查询 |
视图的基本操作
视图的两种设计算法 -> temptable (临时表算法)、 merge
创建视图
1 | create view vw_stu_all as |
查看视图
1 | select * from vw_stu_all; |
查看视图创建的信息
1 | show create view vw_stu_all; |
查看视图的结构
1 | desc vw_stu_all; |
修改视图
1 | alter view vw_stu_all as |
删除视图
1 | drop view vw_stu_all; |
事务
开启事务
1 | mysql> start transaction; |
事务提交 -> commit –> 事务一旦提交就不可以回滚
1 | mysql> select * from wallet; |
事务回滚 -> rollback
1 | mysql> start transaction; |
设置回滚点 -> savepoint
1 | mysql> start transaction; |
存储过程
创建存储过程
1 | mysql> delimiter // |
删除存储过程
1 | drop procedure proc; |
函数
rand() -> 生成随机数
1 | mysql> select rand(); |
向上取整
1 | mysql> select ceil(4.2); |
向下取整
1 | mysql> select floor(4.2); |
数据截取
1 | mysql> select truncate(3.1415926, 3); |
字符串操作
1 | mysql> select lcase('RAIN'); #将字符串转换成小写 |
获取当前时间
1 | mysql> select now(); |
获取unix时间戳
1 | mysql> select unix_timestamp(); |
数据加密函数
1 | mysql> select sha("jack loves rose"); |