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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卞建彬 中级黑马   /  2018-10-18 19:48  /  1184 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-10-19 11:12 编辑

Mysql登陆:
1.mysql-uroot-p密码
2.mysql-h ip -uroot-p连接目标的密码
Mysql退出:
  quit ,exit
服务器开启:
net start mysql
服务器停止:
net stop mysql

sql指令:

1.什么是SQL?
Structured Query Language :结构化查询语言
  其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的
方式存在不一样的地方,称为"方言".

2.SQL通用语法
(1)SQL语句可以单行或多行书写,以分号结束. show databases查看数据库
(2)可使用空格和缩进来增强语句的可读性.
(3)Mysql数据库的sql语句不区分大小写.建议使用大写
(4)3种注释
   *单行注释: -- 注释内容(两个横岗一个空格)或 # 注释(Myqsql特有)
   *多行注释:/* 注释 */
3.sql常见的分类
  *DDL:数据库定义语音,作用创建数据库和数据表以及修改数据库和数据表
  *DCL:数据库控制语音,作用给数据库和数据表进行授权操作
  *DML:数据库操作语音,作用对表中的记录(数据)进行添加,修改,删除操作
  *DQL:数据库查询语言,作用对表中的记录,进行查询操作

4.sql操作数据库和表
  ==DDL 创建数据库和数据表以及修改等操作.关键词:create,drop,alter
  1.操作数据库:CRUD
     (1)C(create):创建
         *创建数据库:
           create database  + 数据库名称;
         *创建数据库,判断不存在,再创建:
           create database if not exists + 数据库名称;
         *创建数据库制定字符集
           create database 数据库名称  character   set  + 字符集

     (2)R(retrieve):查询  
         *查询所有数据库的名称:
               show databases;
         *查询某个数据库的字符集:查询某个数据库的创建语句
               show create database
     (3)U(update):修改
         *修改数据库的字符集
           alter database 数据库名称 character set 字符集
     (4)D(Delete):删除
         *删除数据库
           drop database 数据库名称;
         *判断数据库存在,再删除
           drop database if  exists 数据库名称;
     (5)使用数据库
         *查询当前正在使用的数据库名称
           select database();
         *使用数据库
           use 数据库名称;

5.操作表
     
     (1)C(create):创建
       1.语法:
        create table 表名(
         列名1 数据类型1,  age  int,
         列名2 数据类型2,
         ....
         列名n 数据类型n,


        );
        最后一列不需要加逗号,

      *数据类型
        1.int 整数类型       age int,
        2.double:小数类型    score double(5,2)
        3.date:日期  只包含年月日  yyyy-MM-dd
        4.datetime:日期  包含年月日时分秒 yyy-MM-dd HH:mm:ss
        5.timestamp:时间错类型 包含年月日时分秒 yyy-MM-dd HH:mm:ss
          * 如果将来不给这个字段赋值,或赋值为Nll,则默认采用当前系统时        间,来自动赋值.
         
        6.varchar:字符串
          * name varchar (20):姓名最大20个字符


        *创建表
          create table student(
            id int,
            name varchar(32),
            age int,
            score double(4,1),
            birthday date,
            insert_time timestamp
         );
        

     (2)R(retrieve):查询
      *查询某个数据库中所有的表名称
         show tables;
      *查询表结构
         desc 表名;
     (3)U(update):修改
        1.修改表名         alter table 表名 rename to 新的表名;
        2.修改表的字符集   alter table 表名 character set 字符集;
        3.添加一列         alter table 表名 add 列名 数据类型;
        4.修改列名称 类型  alter table 表名 change 列名 新列名 新数据类型;
                          alter table 表名 modify 列名 新数据类型(只改数据类型)
        5.删除列          alter table 表名 drop 列名;

     (4)D(Delete):删除
      * drop  table if exists 表名;  
      * drop  table  表名;

6.DML:增删改表中数据
    (1)添加数据
        *语法:
          insert into 表名(列名1,列名2...列名n) values(值1,值2,...值n);
        *注意:
          1.列名和值要一一对应.
          2.如果表名后,不定义列名,则默认给所有列添加值
          3.除了数字类型,其他类型需要使用引号引起来(单引双引都可以)
    (2)删除数据
        *语法  
           delete from 表名[where 条件]   例:Delect from sut where id=1;
        *注意
           1.如果不加条件,则删除表中所有记录(不推荐,有多少条记录就会执行多少次删除操作)
           2. truncate table 表名;(推荐使用)-- 先删除表,然后在创建一个一模一样的空表    (属于DDL的SQL语句)
    (3)修改数据
          * 语法:
           update 表名 set 列名1=值1,....[where 条件];
          *注意:
           1.如果不加任何条件,则会将表中的所有记录全部修改

7.DQL:查询表中的记录
     *    select * from 表名;
     1.语法:
        select  
             字段列表
          from     表名列表
          where    条件列表
          group by 分组字段
          having   分组之后的条件
          order by 排序
          limit    分页限定

     2.基础查询
        1.多个字段的查询
          select 字段名1,字段名2...from 表名;
        *注意:
          如果查询所有字段,则可以使用*来替代字段列表

        2.去处重复
            * distinct

        3.计算列
            * 一般可以使用四则运算一些列的值.(一般只会进行数值型的计算)
            * ifnull(表达式1,表达式2):
                表达式1:哪个字段需要判断是否为null
                表达式2:该字段为null后的替换值
        4.起别名
            * as:as也可以省略



1.    条件查询
(1)Wher子句后跟条件  
(2)运算符 >  <  >=   <=  
Between 值1  and 值2  等同于字段 >=值1 and 字段<=值2
字段 in(值1,…,值n)等同于 字段=值1  or 字段=值2,
Is null 如果值为null 不能使用= 要使用is null
2.    模糊查询
基本语法:where 字段 like;  字符:%表示任意字符(0-n个字符),_表示任意字符
3.    排序查询  
语法: order by 子句
  order by 排序字段1, 排序字段2…..
排序方式:
   升序:asc 默认的.
   降序:desc
注意:如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
4.    聚合函数查询
将一列数据作为一个整体,进行纵向的计算
(1)    count:计算个数
(2)    max:计算最大值
(3)    min:计算最小值
(4)    sum:计算和
(5)    avg:计算平均值
*注意:聚合函数的计算会排除null
        解决方案: 选择不包含非空的列进行计算,Ifnull函数
5.    分组查询
基本语法: group by 字段要有共同的特点进行分组
注意: 分组之后查询的字段:分组字段,聚合函数
Where和having区别:
1.where在分组之前进行限定,如果不满足条件则不参与分组
having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where后不可以跟聚合函数,having可以进行聚合函数的判断
查询时,关键词的先后顺序:
Select 字段
From 表名
Where 分组前条件判断
Group by 分组
Having   分组后条件判断
Order by  排序
6.    分页查询
分页:数据太多,一次性查询出来,展示效果不好,就是用户的体验不好
分页操作,不同的数据库分页基本原理不一样
Mysql: limit 进行分页,其他数据库不能使用limit进行分页

公式: 开始的索引=(当前的页码-1)*每页显示的条数





概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
      分类:
1.    主键约束:primary key
2.    非空约束:not null
3.    唯一约束:unique
4.    外键约束:foreign key
1.非空约束:not null
1.    在创建表时添加约束
2.    创建表完后,添加非空约束
2.唯一约束:unique 在同一列不能有相同的值
    注意:唯一约束可以有Null值,但是只能有一条记录为null
删除唯一约束:
    Alter  table  stu  drop  index  列名;
3.主键约束:primary key
  一.  注意:
1.    含义:非空且唯一
2.    一张表只能有一个字段为主键
3.    主键就是表中记录的唯一标识
      二.在创建表时,添加主键约束
           Create table stu(
            Id int primary key,  -- 给id添加主键约束
            Name varchar(20)
);
删除主键:
  Alter table stu drop primary key;


自动增长:
概念如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长
          在创建主键时:
            Create table stu(
            Id int primary key auto_increment,  -- 给id添加主键约束
            Name varchar(20)
);
           删除自动增长:
             Alter table stu modify id int;


4.    外键约束
外键的作用:让表与表建立关系,保证数据的有效性和正确性.
外键的特点:
1.外键的值不能随意写.
         2. 外键的值应用于另一张表的主键值
         3.外键的值可以为null,但是为null没有任何意义.
外键设计原则:
  主表
子表


在创建表时,可以添加外键
Create table student(
外键列
Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
1.    删除外键:  alter table 表名 drop foreign key 外键名称;
2.    添加外键:  alter table 表名 add Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)


1.    多表查询的分类
1.    内连接查询
隐式内连接:使用where 条件来消除无用的数据
显示内连接:select 字段列表  from 表名 inner join 表名2 on 条件
内连接查询:
     *从哪些表中查询数据, 条件是什么, 查询哪些字段
2.    外链接查询
左外连接: select 字段列表 from表1 left (outer) join 表2 on 条件
         查询的是左表所有数据以及其交集部分
右外链接: select 字段列表 from表1 right (outer) join 表2 on 条件
         查询的是右表所有数据以及其交集部分

3.    子查询: 查询中嵌套查询,称嵌套的查询为子查询
子查询作为一个值(单行单列):
子查询可以作为条件,使用运算符判断
子查询作为一个数组(多行单列):
子查询可以作为条件,使用运算符in来判断
子查询作为一个表(多行多列)
2.    笛卡尔积
多个表放在一起查询
出现问题:笛卡尔积(就是出现的无用数据)
通过主键和外键关联(因为外键的值,引用于主键的值)

3.    事务
1概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
*操作:
1开启事务: start  transaction
2回滚事务:rollback
3提交事务: commit
4 MySQL数据库中事物默认自动提交
*一条DML(增删改)语句会自动提交一次事务
*事务提交的两种方式
自动提交:mysql就是自动提交的
手动提交:需要先开启事务,在提交
*修改事务的默认提交方式
Select @@autocommit; 1-代表默认提交 0-代表手动提交
修改方式:set@autocommit=0/1;
2事务的四大特征:
(1)    原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
(2)    持久性:当事务提交或回滚后,数据库会持久化的保存数据
(3)    隔离性:多个事务之间,相互独立
(4)    一致性:事务操作前后,数据总量不变
3事务的隔离级别
  *概念:多个事务之间隔离的,相互独立的.但是如果多个事务操作同一批数据,则会引发一些问题,设计不同的隔离级别就可以解决这些问题
  *存在问题:
    (1)脏读:一个事务,读取到另一个事务中没有提交的数据
    (2)不可重复读:在同一个事务中,两次读取到的数据不一样
    (3)幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
  *隔离级别:
   (1)read uncommitted:读未提交
     产生的问题:脏读,不可重复读,幻读
   (2)read committed :读已提交    (Oracle默认)
   *产生的问题:不可重复读,幻读
   (3)repeatable read:可重复读 (mysql默认)
     *产生的问题:幻读
   (4)serializable :串行化
     *解决所有问题
  *注意:隔离级别从小到大安全性越来越高,但是效率越来越低
  *数据库查询隔离级别:
     *select @@tx_isolation
JDBC
1.*概念: Java DataBase Connectivity   Java 数据库连接,Java语言操作数据库
      定义了操作所有关系型数据库的规则。
其本质是官方(sun公司)定义的一套所有关系型数据规则,即接口.各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口编程,真正执行代码的驱动是驱动jar包中的实现类。
2.快速入门:
   *步骤:
(1)导入驱动jar包
     1.复制包到项目libs目录下
     2.右键 –>add as library
(2)注册驱动
(3)获取数据库连接对象 Connection
(4)定义sql
(5)获取执行SQL语句的象 Statement
(6)执行sql,接受返回结果
(7)处理结果
(8)释放资源   
3.详解各个对象
  1.DriverManager 驱动管理对象
  *功能:
      注册驱动: Class.forName(“com.mysql.jdbc.Driver”);,
          Mysql5之后的驱动jar包可以省略注册驱动的步骤
      获取数据库连接:
         Static  Connection getConnection(String url,String user,String password)
      参数: url:指定连接的路径
          语法:jdbc:mysql://IP地址:端口号/数据库名称
          细节:如果连接的是本机的服务器,并且mysql服务器默认的端口是3306
则可以简写为 jdbc:mysql///数据库名称
  2.Connection    数据库连接对象
     获取执行sql对象: statement createsta  
                    PreparedStatment preparedstatment=(string sql)
  3.Statement     执行sql对象
     Boolean execute(String sql):可以执行任意的sql (了解)
     Int executeUpdate(String sql):执行DML(insert,update,delect)语句,DDL(create,alterdrop)
*返回值:影响的行数,可以通过这个影响行数判断DML语句是否执行成功,返回值>0则执行成功
    Resultset executeQuery(String sql):执行DQL语句
  4.ResultSet      结果集对象
5.PreparedStatment 执行sql的对象



0 个回复

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