Java中级——数据库

                                                                                     数据库

数据库:(DB) 按一定的数据模型组织、描述和存储在计算机内的、有组织的、可共享的数据集合。

数据管理: 对数据收集、整理、组织、存储、维护、检索、传送等。

        目标: 在妥当的时候以妥当的形式给妥当的人提供妥当的数据。

数据处理: 对数据进行加工、计算、提炼,从而产生新的有效数据的过程。

SQL: Structured Query Language     结构化查询语言

MySQL 的常用操作命令: 

    1). 首先确保 MySQL 服务先开启: 在 DOS 命令下开启: net start 服务名

                                                       在 DOS 命令下关闭: net stop 服务名

    2). 需要连接上 MySQL 服务器

            在 DOC 环境下连接到 MySQL 服务器的命令: 

                登录:mysql 【-h 主机名 -P 端口号】 -u 用户名 -p密码

SQL 语言的 9个核心动词: 

    DQL数据查询语言: 

        用来查询数据库中的数据 —— SELECT

    DDL数据定义语言: 

        用来创建数据库、数据库对象和定义表的列 —— CREATE、DROP、ALTER

    DML数据操作语言: 

        用来插入、删除和修改数据库中的数据 —— INSERT、DELETE、UPDATE

    DCL数据控制语言: 

        用来控制存取许可、存取权限等 —— GRANT、REVOKE

查看当前数据库服务器下的数据库:         show databases;

查看当前数据库的编码格式:                   show variables like 'char%';

创建指定名称的数据库:                          create database 库名;

创建指定字符编码的数据库:                   create database 库名 character set utf8;

删除指定名称的数据库:                          drop database 库名;

使用指定的数据库:                                 use 库名;

查看当前数据库下所有的表:                   show tables;

创建指定数据类型的数据库表:                create table 表名(列名 类型 列的特征...);

查看之前所定义的表的结构的语法:         show create table 表名;

查看表结构:                                           desc 表名;

删除表:                                                  drop table 表名;

查看当前时间:                                        select now();

                                                             select sysdate() from dual;

查看MySQL版本及当前时间:                  select version() current_date;

创建表 ★

create table 【if not exists】 表名(

   字段名 字段类型 【约束】,

   字段名 字段类型 【约束】,

   。。。

   字段名 字段    类型 【约束】

)

修改基本表

    1). 添加列: alter table 表名 add 列名 类型 [完整性约束];

    2). 修改列: alter table 表名 change/modify 列名 列新名 新类型;    

    3). 删除列: alter table 表名 drop 列名;

    4). 重命名表: alter table 表名 rename 新表名;

修改表的存储引擎: alter table 表名 engine=存储引擎;

改变字符格式:    set names gbk;

复制表

    1、复制表的结构

        create table 表名 like 旧表;

    2、复制表的结构+数据

        create table 表名

        select 查询列表 from 旧表【where 筛选】;

常见的约束

    NOT NULL:非空,该字段的值必填

    UNIQUE:唯一,该字段的值不可重复

    DEFAULT:默认,该字段的值不用手动插入有默认值

    CHECK:检查,mysql不支持

    PRIMARY KEY:主键,该字段的值不可重复并且非空  unique+not null

    FOREIGN KEY:外键,该字段的值引用了另外的表的字段

主键和唯一

1、区别:

    ①、一个表至多有一个主键,但可以有多个唯一

    ②、主键不允许为空,唯一可以为空

2、相同点

    都具有唯一性

    都支持组合键,但不推荐

外键:

    1、用于限制两个表的关系,从表的字段值引用了主表的某字段值

    2、外键列和主表的被引用列要求类型一致,意义一样,名称无要求

    3、主表的被引用列要求是一个key(一般就是主键)

    4、插入数据,先插入主表

    删除数据,先删除从表

可以通过以下两种方式来删除主表的记录

    #方式一:级联删除

        ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN   KEY(majorid)  REFERENCES major(id) ON DELETE CASCADE;

    #方式二:级联置空

        ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid)  REFERENCES major(id) ON DELETE SET NULL;

创建表时添加约束

create table 表名(

   字段名 字段类型 not null,#非空

   字段名 字段类型 primary key,#主键

   字段名 字段类型 unique,#唯一

   字段名 字段类型 default 值,#默认

   constraint 约束名 foreign key(字段名) references 主表(被引用列)

)

修改表时添加或删除约束

1、非空

    添加非空

        alter table 表名 modify column 字段名 字段类型 not null;

    删除非空

        alter table 表名 modify column 字段名 字段类型 ;

2、默认

    添加默认

        alter table 表名 modify column 字段名 字段类型 default 值;

    删除默认

        alter table 表名 modify column 字段名 字段类型 ;

3、主键

    添加主键

        alter table 表名 add【 constraint 约束名】 primary key(字段名);

    删除主键

        alter table 表名 drop primary key;

4、唯一

    添加唯一

        alter table 表名 add【 constraint 约束名】 unique(字段名);

    删除唯一

        alter table 表名 drop index 索引名;

5、外键

    添加外键

        alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);

    删除外键

        alter table 表名 drop foreign key 约束名;

自增长列:    默认从1开始,步长为1

    auto_increment_increment

如果要更改起始值:手动插入值

如果要更改步长:更改系统变量  set auto_increment_increment=值; 

插入

   语法:

        insert into 表名(字段名,...) values(值,...);

   语法:

        insert into 表名 set 字段=值,字段=值,...;

修改

    改单表的记录 ★

        语法:

            update 表名 set 字段=值,字段=值 【where 筛选条件】;

    修改多表的记录【补充】

        语法:

            update 表1 别名  left|right|inner join 表2 别名  on 连接条件   set 字段=值,字段=值【where 筛选条件】;

删除

    方式一:使用delete

        一、删除单表的记录★

            语法:

                delete from 表名 【where 筛选条件】【limit 条目数】

        二、级联删除[补充]

            语法:

                delete 别名1,别名2 from 表1 别名  inner|left|right join 表2 别名  on 连接条件 【where 筛选条件】

    方式二:使用truncate

            语法:

                truncate table 表名

    两种方式的区别【面试题】★

        1.truncate删除后,如果再插入,标识列从1开始

           delete删除后,如果再插入,标识列从断点开始

        2.delete可以添加筛选条件

           truncate不可以添加筛选条件

        3.truncate效率较高

        4.truncate没有返回值

            delete可以返回受影响的行数

        5.truncate不可以回滚

            delete可以回滚

基础查询:

    语法:

        select 查询列表  from 表名;

    1、查询单个字段

        select 字段名 from 表名;

    2、查询多个字段

        select 字段名,字段名 from 表名;

    3、查询所有字段

        select * from 表名

    4、查询常量

        select 常量值;

        注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要

    5、查询函数

        select 函数名(实参列表);

    6、查询表达式

        select 100/1234;

    7、起别名

        ①as

        ②空格

    8、去重

        select distinct 字段名 from 表名;

    9、+

        作用:做加法运算

        select 数值+数值; 直接运算

        select 字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算

        select null+值;结果都为null

    10、【补充】concat函数

        功能:拼接字符

        select concat(字符1,字符2,字符3,...);

    11、【补充】ifnull函数

        功能:判断某字段或表达式是否为null,如果为null 返回指定的值,否则返回原本的值

        select ifnull(commission_pct,0) from employees;

    12、【补充】isnull函数

        功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0

条件查询:

    语法:

        select 查询列表  from 表名  where 筛选条件

    1、简单条件运算符

        > < = <> != >= <=  <=>安全等于

    2、逻辑运算符

        && and

        || or

        !  not

    3、模糊查询

        like:一般搭配通配符使用,可以判断字符型或数值型

        通配符:%任意多个字符,_任意单个字符

        between and

        in

        is null /is not null:用于判断null值

排序查询:

    语法:

        select 查询列表  from 表  where 筛选条件  order by 排序列表 【asc|desc】

分组查询:

    语法:

        select 分组函数,分组后的字段  from 表 【where 筛选条件】 group by 分组的字段 【having 分组后的筛选】【order by 排序列表】

                使用关键字         筛选的表     位置

分组前筛选      where             原始表       group by的前面


分组后筛选      having            分组后的结果  group by 的后面

子查询:

    语法:

        select后面:

              仅仅支持标量子查询

        from后面:

              表子查询

        where或having后面:

              标量子查询

              列子查询

              行子查询

        exists后面:

              标量子查询

              列子查询

              行子查询

              表子查询

分页查询:

    语法:

        select 查询列表  from 表  limit 【offset,】size;

    注意:

        offset代表的是起始的条目索引,默认从0开始

        size代表的是显示的条目数

    分页公示:

        (page-1)*pageSize,pageSize*rows

联合查询:

    union:合并、联合,将多次查询结果合并成一个结果

    语法:

        查询语句1

            union 【all】

        查询语句2

            union 【all】

            ...

     union 去重,union all包含重复项

查询总结:

    select 查询列表    ⑦

    from 表1 别名       ①

    连接类型 join 表2   ②

    on 连接条件         ③

    where 筛选          ④

    group by 分组列表   ⑤

    having 筛选         ⑥

    order by排序列表    ⑧

    limit 起始条目索引,条目数;  ⑨

事务:

    一、含义

        事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行

    二、特点(ACID)

        A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行

        B 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态

        C 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离的

        D 持久性:一个事务一旦提交了,则永久的持久化到本地

     使用显式事务:

        ① 开启事务

            set autocommit=0;

            start transaction;#可以省略

        ② 编写一组逻辑sql语句

            注意:sql语句支持的是insert、update、delete

        设置回滚点:

            savepoint 回滚点名;

        ③结束事务

            提交:commit;

            回滚:rollback;

        回滚到指定的地方:rollback to 回滚点名;

视图:

    语法:

        create view 视图名  as  查询语句;

    好处:

        1、简化sql语句

        2、提高了sql的重用性

        3、保护基表的数据,提高了安全性

    修改

        方式一:

            create or replace view 视图名  as  查询语句;

        方式二:

            alter view 视图名  as  查询语句

    删除

            drop view 视图1,视图2,...;

    查看

            desc 视图名;

            show create view 视图名;

变量:

    语法:

        ①查看系统变量

            show 【global|session 】variables like ''; 如果没有显式声明global还是session,则默认是session

        ②查看指定的系统变量的值

            select @@【global|session】.变量名; 如果没有显式声明global还是session,则默认是session

        ③为系统变量赋值

            方式一:

                set 【global|session 】 变量名=值; 如果没有显式声明global还是session,则默认是session

            方式二:

                set @@global.变量名=值;

                set @@变量名=值;

存储过程:

    创建 ★

        create procedure 存储过程名(参数模式 参数名 参数类型)

        begin

              存储过程体

        end

    调用

        call 存储过程名(实参列表)

    查看

        show create procedure 存储过程名;

    删除

        drop procedure 存储过程名;

函数:

    创建

        create function 函数名(参数名 参数类型) returns  返回类型

        begin

               函数体

        end

     注意:函数体中肯定需要有return语句

    调用

        select 函数名(实参列表);

    查看

        show create function 函数名;

    删除

        drop function 函数名;

流程控制结构

    分支结构

    1、if函数

        功能:实现简单双分支

        语法:

            if(条件,值1,值2)

            位置:

            可以作为表达式放在任何位置

    2、case结构

        功能:实现多分支

        语法1:

            case 表达式或字段

            when 值1 then 语句1;

            when 值2 then 语句2;

            ..

            else 语句n;

            end [case];

        语法2:

            case

            when 条件1 then 语句1;

            when 条件2 then 语句2;

            ..

            else 语句n;

            end [case];

        位置:

            可以放在任何位置,

            如果放在begin end 外面,作为表达式结合着其他语句使用

            如果放在begin end 里面,一般作为独立的语句使用

    3、if结构

        功能:实现多分支

        语法:

            if 条件1 then 语句1;

            elseif 条件2 then 语句2;

            ...

            else 语句n;

            end if;

        位置:

            只能放在begin end中

    循环结构

        1、while

            语法:

                【名称:】while 循环条件 do

                          循环体

                  end while 【名称】;

        2、loop

            语法:

                【名称:】loop

                                  循环体

                  end loop 【名称】;

        3、repeat

            语法:

                【名称:】repeat

                                 循环体

                  until 结束条件

                  end repeat 【名称】;

        循环控制语句

            leave:类似于break,用于跳出所在的循环

            iterate:类似于continue,用于结束本次循环,继续下一次

猜你喜欢

转载自blog.csdn.net/Darryl_Tang/article/details/81582773