前言
MySQL是一种关联数据库管理系统 由于其体积小、速度快的特点
数据库CURD
他和前面的oracel的使用方法差不多,这里就不过多叙述,大概记录一下
创建数据库
创建一个名称为mydb1的数据库。(默认为latin1)
create database mydb1;
创建一个使用utf-8字符集的mydb2数据库。
create database mydb2 character set utf8;
创建一个使用utf-8字符集,并带校对规则的mydb3数据库。会对存入的数据进行检查。
create database mydb3 character set utf8 collate utf8_general_ci;
查看数据库
显示所有数据库
show databases;
显示创建数据库的语句信息
show create database mydb2;
“ ` ”(ESC键 下面的按键),表示反引号,默认情况下,反引号括起来的字符串,区分大小写
show create database mydb1;
修改数据库
alter database mydb1 character set utf8;
删除数据库
删除数据库mydb3
drop database mydb3;
表的CURD
use mydb2
create table t1 (id int, name varchar(20))
查看当前使用的是哪个库:
status 或者 select database() from dual;
查看当前选择的数据库中的表:
show tables;
查看表结构:
desc tablename;
修改和删除表
更改表名: rename table employee to worker;
增加一个字段:alter table employee add column height double; (column关键字在Oracle中,添加则语法错误)
修改一个字段:alter table employee modify column height float;
删除一个字段:alter table employee drop column height;
修改表的字符集:alter table employee character set gbk;
删除表
删除employee表
drop table employee; (MySQL中不能使用purge,添加会出现语法错误)
表数据的CURD
表的创建和列的插入
create table employee(
id int,
name varchar(20),
sex int,
birthday date,
salary double,
entry_date date,
resume text
);
insert into employee values(1,'张三',1,'1983-04-27',15000,'2012-06-24','一个大牛');
insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(2,'李四',1,'1984-02-22',10000,'2012-07-24','一个中牛');
insert into employee(id,name,sex,birthday,salary,entry_date,resume) values(3,'王五',0,'1985-08-28',7000,'2012-08-24','一个小虾');
update数据
将所有员工薪水都增加500元。
select id, name as "名字", salary "月薪", salary*12 年薪 from employee where id >=2;
update employee set salary=salary+500;
将王五的员工薪水修改为10000元,resume改为也是一个中牛
update employee set salary=10000, resume='也是一个中牛' where name='王五';
删除数据
删除表中姓名为王五的记录。
delete from employee where name='王五'; 【注意from不能省略】
删除表中所有记录。
delete from employee;
使用truncate删除表中记录。
truncate employee;--无条件 效率高
**注 但是truncate不能回滚,所以一般不使用
分组数据
为学生表,增加一个班级列,练习分组查询。
alter table student add column class_id int;
注意语法:Oracle中不能有“column”关键字,MySQL中有没有“column”都可以执行。
更新表:
update student set class_id=1 where id<=5;
update student set class_id=2 where id>5;
(update student set class_id=2 where id between 6 and 10;)
查出各个班的总分,最高分。
select class_id, sum(chinese+english+math) "总成绩", max(chinese+english+math) "最高分" from student group by class_id;
求各个班级 英语的平均分:
select classid, avg(english) from student group by class_id
**注:和oracel一样,分组数据后面要和前面一样,不然会出现错误
对于组函数的应用与Oracle类似,可以应用于Having中,但不能用于where子句中.
多表查询
交叉连接
叉积又称笛卡尔积,下面有笛卡尔积的介绍
select e.*,p.* from emp e cross join dept d;
https://blog.csdn.net/dongdong7_77/article/details/110739478
满外连接
任意一边有值就会显示
select e.*, d.*from emp e full outer join dept d on e.deptno=d.deptno;
内连接
满足连接条件的数据(两边都有才显示)对应等值连接
select e.*, d.*from emp e inner join dept d on e.deptno=d.deptno;
左外连接和右外连接
//对应语句的左右,左外就是显示左边表的全部,右边就是显示右边表的全部
select e.*, d.*from emp e left outer join dept d on e.deptno=d.deptno;
select e.*, d.*from emp e right outer join dept d on e.deptno=d.deptno;