zoukankan      html  css  js  c++  java
  • Mysql学习总结

    表:具有固定列数和任意行数。

    数据库:一些关联表的集合。

    主键:一个数据表只能包含一个主键,使用主键来查询数据。

    外键:用来关联两张表。

    索引:快速访问数据库表的特定信息,索引是对数据库表一列和多列的值进行排序的一种数据结构。

    DDL:数据定义语言:定义数据库对象:创建库,表,列等。

    DML:数据操作语言:用来操作数据库表中的记录。

    DQL:数据查询语言:用来查询数据。

    DCL:数据控制语言:用来定义访问权限和安全级别。

     oracle 创建用户:

    CREATE USER 用户名 IDENTIFIED BY 密码;
    grant resource ,connect to 用户名; 
     

    mysql数据库分为两类:

    系统数据库:

    1. information_schema:存储数据库对象信息(例如:用户表信息,列信息等里面内容不能动)。
    2. performance_schema:存储数据库服务器性能参数信息。
    3. mysql:存储数据库用户权限信息。
    4. sys:以视图形式将information_schema和performance_schema结合,查询出更容易理解数据。

    用户数据库:

      用户自己创建的数据库,一个项目一个数据库。

    常用数据类型:

    double:浮点型(double(5,2)表示最多5位,其中必须有两位小数)。

    char:固定长度字符串类型

    varchar:可变长度字符串类型

    text:字符串类型

    blob:二进制类型

    data:日期类型(格式为:yyyy-MM-dd)

    time:时间类型(格式为:hh:mm:ss)

    datatime:日期时间类型(格式为:yyyy-MM-dd hh:mm:ss)

    在mysql中字符串类型和日期类型都要用单引号括起来。('mysql','2020-01-01')

    -----------------------------------------------------------------------------------------------------------------------------------------------------

    命令总结:

    DDL:

    • 创建数据库:create database 数据库名 character set utf8
    • 修改数据库:alter database 数据库名 character set gbk
    • 删除数据库:drop database 数据库名
    • 查看数据库:show database 数据库名
    • 使用数据库:use +数据库名称(之后可以查看数据库当中有多少张表:show tables)
    • 创建学生表:
      CREATE TABLE student(
      id BIGINT,
      name VARCHAR(20),
      email VARCHAR(20),
      age INT
      );
    • 添加一列:alter table 表名 add 列名 数据类型
    • 查看表字段信息:desc 表名
    • 修改一个表的字段类型:alter table 表名 modify 字段名 数据类型
    • 删除一列:alter table 表名 drop 字段名
    • 修改表名:rename table 原始表名 to 要修改的表名
    • 查看表的创建细节:show create table 表名
    • 修改表的字符集为gbk:alter table 表名 character set gbk
    • 修改表的列名:alter table 表名 change 原始列名 要修改列名 数据类型
    • 删除表:drop table 表名

    DML:

    • 查询表中所有数据:select * from 表名
    • 插入数据:insert into 表名(列名1,列名2...)values (列值1,列值2...)
    • 批量插入:
      INSERT INTO student (id, name, email, age) VALUES
       (1, 'zs', '123', 5),
      (2, 'ls', '456', 6);
    • 更新:update 表名 列名1=列值1,列名2=列值2...  where 列名=值
    • 删除:
    1. delete from 表名 (where 列名=值) 不删除表结构,数据可找回
    2. truncate table 表名 不能找回数据,删除数据快

     DQL:

      1.条件查询:

    • 查询指定列的数据:select 列名1,列名2... from 表名
    • where子句中的一些运算符和关键字
    1. between...and...  例如:select * from student where age between 18 and 20;
    2. in(set)/not in(set) 例如:select * from student where id in/not in ('1001', '1002', ''1003);
    3. is null / is not null
    4. and
    5. or
    6. not 

      2.模糊查询

    • 通配符:
    1. _:任意一个字符
    2. %:任意0~n个字符
    • 例如:查询姓名由五个字母组成,且第五个字母为s学生 select * from student where name like '____s';
    • 例如:查询姓名中包含s的学生 select * from student where name like '%s%';

      3.字段控制查询

    • 去除重复记录:select distinct 列名 from 表名;
    • 将查询结果运算并起名: 例如:select *, age+ifnull(score,0) as total from student(as可省略)
    • 排序:
    1. select * from student order by age asc(升序默认)/desc(降序)
    2. select * from student order by age asc ,id desc 按年龄升序,年龄相同按id降序排列

      4.常用聚合函数:

    • count()统计指定列不为null的记录行数 例如:select count(*) as total_record from employee
    • max(),min()统计指定列的最大值,最小值
    • sum()计算指定列的数值和,如果指定列类型不是数值类型,计算结果为0
    • avg()计算指定列的平均值,如果指定列类型不是数值类型,计算结果为0

       5.分组查询

    • group by加group_concat()表示分组后,根据分组结果,使用group_concat()来放置某一组字段的值的集合 例如:select gender, group_concat(name) from employee group by gender

                    

    • group by+聚合函数 
    1. 例如 select department,sum(salary),count(*) from employee group by department 查询每个部门的部门名称和每个部门的工资和,人数,
    2. 例如select department,count(salary) from employee where salary>1500 by department; 查询每个部门的部门名称以及每个部门工资大于1500的人数。
    • group by+having having作用和where一样但只能用于group by
    1. 例如:select depatment,sum(salary) from employee group by department having sum(salary)>9000; 查询工资总和大于9000部门的部门名称和工资和

            

    • 例如:select department,sum(salary) from employee where salary>2000 group by department having sum(salary)>6000 order by sum(salary) desc;查询工资大于2000中,工资总和大于6000的部门名称和工资和按各部门工资总和>6000的降序排列
    • 书写顺序:

    • 执行顺序:

           

    • limit:limit 参数1(从哪一行开始查),参数2(一共要查几行),角标是从零开始的 。
    • 分页思路: curPage---当前页,pageSize---每页都多少条数据 select * from employee limit (curPage-1)*pageSize,pageSize; 

      多表查询

      1.合并结果集

    • union合并时去除重复记录。
    • union all 合并时不去除重复记录。
    • 被合并的两个结果:列数,列类型必须相同。
    • select * from 表1 union (all) select * from 表2;  

      2. 连接查询

    • 内连接:

      1.等值连接:select * from stu st inner join score sc on st.id=sc.sid where score>70,

      

      2.非等值连接:连接表的条件不是=,是其他运算符时,例如:select e.ename,e.salary,d.dname,g.grade from emp e, dept d, salgrade g where e.deptno = d.deptno and e.salary >= g.lowSalary and e.salary<=g.highSalary;

      

      3.多表连接:99连接:select st.name,c.name,sc.score from stu st, score sc, course c where st.id=sc.sid and sc.cid=c.cid;

      4.多表连接:内联查询:select st.name,c.name,sc.score from stu st inner join score sc on st.id=sc.sid inner join course c on sc.cid=c.cid;

      5.自连接:自己连接自己,起别名:例如:select * from emp e1, empe2 where e1.mgr=e2.empno and e1.empno=1111; 求员工编号为111的员工编号,姓名和经理编号,姓名 

    • 外连接

      1.左外连接:左连接会把左表中的数据全部查出,右表当中只查出满足条件的数据 例如:select st.name, sc.score, sc.km from stu st left outer(可省略) join score sc on st.id=sc.sid;

      2.右外连接:同上

      

    • 自然连接

      两张连接的表中列的列名称和类型完全一致的列作为条件,会自动去除相同的列。例如:select * from student natural join score;

       3.子查询

    • 含义:一个select语句中包含一个或多个select语句.
    • 出现位置:where后,把select的查询结果当作另一个select的条件值。from后把查询结果当作一个新表。 

       数据完整性约束

       1.实体完整性

    • 作用:标识每一行数据不重复
    • 主键约束(primary key):
    1. 特点:每个表要有一个主键,数据唯一且不能为null。
    2. 添加方式:建表时:例如:create table 表名(字段1 数据类型 primary key,字段2 数据类型); create table 表名(字段1 数据类型,字段2 数据类型,primary key(主键1,主键2) );修改表时添加:例如:alter table student add constraint primary key(id);
    • 唯一约束(unique):
    1. 特点:指定列的数据不能重复,可以为空值。
    2. 格式:create table 表名(字段1 数据类型,字段2 数据类型 unique);
    • 自动增长列(auto_increment)
    1. 特点:指定列的数据自动增长,即使数据删除,序号不会重复之前的,继续往下走。
    2. 指定列的数据自动增长(添加时设置为主键)例如:create table 表名(字段1 数据类型 primary key auto_increment,字段2 数据类型);

      2.域完整性

    • 域:代表当前单元格。
    • 作用:限制此单元格的数据正确,不对照此列的其他单元格进行比较。
    • 非空约束(not null):create table 表名(字段1 数据类型 primary key auto_increment,字段2 数据类型 unique not null);
    • 默认值约束(default):create table 表名(字段1 数据类型 primary key auto_increment,字段2 数据类型 unique not null default '男');

      3.参照完整性

    • 什么是参照完整性:表与表之间的一种对应关系。
    • 通常情况下可以通过设置两表之间的主键,外键关系,或者编写两表之间的触发器来实现。
    • 有对应参照完整性的两张表格,在对它们进行数据插入,更新,删除的过程中,系统都会将被修改的表格与另一张对应表格进行对照,从而阻止一些不正确的操作。
    • 注意:数据库的主键和外键类型要一致,两个表必须是InnoDB类型,设置参照完整性后外键中的值必须是主键中的内容。
    • 一个表设置当中的字段为主键,设置主键的为主表 create table student(sid int primary key, name varchar(50) not null, sex varchar(10) default '男');
    • 创建表时设置外键,设置外键的为子表 create table score(sid int, score double, constraint fk_stu_score_sid foreign key(sid) references students(sid)); 添加外键: alter table score add constraint fk_stu_score_sid foreign key(sid) references student(sid);

      事务

    • 什么是事务:不可分割的操作,假设一个操作由ABCD四个步骤组成,只有四个步骤全部完成事务才成功,若任意一个失败,则认为事务失败。每条sql语句都是一个事务,事务只对DML语句有效,对DQL无效。
    • 事务的ACID:1.原子性:要么全部成功,要么失败全部回滚 2.一致性:让数据保持合理,例如:仓库商品减1,对应用户购物车商品加1。3.隔离性:多个用户并发访问数据库时,一个用户开启的事务不能被其他事务的操作干扰,多个并发事务之间要相互隔离。4.

      

     

      

     

  • 相关阅读:
    P2216 [HAOI2007]理想的正方形(dp+单调队列优化)
    洛谷P1415 拆分数列(dp)
    2017 ACM-ICPC EC-Final ShangHai 东亚洲大陆-上海
    sql查询50题
    虚拟机安装
    Kick Start 2019 Round A Parcels
    Kick Start 2019 Round B Energy Stones
    【DP 好题】Kick Start 2019 Round C Catch Some
    【图论好题】ABC #142 Task F Pure
    【DP 好题】hihoCoder #1520 古老数字
  • 原文地址:https://www.cnblogs.com/dongdong25800/p/9789104.html
Copyright © 2011-2022 走看看