数据库基础入门

目录

数据库相关概念

运用数据库的好处和特点

那么数据库存储数据的特点是什么呢?

MySQL服务的启动和停止

MySQL服务的登录和退出

DQL语言

排序查询

常见函数

分组函数

分组查询

多表连接查询

外连接

子查询

分页查询

联合查询

DML语言

插入

方式一

方式二

区别

修改

删除

delete删除和truncate删除区别

DDL语言

数据库操作

数据表操作

MySQL常用数据类型

约束


数据库相关概念

DB:数据库,保存一组有组织的数据的容器。

DBMS:数据库管理系统,又称为数据库软件,用于管理DB中的数据。

SQL:结构化查询语句,用于和DBMS通信的语音。

运用数据库的好处和特点

运用数据库可以持久化数据到本地,还可以实现结构化查询,方便管理。并且数据库开源,免费,成本低;性能高,移植性强;体积小,便于安装;是一款属于c/s架构的软件。

那么数据库存储数据的特点是什么呢?

1.数据存放到表中,再放到库中。

2.一个库中可以有多张表,每张表具有唯一性来标识自己。

3.表中有一个或多个列,列又称为字段。

4.表中的每一行数据,相当于java中的对象。

MySQL服务的启动和停止

方式一:计算机——右击管理——服务——MySQL ​ 方式二:通过管理员身份运行cmd命令提示行 ​ net start mysql(启动服务) ​ net stop mysql(停止服务)

MySQL服务的登录和退出

方式一:通过MySQL自带的客户端 ​ 只限于root用户

方式二:通过cmd命令提示行关闭,未配置MySQL环境变量,需在MySQL安装的bin下启动cmd

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

退出: ​ exit或ctrl+C

DQL语言

排序查询

* 语法:
    select
                要查询的东西
    from
                表
    where 
                条件
    order by 排序的字段|表达式|函数|别名 【asc|desc】
* 排序方式:
    * ASC:升序,默认的
    * DESC:降序
*排序分类:
    1.按单个字段进行排序
    2.按多个字段排序
    3.按表达式排序
    4.按别名排序
    5.按函数排序
* 注意:
    * 如果有多个排序条件,则当之前的条件值一样时,才会判断第二条件

常见函数

1、字符函数
    concat: 拼接
    substr: 截取子串
    upper: 转换成大写
    lower: 转换成小写
    trim: 去前后指定的空格和字符
    ltrim: 去左边空格
    rtrim: 去右边空格
    replace: 替换
    lpad: 左填充
    rpad: 右填充
    instr: 返回子串第一次出现的索引
    length: 获取字节个数    
2、数学函数
    round: 四舍五入
    rand: 随机数
    floor: 向下取整
    ceil: 向上取整
    mod: 取余
    truncate: 截断
3、日期函数
    now: 当前系统日期+时间
    curdate: 当前系统日期
    curtime: 当前系统时间
    str_to_date: 将字符转换成日期
    date_format: 将日期转换成字符
4、流程控制函数
    if 处理双分支
    case语句 处理多分支
        情况1:处理等值判断
        情况2:处理条件判断
5、其他函数
    version: 版本
    database: 当前库
    user: 当前连接用户

分组函数

* count:计算个数
    * 一般选择非空的列:主键
    * count(*)
* max:计算最大值
* min:计算最小值
* sum:计算和
* avg:计算平均值
* 特点:
    1、以上五个分组函数都忽略null值,除了 count(*)
    2、sum和avg一般用于处理数值型,max、min、count可以处理任何数据类型
    3、都可以搭配distinct使用,用于统计去重后的结果
    4、count的参数可以支持:
        * 字段、*、常量值,一般放1
* 注意:聚合函数的计算,排除null值。
    解决方案:
        * 选择不包含非空的列进行计算
        * IFNULL函数

分组查询

* 语法:
    select 查询的字段,分组函数
    from 表
    group by 分组的字段
* 特点:
    1、可以按单个字段分组
    2、和分组函数一同查询的字段最好是分组后的字段
    3、可以按多个字段分组,字段之间用逗号隔开
    4、可以支持排序
    5、having后可以支持别名
* 面试相关
    * where 和 having 的区别?
        1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不                满足结果,则不会被查询出来
        2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

在进行连接查询的时候可以先看看这张图,这张图可以让我们了解的更加直面。

  数据库基础入门_第1张图片

 

多表连接查询

1.笛卡尔集
    * 产生条件:
        1. 省略连接条件
        2. 连接条件无效
        3. 所有表中所有行互相连接
    * 解决方案:
        添加有效筛选条件

3. 内连接
    * SQL92语法:
        SELECT 查询列表
        FROM 表名1 别名1 ,表名2 别名2 
        WHERE 连接条件                 
        AND 筛选条件                
        GROUP BY 分组列表            
        HAVING 分组后筛选条件          
        ORDER BY 排序列表    
    * SQL99语法:
        select 字段列表 
        from 表名1 
        [inner] join 表名2 on 条件
        where 筛选条件
        group by 分组条件
        having 分组后的筛选条件
        order by 排序字段
* 注意:
    1. 使用表名前缀在多个表中区分相同的列
    2. 在不同表中具有相同列名的列可以用表的别名加以区分
    3. 如果使用了表别名,则在select语句中需要使用表别名代替表名
    4. 表别名最多支持32个字符长度,但建议越少越好

外连接

左外连接
    * 语法:
        select 字段列表 
        from 表1 
        left [outer] join 表2 on 条件
        ...
    * 注意:
        左外连接查询的是左表所有数据以及其交集部分

右外连接
    * 语法:
        select 字段列表 
        from 表1 
        right [outer] join 表2 on 条件
        ...
    * 注意:
        右外连接查询的是右表所有数据以及其交集部分    

子查询

概念:查询中嵌套查询,称嵌套查询为子查询
特点:
    1、子查询都放在小括号内
    2、子查询可以放在from后面、select后面、where后面、having后面,但一般放在条件的右侧
    3、子查询优先于主查询执行,主查询使用了子查询的执行结果
    4、子查询根据查询结果的行数不同分为以下两类:
        ① 单行子查询
            结果集只有一行
            一般搭配单行操作符使用:> < = <> >= <= 
            非法使用子查询的情况:
                   a、子查询的结果为一组值
                b、子查询的结果为空
           ② 多行子查询
            结果集有多行
            一般搭配多行操作符使用:any、all、in、not in
            in: 属于子查询结果中的任意一个就行
            any和all往往可以用其他查询代替

分页查询

语法:
    select 字段|表达式,...
    from 表
    where 条件
    group by 分组字段
    having 条件
    order by 排序的字段
    limit 起始的条目索引,条目数;
示例:每页显示3条记录
        * SELECT * FROM student LIMIT 0,3; -- 第1页
        
        * SELECT * FROM student LIMIT 3,3; -- 第2页
        
        * SELECT * FROM student LIMIT 6,3; -- 第3页
特点:
    1.起始条目索引从0开始

    2.limit子句放在查询语句的最后

    3.公式:select * from  表 limit (page-1)*sizePerPage,sizePerPage
    假如:
        每页显示条目数sizePerPage
        要显示的页数 page

联合查询

* 语法:
    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    select 字段|常量|表达式|函数 from 表 where 条件 union 【all】
    .....
    select 字段|常量|表达式|函数 from 表 where 条件
* 特点:
    1、多条查询语句的查询的列数必须是一致的
    2、多条查询语句的查询的列的类型几乎相同
    3、union代表去重,union all代表不去重

DML语言

插入

方式一

语法:

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

特点:

1.要求值的类型和字段的类型要一致或兼容

2.字段的个数和顺序不一定于原始表中的字段个数和顺序一致,但必须保证值和字段一一对应

3.假如表中有可以为null的字段,注意可以通过以下两种方式插入null值。

4.字段和值的个数必须一致

5.字段名可以省略,默认所有列

方式二

语法:

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

区别

方式一支持一次插入多行。如:insert into 表名(字段名,。。)values(值,。。。),(值,。。。);

方式一支持子查询。如:insert into 表名 查询语句;

修改

修改单表的记录:update 表名 set 字段=值,字段=值【where 筛选条件】;

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

删除

删除单表的记录:delete from 表名【where 筛选条件】

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

使用truncate删除:truncate table 表名

delete删除和truncate删除区别

1.truncate删除后,如果再插入,标识列从1开始;delete 删除后,如果再插入,标识列从断点开始。

2.delete 可以添加筛选条件;truncate不可以添加筛选条件。

3.truncate 效率极高。

4.truncate 没有返回值,delete可以返回影响的行数。

5.truncate不可以回滚,delete可以回滚。

DDL语言

数据库操作

* 创建数据库:
    * create database 数据库名称;
* 创建数据库,判断不存在,再创建:
    * create database if not exists 数据库名称;
* 创建数据库,并指定字符集
    * create database 数据库名称 character set 字符集名;
-------------------------------------------------------------------------    
* 查询所有数据库的名称:
    * show databases;
* 查询某个数据库的字符集:查询某个数据库的创建语句
    * show create database 数据库名称;
-------------------------------------------------------------------------    
*修改数据库的字符集
    * alter database 数据库名称 character set 字符集名称;
-------------------------------------------------------------------------    
* 删除数据库
    * drop database 数据库名称;
* 判断数据库存在,存在再删除
    * drop database if exists 数据库名称;
-------------------------------------------------------------------------    
* 查询当前正在使用的数据库名称
    * select database();
* 使用数据库
    * use 数据库名称;

数据表操作

* 表的创建
    * create table 表名(
                列名1 数据类型1 【字段约束】,
                列名2 数据类型2 【字段约束】,
                ....
                列名n 数据类型n 【字段约束】
            );
    * 注意:最后一列,不需要加逗号(,)
-------------------------------------------------------------------------    
* 查询当前数据库中所有的表
    * show tables;
* 查询某个数据库中所有的表
    * show tables from 数据库名称;
* 查询表结构
    * desc 表名;
-------------------------------------------------------------------------
* 修改表名
    * alter table 表名 rename to 新的表名;
* 修改表的字符集
    * alter table 表名 character set 字符集名称;
* 添加一列
    * alter table 表名 add 列名 数据类型;
* 修改列名称 类型
    * alter table 表名 change 列名 新列别 新数据类型;
    * alter table 表名 modify 列名 新数据类型;
* 删除列
    * alter table 表名 drop 列名;
-------------------------------------------------------------------------
* 删除表
    * drop table 表名;
    * drop table  if exists 表名;

MySQL常用数据类型

1.int:整数类型

    age int,
    
2. double:小数类型

   score double(5,2),
   
3. date:日期,只包含年月日,yyyy-MM-dd

4. datetime:日期,包含年月日时分秒     yyyy-MM-dd HH:mm:ss

5. timestamp:时间错类型    包含年月日时分秒     yyyy-MM-dd HH:mm:ss    

      如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

6. varchar:字符串

     name varchar(20):姓名最大20个字符

     zhangsan 8个字符  张三 2个字符

约束

* 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。    
* 分类:
    1. 主键约束:primary key
    2. 非空约束:not null
    3. 唯一约束:unique
    4. 外键约束:foreign key
-------------------------------------------------------------------------
* 非空约束:not null,某一列的值不能为null
    1. 创建表时添加约束
        CREATE TABLE stu(
            id INT,
            NAME VARCHAR(20) NOT NULL -- name为非空
        );
    2. 创建表完后,添加非空约束
        ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;

    3. 删除name的非空约束
        ALTER TABLE stu MODIFY NAME VARCHAR(20);
-------------------------------------------------------------------------
* 唯一约束:unique,某一列的值不能重复
    1. 注意:
        * 唯一约束可以有NULL值,但是只能有一条记录为null
    2. 在创建表时,添加唯一约束
        CREATE TABLE stu(
            id INT,
            phone_number VARCHAR(20) UNIQUE -- 手机号
        );
    3. 删除唯一约束
        ALTER TABLE stu DROP INDEX phone_number;
    4. 在表创建完后,添加唯一约束
        ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
-------------------------------------------------------------------------    
* 主键约束:primary key。
    1. 注意:
        1. 含义:非空且唯一
        2. 一张表只能有一个字段为主键
        3. 主键就是表中记录的唯一标识

    2. 在创建表时,添加主键约束
        create table stu(
            id int primary key,-- 给id添加主键约束
            name varchar(20)
        );

    3. 删除主键
        -- 错误 alter table stu modify id int ;
        ALTER TABLE stu DROP PRIMARY KEY;

    4. 创建完表后,添加主键
        ALTER TABLE stu MODIFY id INT PRIMARY KEY;

    5. 自动增长:
        1.  概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长

        2. 在创建表时,添加主键约束,并且完成主键自增长
        create table stu(
            id int primary key auto_increment,-- 给id添加主键约束
            name varchar(20)
        );
        3. 删除自动增长
            ALTER TABLE stu MODIFY id INT;
        4. 添加自动增长
            ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
-------------------------------------------------------------------------
* 外键约束:foreign key,让表于表产生关系,从而保证数据的正确性。
    1. 在创建表时,可以添加外键
        * 语法:
            create table 表名(
                ....
                外键列
                constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
            );

    2. 删除外键
        ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

    3. 创建表之后,添加外键
        ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
    4. 级联操作
            1. 添加级联操作
                语法:ALTER TABLE 表名 ADD CONSTRAINT 外键名称 
                        FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE  ;
            2. 分类:
                1. 级联更新:ON UPDATE CASCADE 
                2. 级联删除:ON DELETE CASCADE 

你可能感兴趣的:(java,数据库开发)