黑马程序员技术交流社区

标题: [石家庄校区]mySQL学习笔记 [打印本页]

作者: 韶华白首zy    时间: 2018-5-9 15:28
标题: [石家庄校区]mySQL学习笔记
本帖最后由 小石姐姐 于 2018-5-11 10:08 编辑

MySQL概述
A:MySQL概述
        数据库就是一个文件系统,通过标准的SQL语句获取数据.是一种关系型数据库.就是存储的是实体之间的关系
B;服务器的概述
         硬件:指的就是一台计算机
         软件:需要在这台电脑上安装数据库服务器.
C:存储方式的描述
         一台数据库服务器中会创建很多数据库(一个项目就会创建一个服务器).在数据库中会创建很多张表(一个实体就会创建一个表).在表中会创建很多记录(一个对象的实例就会添加一个新的记录).
D:SQL的分类
        (1)DDL数据定义语言
              Create创建 drop删除 alter
        (2)DCL数据控制语言
               Grant授权 if
        (3)DML数据操纵语言
               Insert插入 update更新 delete删除
        (4)DQL数据查询语言
               Select查询
                                        SQL的使用

A:对数据库进行操作
      (1)创建数据库:create database 数据库名称[character set 字符集 collate 字符集校对规则]         括号内的内容可以使用默认值
       (2)查看数据库:
              查看数据库服务器中所有的数据库:show databases;
              查看某个数据库的定义信息: show create database 数据库名称;
      (3)修改数据库
              alter database 数据库名称 character set 字符集 collate 校对规则;
      (4)删除数据库
              drop database 数据库名称;
      (5)其他操作
              切换数据库:use 数据库名称;
B:对表进行操作
      (1)创建表
              create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长  度) 约束);
                  一个实体对应一个表,一个实体属性对应表的一个字段
Java中的类型
MySQL中的类型
Byte/shot/int/long
Tinyint/smallint/int/biging
float
float
double
double
boolean
bit
Char/String
Char和varchar  *1
date
Date/time/datetime/timestamp   *2
File(文件类型)
Blob(二进制的文件)/text(文档)
注*1:char:代表的是固定长度的字符或字符串,如果未填满规定的长度,则会用空格将其补全
Varchar:代表的是长度可变的字符或者字符串,但是不能超过定义的长度否则报错
注*2:date:只有日期
      Time:只有时间
      Datetime:既有时间又有日期,如果没有存入数值,则会使用null存入表单中
      Timestamp:既有时间又有日期,如果没有存值,则会调用系统当前时间存入表单中
      约束:作用就是保持数据的完整性
           主键约束:primary key 主键约束默认就是唯一 非空的
           唯一约束:unique
           非空约束:not null
   (2)创建表的语句
           create database web_test1;//创建库
           use web_test1;//切换到创建的库
           create table user(
                     id int primary key auto_increment,//自动增长,会自动填充
                     username varchar(20) unique,
                     password varchar(20) not null,
                     age int,
                     birthday date
                );
   (3)查看表
          查看某个数据库下的全部表:show tables;
          查看某个表的结构信息:desc 表名;
   (4)删除表
          drop table 表名;
   (5)修改表  
          添加列:
              alter table 表名 add 列名 类型(长度) 约束;
          修改列的类型,长度和约束:
              alter table 表名 modify 列名 类型(长度) 约束;
          删除列:
               alter table 表名 drop 列名;
          修改列名称:
              alter table 表名 change 旧列名 新列名 类型(长度) 约束;
          修改表名
              rename table 表名 to 新的表名;
          修改表的字符集
              alter table 表名 character set 字符集;
C:对表记录进行操作 *********
    (1)添加记录
          向表中插入某些列:
              insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3)
          向表中插入所有列:
              insert into 表名 values (值1,值2,值3);
        注意事项
              1.值的类型与数据库中表列的类型一致。
              2.值的顺序与数据库中表列的顺序一致。
              3.值的最大长度不能超过列设置最大长度。如果列的约束为不能为空,则必须 添加内容.若约束为唯一,则不能相同
              4.值的类型是字符串或者是日期类型,使用单引号引起来。
     (2)修改记录
          语法
              update 表名 set 列名=值,列名=值 [where 条件];
          注意事项
              1.值的类型与列的类型一致。
              2.值的最大长度不能超过列设置的最大长度。
              3.字符串类型和日期类型添加单引号。
          修改某一列的所有值(一般不用)
              update user set password = 'abc';
          按条件修改数据****
              update user set password = 'xyz' where username = 'bbb';//xyz修改后的值  where后面跟的是条件,就是要修改的地方
          按条件修改多个列
              update user set password='123',age=34 where username='aaa';
     (3)删除记录
            语法:
               delete from 表名 [where 条件];
            注意事项
               1.删除表的记录,指的是删除表中的一行记录。
               2.删除如果没有条件,默认是删除表中的所有记录。
            删除某一条记录
               delete from user where id = 2;
            删除表中的所有记录
               delete from user;
          删除表中的记录有两种做法:
               delete from user;
                   删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的,可以回滚,恢复数据
               t runcate table user;
                   删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的,不能回滚不能恢复数据
      (4)删除记录******
           基本查询
             语法:
                 select [distinct] *|列名 from 表 [条件];
      (5)查询记录*******
             语法:
                 select [distinct] *|列名 from 表 [条件];
             条件查询:
                 使用where子句:<,>,>=,<=,!=
                                Like模糊查询 %站位符 _只能占一位
                                In:范围查询
                                And,or,not关联条件
                                Order by 排序查询  asc/desc 升/降
                                Sum(),max(),min(),count(),avg()聚合函数
                                Group by字段名称;分组查询
     (6)书写的顺序
               S(select) F(from)W(where)G(group by)H(having)O(order by);
     (7)执行的顺序
                From..where..group by..having..select..distinct..union..order by
多表

(1)外键约束
      作用:用来保证数据的完整性
      分类:外键约束,非空约束,唯一约束
(2)表与表之间的关系
      分类:一对一,一对多,多对多
(3)创建表之间的关系
      一对多:由多的一方的某一字段创建外键,指向单一的一方相关联的主键
      多对多:需要创建中间表,中间表至少有两个字段创建外键分别指向两个两个表相关联   的主键
      一对一:完全可以直接写入一张表中,如果非要分开来写,则要把一方当做是多的一方,创建外键指向单一一方,不过需要将外键设置为unique防止重复
(4)多表查询
      隐式内连接:
         select * from 表1,表2 where 关联条件;
      左式外连接
         select * from 表1 left outer join 表2 on 关联条件;
      右外连接
         直接把左外连接两个表的位置互换即可
(5)子查询
         a带in的子查询
            例:select * from classes where cid in (SELECT cno FROM student WHERE birthday > '1991-01-01');
              在括号中查找条件,只有满足括号中的条件,前面的内容才会执行
         B带exists的子查询
            例:select * from classes where exists (SELECT cno FROM student WHERE birthday > '1991-01-01');
               若括号中的记录存在则前面的内容将会执行,相当于if
         C带any的子查询
            例:SELECT * FROM classes WHERE cid > ANY (SELECT cno FROM student )  
               任意一个只要满足一个就会执行前面
         D:带all的子查询
            例:SELECT * FROM classes WHERE cid > ALL (SELECT cno FROM student)
               括号里必须全部满足才能执行前面
事务

A:概念:
     指的是逻辑上的一组操作,组成这个操作的逻辑单元,要不全部成功,要不全部失败
B:基本操作
     开启事务:
        start transaction;
     提交事务
        commit;
     回滚事务
        rollback;
C:事务的特性:
     原子性:事务不可分割,组成事务的逻辑单元不可分割
     一致性:事务执行前后,数据保持一致
     隔离性:事务执行不会受到其他事务干扰
     持久性:事务一旦结束,数据就会持久的保存在硬盘中
D:事务中的一些安全问题
     脏读:
         一个事务读到了另一个事务未提交的数据,导致查询结果不一致
     不可重复读:
         一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
     虚读/幻读:
         一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
E:事务的隔离级别
     read uncommitted        :脏读,不可重复读,虚读都有可能发生
     read committed        :避免脏读。但是不可重复读和虚读是有可能发生
     repeatable read        :避免脏读和不可重复读,但是虚读有可能发生。
     serializable                :避免脏读,不可重复读,虚读。
      安全级别越高执行效率就越低
JDBC

A:概述:
     是一种用于执行SQL语句的Java API,可以为多种数据库提供统一的访问,是一种基准,根据此可以创建更高级的接口与工具
B:DriverManager
     驱动管理类,加载驱动Class.forname(com.mysql.jdbc.Driver);
     获得链接:
       Connecton conn =DriverManager.getConnectio(String url,String user,Sting password)
              Url:数据库的连接地址
              User:用户名
             Password:数据库密码
     例:jdbc:mysql://localhost:3306/web_test3
             jdbc                        :连接数据库的协议
             mysql                :是jdbc的子协议
             localhost                :连接的MySQL数据库服务器的主机地址。(连接是本机就可以写成localhost),如果连接不是本机的,就需要写上连接主机的IP地址。
             3306                :MySQL数据库服务器的端口号
             web_test3        :数据库名称
             url如果连接的是本机的路径,可以简化为如下格式:
                  jdbc:mysql:///web_test3
C:connection
      与数据库连接的对象
      执行SQL语句对象:
          Statement                        :执行SQL(在开发中一般不会使用)
          CallableStatement                :执行数据库中存储过程
          PreparedStatement                :执行SQL.对SQL进行预处理。解决SQL注入漏洞。(在开发中会使用)
          PreparedStatement ps = conn.prepareStatement(String sql);
D:statemnt
       执行Sql
           执行SQL的方法
               boolean execute(String sql);
                    执行查询,修改,添加,删除的SQL语句。
               ResultSet executeQuery(String sql);
                    执行查询(执行select语句)。
               int executeUpate(String sql);
                    执行修改,添加,删除的SQL语句。(返回的int值 指的是影响了几行数据)
E,resultset
      
         结果集
         Boolean  next();
         例子:while(xx.next())
           结果集获取可以使用结果集中的:
           getXXX();方法通常都会有一个重载的方法。
           getXXX(int columnIndex);
           getXXX(String columnName);
F,JDBC的配置信息提取到配置文件
      格式:扩展名是.properties
      内容:key=value
            XML文件
G:格式举例
        //先将工具类设置好  工具类为JDBCUtils
        public void demo3(){
        //设置好需要用的变量
          Connection conn = null;
         PreparedStatement  ps = null;
           ResultSet rs =null;
           try{
          //获得链接
         conn = JDBCUtils.getConnection();
          //编写sql
          String sql = "select * from user";
          //预编译sql
          ps = conn.prepareStatement(sql);
         //设置参数
         //执行sql
         rs = ps.executeQuery();







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2