mysql基本操作
2019-06-04 14:48
169 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38325614/article/details/90768770
把不规则日期格式转成标准格式
格式: str_to_date(日期字符串,格式)
select str_to_date(‘25号12月2015年’,’%d号%m月%Y’);
一.数据库操作
1.查看所有数据库
show databases;
2.创建数据库
-格式: create database 数据库名称; eg: create database db1; -创建并指定字符集: create database 数据库名称 character set gbk; eg: create database db2 character set gbk;
3.查看指定数据库详情
-格式:show create database 数据库名称;
4.删除数据库
-格式:drop database 数据库名称; eg: drop database db2;
5.使用数据库
-格式: use 数据库名称;
二.表操作
1.创建表
-格式: create table 表名(字段1名 字段1类型, 字段2名 字段2类型,.....); eg: create table stu(id int,name varchar(10),age int, chinese int, math int,english int);
2.查看所有表
show tables;
3.查看指定表详情
-格式:show create table 表名;
4.查看表的字段信息
-格式:desc 表名;
5.创建表指定引擎和字符集
create table t1(id int,name varchar(10)) engine=myisam charset=gbk;
6.删除表
drop table t1;
7.表的引擎
- innodb:支持数据库的高级操作,包括:事务 外键等
- myisam:仅支持数据的增删改查操作
8.表的修改
8.1修改表的名称-格式: rename table 原名 to 新名; eg: rename table person to t_person;8.2 修改表的引擎和字符集
-格式: alter table 表名 engine=myisam charset=gbk; eg: alter table t_person engine=myisam charset=gbk;8.3 添加表的字段
-最后面格式: alter table 表名 add 字段名 字段类型; eg: alter table t_person add age int; -最前面格式: alter table 表名 add 字段名 字段类型 first; eg: alter table t_person add chinese int first; -某个字段的后面格式: alter table 表名 add 字段名 字段类型 after 字段名; eg: alter table t_person add math int after id;8.4 删除字段
-格式: alter table 表名 drop 字段名; eg: alter table t_person drop chinese;8.5 修改字段名称和类型
-格式:alter table 表名 change 原字段名 新字段名 字段类型 eg: alter table t_person change age myage int;8.6 修改字段的类型和位置
-格式:alter table 表名 modify 字段名 字段类型 first/after xxx; eg: alter table t_person modify myage int after id;
三.主键约束
- 什么是约束:就是创建表的时候给表字段添加的限制条件
- 主键约束的特点: 唯一并且非空,一个表中只有一个主键
创建表并添加主键约束 eg: create table t1(id int primary key,name varchar(10)); 创建表添加主键约束并自增 eg: create table t2(id int primary key auto_increment,age int);
四.事务
- 什么是事务: 事务是数据库中执行sql语句的最小工作单元,在同一个事务中的sql语句要么同时成功,要么同时失败.
- mysql数据库默认sql语句是自动提交的
- 关闭数据库的自动提交
查看自动提交的状态: show variables like '%autocommit%'; 关闭自动提交 如果需要打开自动提交把0换成1 set autocommit=0; 保存回滚点 savepoint s1(标识); eg: savepoint s1; 回滚 rollback 执行rollback会回滚到上次提交的点或者关闭自动提交时的点 eg: rollback to s1;
五.数据库数据类型
1.整型
- 常用:int(m) bigint(m) m代表显示长度,如果字段数值长度不到m时 会在数值的前面补零,但是一定要和 zerofill结合使用
2.浮点型
- 常用:double(m,d) m代表总长度,d代表小数长度 如:76.232 m=5 d=3;
- decimal(m,d) 超高精度小数,需要涉及高精度运算时使用decimal
3.字符串
- char(m): 长度不可变 m=20 abc 20 执行效率高 最大值255
- varchar(m):长度可变 m=20 abc 3 节省资源 最大值:65535但是超过255建议使用text
text: 可变长度,最大65535
4.日期类型
- date: 只能保存年月日
- time: 只能保存时分秒
- datatime:年月日时分秒 9999-12-31 默认值为null
- timestamp:年月日时分秒 2038-01-19 默认值为当前时间
六.条件查询语句
1. in
- 如果查询字段的值为多个的时候可以使用in关键字
1. 查询person表中 年龄(age)是25,28,30,22岁的所有信息 eg: select * from person where age in (25,28,30,22); 2. 查询员工工资是800,950,1600的员工名字和工资 eg: select ename,sal from emp where sal in(800,950,1600);
2.between x and y
- 在某两个数值之间, 包含and两边的数值
查询员工工资在500-1000的所有员工名字和工资 eg: select ename,sal from emp where sal between 500 and 1000;
3.like
- _:代表单个未知字符
- %:代表多个未知字符
- 举例:
-以a开头: a%
-以a结尾: %a
第二个字符是a: _a%
-包含a: %a%
-倒数第三个字符是a: %a_ _
-第二个和最后一个是a: _a%a
4.order by
- 格式: order by 字段名
- 默认升序, 指定升序是:asc 降序:desc
- 多字段排序,当第一个字段有相同值时,第二个字段排序开始
5.limit
- limit 跳过条数,查询条数
6.distinct
- 去重
eg: select distinct job from emp;
7.group by
- 分组查询
eg: select deptno,avg(sal) from emp group by deptno;
8.Having
- where后面只能对普通字段进行筛选
- having写在 group by 后面,通常是和group by结合使用
- 普通字段的条件写在where后面,聚合函数条件写在having后面,having写在group by后面
eg: select deptno,avg(sal) a from emp group by deptno having a>2000;
9.sql中各个关键字的顺序:
- select … from 表名 where …group by… having…order by…limit
七.函数
1.数值计算
- %和mod都是取余的作用
7%2 等效 mod(7,2)
2.运算符
- >
- <
- = :判断等于null时用 is null
- >=
- <=
- != :判断不等于null时用 is not null
- (<>) :等价于 !=
- and等效java的 &&
- or等效java的 ||
2.日期相关函数
- 获取当前日期+时间 now()
select 4000 now();
- 获取当前日期
select curdate();
- 获取当前时间
select curtime();
- 从日期和时间中提取日期
select date(now());
- 从日期和时间中提取时间
select time(now());
- 提取年 月 日 时 分 秒
select extract(year from now()); select extract(month from now()); select extract(day from now()); select extract(hour from now()); select extract(minute from now()); select extract(second from now());
- 日期格式化
格式: date_format(时间,格式)
%Y 4位年 2018
%y 2位年 18
%m 2位月 05
%c 1位月 5
%d 日
%H 24小时
%h 12小时
%i 分
%s 秒
格式: str_to_date(日期字符串,格式)
select str_to_date(‘25号12月2015年’,’%d号%m月%Y’);
3.聚合函数
- 求和 sum(字段名)
- 平均值 avg(字段名)
- 最大值 max(字段名)
- 最小值 min(字段名)
- 统计数量 count(*)
4.字符串相关函数
- concat(a,b) 字符串连接函数
eg: select concat('a','b');
- char_length(str) 获取字符串的长度
eg: select ename,concat(sal,'元') from emp;
- instr(str,subStr) 获取subStr在Str中的位置
eg: select instr('nba','ab');
- locate(subStr,str)获取subStr在Str中的位置
eg: select locate('a','nba');
- insert(str,start,length,newstr)插入字符串
eg: select insert('abcdefg',3,2,'m');
- lower(str) 转小写
eg: select lower('NBa');
- upper(str) 转大写
eg: select upper('nBa');
- trim(str) 去两端空白
eg: select trim(' abc ');
- left(str,length) 从左边截取多少个字符
eg: select left('abcdefg',3);
- right(str,length)从右边截取多少个字符
eg: select right('abcdefg',3);
- substring(str,index,length)截取字符串
eg: select substring('abcdefg',2,3);
- replace(str,old,new) 替换字符串
eg: select replace('HelloWorld','World','MySQL');
- repeat(str,count)重复
eg: select repeat('加油',2);
- reverse(str) 反转
eg: select reverse('HelloWorld');
5.数学相关函数
-
向下取整 floor(num)
select floor(3.23); -
四舍五入
round(num) eg: select round(2.7);
- round(num,m);
eg: select round(3.283749,2);
truncate(num,m); 非四舍五入
select truncate(3.283749,1);
随机数 rand() 0-1
select floor(rand()*6);
八.高级查询语句
1.子查询
- 什么是子查询:嵌套在sql语句里面的查询sql语句 称为子查询
- 子查询可以有多层嵌套
- 子查询可以写在的位置有:
- 写在where/having后面做查询条件的值
eg: select * from emp where sal in (select sal from emp where deptno = 20)
- 写在from后面当成一张新的表 必须起别名
eg: select * from (select * from xxx) t1;
- 可以写在创建表的时候
eg: create table newemp as (select ename,sal from emp);
2.关联查询
- 同时查询多张表的数据称为关联查询
查询每一个员工姓名和所对应的部门名称 eg: select emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;
3.等值连接
- 等值连接格式:
select * from A,B where A.x=B.x and A.y=abc;
4.内连接
- 内连接格式:
select * from A [inner] join B on A.x=B.x where A.y=abc;
5.外连接
- 关联查询时有时 只查询两张表有关系的数据,不能满足需求,如果需要查询某一张表所有数据(包含没有关系的),则使用外连接查询方式
- 左外连接:以join 左边表为主表查询所有数据,右边表只查询有关系的数据
- 右外连接:以join 右边表为主表查询所有数据,左边表只查询有关系的数据
左外:
select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;
右外:
select e.ename,d.dname from emp e right join dept d on e.deptno=d.deptno;
6.自关联
- 什么是自关联: 在一张表中有一个字段指向当前表的id,这种称为自关联
- 何时使用: 当保存的数据有层级关系并且不确定有多少层的时候使用自关联.
eg: select e.ename,m.ename from emp e join emp m on e.mgr=m.empno
九.
1.视图
-
什么是视图:数据库中存在多种对象,表和视图都是数据库中的对象,创建视图时名称不能和表名重名,视图实际上是代表了一段sql查询语句,可以理解成视图是一张虚拟的表,表中的数据会随着原表的改变而改变.
-
为什么使用视图:因为有些数据的查询需要书写大量的sql语句,每次书写比较麻烦,使用视图可以起到sql重用的作用,可以隐藏敏感信息
-
创建视图的格式:
create view 视图名 as 子查询;
-
例如
隐藏员工表的工资字段
create view vempnosal as (select empno,ename,job,mgr,deptno from emp);
-
创建emp表部门是20并且工资小于3000的视图
create view v_emp_20 as (select * from emp where deptno=20 and sal<3000);
-
创建emp表每个部门工资的总和,平均工资,最大工资,最小工资的视图
create view v_emp as (select deptno,sum(sal),avg(sal),max(sal),min(sal) from emp group by deptno);
视图的分类
- 简单视图:创建视图的子查询中不包含:去重,函数,分组,关联查询的视图称为简单视图. 可以进行增删改操作
- 复杂视图: 和简单视图相反.
在简单视图中进行增删改操作
- 视图中插入数据
insert into vemp10 (empno,ename,deptno,sal) values (10001,'张三',10,300);
- 数据污染: 往视图中插入一条视图中不显示,但是原表会显示的数据称为数据污染
insert into vemp10 (empno,ename,deptno,sal) values (10002,'李四',20,400);
- 如果需要避免数据污染的出现,创建视图时需要使用 with check option的关键字
create view vemp20 as (select * from emp where deptno=20) with check option; insert into vemp20 (empno,ename,deptno,sal) values (10003,'王五',20,400);(成功) insert into vemp20 (empno,ename,deptno,sal) values (10004,'赵六',10,400);(失败)
- 测试在视图中修改和删除数据 修改和删除操作方式和table一样
- 修改vemp10视图中任意一条数据的工资为500;
update vemp10 set sal=500 where empno=10001; update vemp10 set sal=500 where empno=10002;
- 删除vemp10中工资为500的员工
delete from vemp10 where sal=500; delete from vemp10 where empno=10002;
- 修改和删除只能操作视图中存在的数据
- 修改视图
格式: create or replace view 视图名 as 子查询
create or replace view vemp10 as (select * from emp where deptno=10 and sal<2000);
- 删除视图
drop view v_emp_20; drop view if exists v_emp_20;(如果存在删除 不存在也不会报错)
- 视图别名
如果创建视图的时候使用了别名,则对视图操作的时候只能使用别名
create view vempname as (select ename name from emp); update vempname set name='abc' where name='李四';
视图总结:
- 视图是数据库中的对象,代表一段sql语句
- 作用:重用sql,隐藏敏感信息
- 分类:简单(不包含函数,去重,分组,关联查询)(可以进行增删改查操作)和复杂(和简单相反)(只能查)
- 工作中一般使用视图时只进行查询操作 如果需要增删改则直接对原表进行操作
相关文章推荐
- MySQL基本语法操作,对表的基本操作,查询
- 【基本操作命令】mysql基本操作命令汇总--笔记
- php mysql基本操作
- MySQL——数据表的基本操作
- 初学者容易犯的错误,SQL中的基本操作问题(mysql)一
- MySQL的基本操作(一)——增删改
- 封装MySQL C API 基本操作
- MySQL数据表基本操作
- MySQL基本操作---事务处理语言(DTL)
- mysql基本操作(一)-数据库 表和字段的操作
- Mysql基本操作语句
- MySQL除了基本的增删改查之外的高级操作命令
- MySQL基本操作
- mysql基本操作(三)-多表记录操作和运算符优先级
- MySQL基本操作
- MySQL基本操作
- MongoDB数据库的基本操作命令以及和mysql进行比较
- MySQL基本操作
- MySQL学习第五天 MySQL数据库基本操作
- MySql之DDL操作创建表(添加主键, 外键约束以及基本的数据类型)