您的位置:首页 > 数据库 > MySQL

mysql基本操作

2019-06-04 14:48 169 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_38325614/article/details/90768770

一.数据库操作

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语句 称为子查询
    • 子查询可以有多层嵌套
    • 子查询可以写在的位置有:
    1. 写在where/having后面做查询条件的值
    eg: select * from emp where sal in (select sal from emp where deptno = 20)
    1. 写在from后面当成一张新的表 必须起别名
    eg: select * from (select * from xxx) t1;
    1. 可以写在创建表的时候
    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,隐藏敏感信息
    • 分类:简单(不包含函数,去重,分组,关联查询)(可以进行增删改查操作)和复杂(和简单相反)(只能查)
    • 工作中一般使用视图时只进行查询操作 如果需要增删改则直接对原表进行操作
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: