A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 会飞dê鱼 初级黑马   /  2019-1-3 08:57  /  715 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1: ddl  对数据库和表进行操作。
show databases ,显示数据库;;
create datebase  if not exists db1;如果db1不存在就创建相应数据库;
show create db1;显示数据库的属性。
create  datebase  if not  exists bd1 character gbk  设置创建的数据库的编码为GBK;
alter database  db1 character set gbk  将数据库的编码设置为GBK
drop database if exists db1 如果数据库db1 存在 在删除。
use db1 使用数据库db1;
select database() 查询当前正在使用的数据库。
show tables 显示所有的表。
desc 表名 查询表结构
TIMESTAMP  添加数据的时间,不赋值的话,自动获取当前系统的时间。
datetime
drop  table 表 名  删除表名.
create table 表名 like 表名1   复制表名1的至表名。
alert  table 表名 rename  to 新的表名       
alert  table 表名 add 列名 数据类型 。添加列。
alert  table 表名 change 列名 新列名 新数据类型  列名和数据类型一起更改
alert  table 表名modify 列名 新数据类型。
alert  table 表名 drop 列名, 删除对应表的列。
2:  dml 对数据库中的元素进行增删改。
        TRUNCATE  TABLE 表名  删除该表再创建 一个一样的空表。
        delete  from  表名。 删除一个表。多少条数据 执行多少次,不推荐。
        insert into  表名(1,2,3。。n)values (1,2,3。。n),参数列表可以不写,默认全部修改
        update 表名 set  列名1 =值 ,列名2=值 where 条件(where  id = 1)
3:  dql 对数据库中的元素进行查询。
select * from 表名 where  id=1; where不写 默认查询整个表,*可以换成指定类型,用逗号隔开。
SELECT DISTINCT 列名 form 表名  指定列名去重。
SELECT age ,PASSWORD,age+PASSWORD AS总分 FROM student;  AS取别名。计算age和password之和,以别名总分显示, AS可以省略以空格代替。
当相加的元素有NULL时 使用 IFNULL(列名,0)表示。不然结果为null。
age>=20&&age<=30  和age>=20 and age<=30 以及 age between 20 and 30等效。
or 和||以及 in(元素1,元素2,元素3)满足一个都可以 。3个方法一样
当查询的东西为NULL 时不能用=判断  只能用 IS NULL 以及IS NOT NULL.
        <> 和!= 等效。
        like 模糊查询。_代表 一个字符。 %代表多个字符。
        order by 排序  ASC 默认的升序  DESC 降序。
        聚合函数  会排除NULL   IFNULL(空的列名,0)代替
         count  个数  max最大值  min最小值  avg平均数  sum总和
        select avg(math) from person。
        分组  group by
        分组之后的字段:分组字段,聚合函数。 where在分组之前进行限定,不满足就不参与分组,也不能在后面接聚合函数。having 在分组之后进行限定,不满足就不会被查询出来,可以在having后进行聚合函数的判断。
例子:
select sex,avg(math),count(id) from person where math >70 group by sex having count(id)>2;
查询表person当中数学成绩大于70的人 按照男女分组,如果分组人数大于2,之后统计该分组的平均分以及该分组的人数。
        分页查询limit
        limit begin length  第一页为(0,length)  
        当前页码的开始索引为 (当前的页码-1)*length   length代表每页显示的长度
4:多表查询:
内连接隐式查询:例子                SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
显示内查询:语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
外连接查询:语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
                * 查询的是左表所有数据以及其交集部分。
* 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
子查询:例子SELECT * FROM emp WHERE emp.`salary` = (SELECT MAX(salary) FROM emp);
        1. 子查询的结果是单行单列的:
                    * 子查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =
        2. 子查询的结果是多行单列的:
                    * 子查询可以作为条件,使用运算符in来判断
        3.子查询的结果是多行多列的:
                    * 子查询可以作为一张虚拟表参与查询
例子1.查询出部门编号、部门名称、部门位置、部门人数
                /*
                    分析:
                        1.部门编号、部门名称、部门位置 dept 表。 部门人数 emp表
                        2.使用分组查询。按照emp.dept_id完成分组,查询count(id)
                        3.使用子查询将第2步的查询结果和dept表进行关联查询   
                */
                SELECT
                    t1.`id`,t1.`dname`,t1.`loc` , t2.total
                FROM
                    dept t1, (SELECT dept_id,COUNT(id) total  FROM   emp  GROUP BY dept_id) t2
                WHERE t1.`id` = t2.dept_id;
例子2.查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询           
                /*
                    分析:
                        1.姓名 emp, 直接上级的姓名 emp
                            * emp表的id 和 mgr 是自关联
                        2.条件 emp.id = emp.mgr
                        3.查询左表的所有数据,和 交集数据
                            * 使用左外连接查询
                */
                /*
                select
                    t1.ename,  t1.mgr, t2.`id`,t2.ename
                from emp t1, emp t2
                where t1.mgr = t2.`id`;
                */
                SELECT
                    t1.ename, t1.mgr, t2.`id`,t2.`ename`
                FROM emp t1 LEFT JOIN emp t2  ON t1.`mgr` = t2.`id`;
隔离级别:
            1. read uncommitted:读未提交
                * 产生的问题:脏读、不可重复读、幻读
            2. read committed:读已提交 (Oracle)
                * 产生的问题:不可重复读、幻读
            3. repeatable read:可重复读 (MySQL默认)
                * 产生的问题:幻读   一个事务操作(DML)数据表中所有记录,另一个事务添加了                                                                                一条数据,则第一个事务查询不到自己的修改
            4. serializable:串行化
                * 可以解决所有的问题

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马