美文网首页
学习笔记

学习笔记

作者: iPhone | 来源:发表于2019-06-28 10:24 被阅读0次
    Mysql
    
    PATH="$PATH":/usr/local/mysql/bin
    
    启动MySQL服务
    sudo /usr/local/MySQL/support-files/mysql.server start
    
    停止MySQL服务
    sudo /usr/local/mysql/support-files/mysql.server stop
    
    重启MySQL服务
    sudo /usr/local/mysql/support-files/mysql.server restart
    
    
    登录
    mysql -u root -p   :1  (mysql -uroot -p)
    mysql -h127.0.0.1 -uroot -p1
    mysql --host=127.0.01 --user=root --password=1
    
    退出
    exit
    quit
    
    查看数据库
    show databases;
    
    单行注释: show databases;-- 查询
            show databases;#查询
    多行注释:show databases; /**/
    
    DDL:操作数据或者表
    DML:数据的增删改
    DQL:数据的查询
    DCL:权限
    
    查看某个数据库
    show create database web09;
    创建一个数据库
    create database db1;
    创建一个数据库,前判断是否存在
    create database if not exists db1;
    创建一个数据库,指定字符集
    create database db3 character set utf8;
    create database if not exists db5 character set gbk;
    修改数据的字符集
    alter database db5 character set utf8;
    删除数据库;
    drop database db1;
    drop database if exists web08;
    查询使用数据库
    select database();
    使用数据库
    use db1;
    
    操作表:DDL
    查询某个数据库中所有表名称
    Show tables;
    查询表的结构?
    desc proc;
    创建表:
    create table student(id int,name varchar(32),age int,score double(4,1),birthday date,inster_time timestamp);
    删除表
    drop table tabelName; 
    drop table if exists tabelName ; 
    复制一个表
    create table stu_like student;
    修改表的名
    alter table student rename to stu;
    修改表的字符集;
    alter table stu character set utf8;
    修改列的类型
    alter table stu modify 列名 varcha(10);
    修改列的名称
    alter table stu change 列名 新列名 varchar(20);
    删除列
    alter table stu drop sex;
    添加列
    alter table stu add 列名 varcahr(10);
    
    
    DML:
    1.添加数据
    insert into stu(id,name,age,score) values(1,'张无忌',20,100);
    insert into stu values(2,'赵敏',17,99.0,null,null);-- 简化列名,意思就是全部数据
    insert into stu values(3,'张三丰',87,99.0,"1988-08-08",null);
    2.删除数据
    Delete from stu where id=1;
    (没有where , 删除所有数据)
    truncate table stu;-- 删除表,后创建一个新表
    3.修改数据
    update stu set name="张无忌",age=12 (where id=1);
    如果没有where,列被全部修改
    4.查询数据
    select * from 表名;
    
    DQL:
    数据条件查询
    
    1.排序
    select * from stu order by score;-- 默认ASC
    select * from stu order by score DESC;
    
    2.聚合函数 -- (注意:排除null值)
       count:计算个数
        select count(age) from stu;
        select count(IFNULL(birthday,"1990-01-09")) from stu;
        select count(*) from stu;
       Max: 计算最大值
        select max(score) from stu;
       Min:最小值
        select min(score) from stu;
       Sum:和
        select sum(age) from stu;
       avg:平均值
        select avg(age) from stu;
    
    3.分组查询:
    Select sex , AVG(age) FROM stu GRoup by sex;
    Select sex , AVG(age),count(id) FROM stu GRoup by sex;
    mysql> Select sex , AVG(age),count(id) FROM stu where age > 35 GRoup by sex;
    Select sex , AVG(age),count(id) FROM stu where age > 35 GRoup by sex having count(id) > 2;
     Select sex , AVG(age),count(id) 人数 FROM stu where age > 35 GRoup by sex having 人数 > 2;
     /*
        1.where 在分组之前进行限定,如果不满足条件,则不参与分组;having在分组之后进行限定,如果不满足结果,则不会被查询出来.
        2.where 后不可以跟聚合函数的判断,having 可以;
    */
    
    4.分页查询
    select * from stu limit 0,3;-- 0开始,3条;第一页
    
    /*
    Limit: 只能在mysql,里面使用!
    */
    
    5.DQL 查询表中的记录
      Select 
           + 字段名(,)
      from
           + 表名列表
      where
           + 条件列表
      group by
           + 分组字段
      having
           + 分组之后的条件
      order by
        + 排序
      limit
        + 分页
    
    2.基础查询
      1. 多个地段的查询
        select name,age from student;
      2. 去除重复
        select distinct address from student;--distinct
      3. 计算列
        select name,math,english,math + english from student;--使用+
        select name,math,english,math + ifnull(english,0) from student; ifnull(english,默认值)
      4. 起别名
        select name,math,english,math + ifnull(english,0) as 总分 from student;
        select name,math,english,math + ifnull(english,0) 总分 from student;
        select name 姓名,math 数学,english 英语,math + ifnull(english,0) 总分 from student;
        
    3.条件查询
     1.where 子句后跟条件
     2.运算符
       > < <= >= = <> !=
        select * from student where age > 20;
       between...and..
        select * from student where between 20 and 30;
       In
        select * from student where age in (22,18);
       Like
        * 占位符
            _:单个任意字符
                select * from student where name like '_化%';
                select * from student where name like '___';
            %:多个任务字符
                select * from student where name like '马%';
                select * from student where name like '%马%';
       Is null
        select * from student where English is null;
       And 或者 &&
       or 或者 ||
       not 或者 !
        select * from student where English is not null;
    
    约束;
    
    1.主键约束 primary key --:1.非空且唯一;2.一张表只能有一个主键
        创建表时,添加主键约约束
            create table student(id int primary key,name varchar(20));
        删除主键
            alter table student drop primary key;
        添加主键
            alter table student modify id int primary key;  
        
        1.1 自动增长
            某列是数值,使用auto_increment 可以来完成值的自动增长;
        创建时,添加自增长
            create table student(id int primary key auto_increment,name varchar(20));
        删除子增长
            alter table student modify id int;
        添加子增长
            alter table student modify id int primary key auto_increment;   
    
    2.非空约束 not null
        创建表时,添加约束
            create table person(id int, name varchar(20) not null);
        删除字段的非空约束
            alter table person modify name varchar(20);
        创建表后,添加约束
            alter table person modify name varchar(20) not null;
    
    3.唯一约束 unique
        创建表时,添加约束
            create table person(id int, name varchar(20) unique);
            null值比较特殊,null值认为是不重复.
        删除唯一约束
            alter table person drop index phone_number;
        添加唯一约束
            alter table person modify phone_number varchar(20) phone_number;
    
    4.外键约束 foreign key
        创建表时,添加外键
        create table class(class_id int,name varchar(20));
        create table student(id int primary key auto_increment,name varchar(20),class_id int,constraint stu_class_fk foreign key (class_id) references department(id));
        删除外键
            alterr table student drop foreign key stu_class_fk;
        添加外键
            alter table student add constraint stu_class_fk foreign key (class_id) references department(id));
    
    5.级联操作
        设置级联,更新级联
    alter table student add constraint stu_class_fk foreign key (class_id) references department(id)) on update cascade;
        
        级联删除
        1.删除外键
        2.级联的删除
        alter table student add constraint stu_class_fk foreign key (class_id) references department(id)) on delete cascade;
        
    
    6.数据库备份
        mysqldump -uroot -p1 db1 > /Users/yt_lwf/Desktop/11/a.sql 
    7.还原数据库
             source /Users/yt_lwf/Desktop/11/a.sql;
    8.多表查询
      * 笛卡尔积
      * 多表查询的分类:
        1. 内链查询:
            1.隐式
                select * from emp,dept where emp.dept_id = dept.id;
                select * from emp,dept where emp.'dept_id' = dept.'id';
                select emp.name,gender,dept.name from emp,dept where emp.dept_id = dept.id;
                select t1.name,t1.gender,t2.name from  emp t1,dept t2 where t1.dept_id = t2.id;
                
            2.显式
                语法: select 字段列表 from 表名1 inner join 表名2 on 条件; 
                select * from emp inner join dept on emp.dept_id = dept.id;
                select * from emp join dept on emp.dept_id = dept.id; -- 省略 inner
    
        2. 外链查询:
            1.左外连接
                语法: select 字段列表 from 表1 left [outer] join 表2 on 条件;
                select t1.*,t2.name from emp t1 left join dept t2 on t1.dept_id = t2.id;
                查询左表(emp)的全部数据 和 dept 的交集数据
            2.右外连接
                语法: select 字段列表 from 表1 right [outer] join 表2 on 条件;
                select t1.*,t2.name from emp t1 left join dept t2 on t1.dept_id = t2.id;
                查询右表(dept)的全部数据 和 emp 的交集数据
        3. 子查询: 查询中,嵌套查询
                select * from emp where salary=(select max(salary) from emp);
            1.子查询是单行单列
                * 可以作为条件,使用运算符去判断 (运算符, > < = ....);
                    select * from emp where salary<(select avg(salary) from emp);
            2.子查询是多行单列
                * 可以作为条件,使用运算符去判断
                select * from emp where dept_id in (select id from dept where name in ("财务部","市场部"));
            3.子查询是多行多列
                *可以作为一张的虚拟表
                select * from dept t1,(select * from emp where join_date > '2011-11-11') t2 where t1.id = t2.dept_id;
    9.事务
        1.事务的操作
            1.开始事务  start transaction
            2.回滚     rollback
            3.commit  commit
        start transaction;-- 开启事务
        update account set balance = balance - 500 where name = "三张";-- 张三转出500
        update account set balance = balance + 500 where name = "李四";-- 李四转入500
        commit;-- 发现执行没有问题,提交事务
        rollback;-- 发现出了问题了,回滚事务
        mysql数据库的commit
        2.DML (增删改) 默认提交一次.
        3.查看默认提交方式;
                select @@autocommit;
            1:代表自动提交    
            0:手动提交
                
        4.修改提交方式
            set @@autocommit;
        
        ***:oracle 数据库默认是手动提交的.
        
        2.事务的四大特征
            1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败!
            2.持久性:当事务提交或者回滚后,会持久化的保存数据!
            3.隔离性:多个事务之间,相互独立!
            4.一致性:事务操作前后,数据的总量不变!
    
        3.事务隔离级别
            **多个事务之间隔离的,相互独立.但是多个事务同事操作同一批数据时,则会引发一些问题,设置不同的隔离级别可以解决!
            **问题:
                1.脏读:一个事务读取到,另一个事务中没有提交的数据
                2.不可重读度(虚读):在同一个事务中,两次读取的数据不同
                3.幻读:一个事务操作(DML),数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改!
            **隔离级别:
                1.read uncommitted:读未提交
                    *产生的问题: 脏读,不可重读度(虚读),幻读
                2.read commited:读已提交 (orcel 默认)
                    *产生的问题: 不可重读度(虚读),幻读
                3.repeatable:可重复读 (mysql 默认)
                    *产生的问题: 幻读
                4.serializable:串行化
                    *产生的问题: 无
            **级别高,效率底
            1.查询隔离级别
                select @@tx_isolation;
            2.设置隔离级别    
                set global transaction isolation level 级别的字符串;
    
    DCL:
        1.管理用户
            1.加用户
                create user '用户名'@'主机名' identified by '密码'
                create user 'lwf'@'localhost' identified by '1';
                create user 'lwf'@'%' identified by '1';-- %通配符
            2.查用户
                use mysql;-- 切换到mysql 数据库
                select * from user;-- 查询用户
            3.删用户
                drop user '用户名'@'主机名'
                
            4.修改用户密码
                update user set password = password('新密码') where user = '用户名';
                set password for '用户名'@'主机名' = password('新密码');
    
            *** root 忘记密码的处理
                1.停止mysql服务.
                2.启动mysql服务.(无验证方式) 
                    *windows mysql --skip-grant-tables;
                    *mac sudo mysqld_safe --skip-grant-tables --skip-networking &
                3.不要关闭窗口,再打开一个新的窗口
                4.mysql
                5.可以看到已经进入数据库了
                6.use mysql;
                7.update user set password = password("新密码") where user="root";
                8.停止mysql的服务 
                    * Mac 可以使用 FLUSH PRIVILEGES;
                9.重新登录就可以了
    
        2.授权
            1.查询权限
                show grants for 'lwf'@'localhost';
            2.授予权限
                grant 权限列表 on 数据库名.表明 to 'lwf'@'localhost';
                grant select,Delete on db1.stu to 'lwf'@'localhost';
                ** 所有权限
                    所有权限的通配符:all
                    所有库的所有表的通配符:*.*
            3.撤销权限
                revoke 权限列表 on 数据库名.表明 from 'lwf'@'localhost';
    
    
    
    
    
    JDBC:
        
        //1.下载对应数据库的jar包
            //2.复制jar包到项目的libs文件夹
            //3.右键libs文件夹  add as libary
            //4.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1","root","1");
        // 若mysql 是本地服务且是3306 端口的情况下:DriverManager.getConnection("jdbc:mysql:///db1","root","1");
            
            String sql = "UPDATE stu set name = 'www' WHERE id = 3";
            Statement stmt = conn.createStatement();
            int count = stmt.executeUpdate(sql);
            System.out.println(count);
            stmt.close();
            conn.close();
        
        executeUpdate(sql);-- DDL DML 
        executeQuery();-- DQL 
    

    相关文章

      网友评论

          本文标题:学习笔记

          本文链接:https://www.haomeiwen.com/subject/ckomtctx.html