0%

数据库基础知识点

数据库基本概念

1.数据库 database 简称 db :用于存储和管理数据的仓库

2.特点

  1. 持久化存储数据,可以理解为一个文件系统。
  2. 方便管理和存储数据
  3. 操作方式统一

MySQL

  1. 安装

    参考 https://www.cnblogs.com/open-yang/p/11411112.html

  2. 卸载

    参考 https://blog.csdn.net/weixin_41792162/article/details/89921559

  3. 配置

    MySQL服务启动

    1. 手动。

    2. cmd–> services.msc 打开服务的窗口

    3. 使用管理员打开cmd

      net start mysql : 启动mysql的服务

      net stop mysql:关闭mysql服务

    MySQL登录

    1. mysql -uroot -p密码

    2. mysql -hip -uroot -p连接目标的密码

    3. mysql –host=ip –user=root –password=连接目标的密码

    MySQL退出

    1. exit

    2. quit

sql基本概念

1.什么是SQL?

Structured Query Language:结构化查询语言

其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为"方言"。

2.SQL通用语法

  1. SQL 语句可以单行或多行书写,以分号结尾。

  2. 可使用空格和缩进来增强语句的可读性。

  3. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

  4. 3 种注释

    单行注释: – 注释内容

    (#)注释内容(mysql 特有)

    多行注释: /* 注释 */

  1. SQL分类

    1) DDL(Data Definition Language)数据定义语言

    用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

    2) DML(Data Manipulation Language)数据操作语言

    用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

    3) DQL(Data Query Language)数据查询语言

    用来查询数据库中表的记录(数据)。关键字:select, where 等

    4) DCL(Data Control Language)数据控制语言(了解)

    用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

ddl(操作数据库对象)

  1. 操作数据库:CRUD

    1. C(Create):创建

    创建数据库:

    create database 数据库名称;

    创建数据库,判断不存在,再创建:

    create database if not exists 数据库名称;

    创建数据库,并指定字符集

    create database 数据库名称 character set 字符集名;

    1. R(Retrieve):查询

    查询所有数据库的名称:

    show databases;

    查询某个数据库的字符集:查询某个数据库的创建语句

    show create database 数据库名称;

    1. U(Update):修改

    修改数据库的字符集

    alter database 数据库名称 character set 字符集名称;

    1. D(Delete):删除

    删除数据库

    drop database 数据库名称;

    判断数据库存在,存在再删除

    * drop database if exists 数据库名称;

    1. 使用数据库

      查询当前正在使用的数据库名称

      select database();

    使用数据库

    use 数据库名称;

  2. 操作表

    1. C(Create):创建

    create table 表名(

    列名1 数据类型1,

    ….

    列名n 数据类型n

    );

    数据库特殊类型:

  3. date:日期,只包含年月日,yyyy-MM-dd

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

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

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

    1. R(Retrieve):查询

    查询某个数据库中所有的表名称

    show tables;

    查询表结构

    desc 表名;

    1. U(Update):修改

    2. 修改表名

    alter table 表名 rename to 新的表名;

    1. 修改表的字符集

    alter table 表名 character set 字符集名称;

    1. 添加一列

    alter table 表名 add 列名 数据类型;

    1. 修改列名称 类型

    alter table 表名 change 列名 新列别 新数据类型;

    alter table 表名 modify 列名 新数据类型;

    1. 删除列

    alter table 表名 drop 列名;

    1. D(Delete):删除

    drop table 表名;

    drop table if exists 表名 ;

三种删除方式对比:

1.delete

delete from Student where [条件]

可以按照条件清除数据

只限于清除数据,表的定义、设置都不会清除

2.truncate

truncate table Student

清空表内的所有数据,没有条件

相当于将当前表初始化,恢复到刚创建的状态

3.drop

drop table Student

清除关于当前表的所有信息,表不再存在

truncate与delete特点总结

  1. truncate删除后,如果再插入,标识列从1开始 delete删除后,如果再插入,标识列从断点开始
  2. delete可以添加筛选条件 truncate不可以添加筛选条件
  3. truncate效率较高
  4. truncate没有返回值 delete可以返回受影响的行数
  5. truncate不可以回滚 delete可以回滚

dml(表的处理)

  1. 添加数据:

    insert into 表名(列名1,列名2,…列名n) values(值1,值2,…值n);

    1. 列名和值要一一对应。

    2. 如果表名后,不定义列名,则默认给所有列添加值

      insert into 表名 values(值1,值2,...值n);
    3. 除了数字类型,其他类型需要使用引号(单双都可以)引起来

  2. 删除数据:

    delete from 表名 [where 条件]

    1. 如果不加条件,则删除表中所有记录。

    2. 如果要删除所有记录

      1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
      
      2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
  3. 修改数据:

    update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

    如果不加任何条件,则会将表中所有记录全部修改。

dql(数据查询语句)

select * from 表名;

语法:

  1. select 字段列表

  2. from 表名列表

  3. where 条件列表

  4. group by 分组字段

  5. having 分组之后的条件

  6. order by 排序

  7. limit 分页限定

  8. 基础查询

    1. 多个字段的查询

    select 字段名1,字段名2… from 表名;

    1. 去除重复: distinct

    2. 计算列

    一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)

    ifnull(表达式1,表达式2):null参与的运算,计算结果都为null

    表达式1:哪个字段需要判断是否为null

    如果该字段为null后的替换值。

    1. 起别名:

    as:as也可以省略

  9. 条件查询

    1. where子句后跟条件

    2. 运算符

    > 、< 、<= 、>= 、= 、<>

    BETWEEN…AND

    IN( 集合)

    LIKE:模糊查询

    IS NULL

    and 或 &&

    or 或 ||

    not 或 !

常见条件查询拓展

where

使用where子句对表中的数据筛选,结果为true的行会出现在结果集中

语法如下:

select * from 表名 where 条件;

比较运算符

  1. 等于 =
  2. 大于 >
  3. 大于等于 >=
  4. 小于 <
  5. 小于等于 <=
  6. 不等于 !=或 <>
    1
    2
    3
    4
    5
    6
    7
    8
    查询编号大于3的学生
    select \* from students where id\>3;
    查询编号不大于4的科目
    select \* from subjects where id\<=4;
    查询姓名不是"黄蓉"的学生
    select \* from students where sname!='黄蓉';
    查询没被删除的学生
    select \* from students where isdelete=0;

逻辑运算符

  1. and
  2. or
  3. not
    1
    2
    3
    4
    查询编号大于3的女同学
    select \* from students where id\>3 and gender=0;
    查询编号小于4或没被删除的学生
    select \* from students where id\<4 or isdelete=0;

模糊查询

like

  1. %表示任意多个任意字符
  2. _表示一个任意字符

查询姓黄的学生
select * from students where sname like '黄%';
查询姓黄并且名字是一个字的学生
select * from students where sname like '黄_';
查询姓黄或叫靖的学生
select * from students where sname like '黄%' or sname like '%靖%';

范围查询

  1. in表示在一个非连续的范围内
  2. between … and …表示在一个连续的范围内
    1
    2
    3
    4
    5
    6
    查询编号是138的学生
    select \* from students where id in(1,3,8);
    查询学生是38的学生
    select \* from students where id between 3 and 8;
    查询学生是38的男生
    select \* from students where id between 3 and 8 and gender=1;

空判断

null与''"是不同的

判空is null

1
2
3
4
5
6
7
查询没有填写地址的学生
select \* from students where hometown is null;
判非空is not null
查询填写了地址的学生
select \* from students where hometown is not null;
查询填写了地址的女生
select \* from students where hometown is not null and gender=0;

常见判空对比:

  1. isnull(expr):如果expr为null,则返回1,否则返回0
  2. ifnull(expr1, expr2):根isnull类似,expr1不为null的情况下,返回expr1,返回expr2
  3. nullif(expr1, expr2):nullif和ifnull完全不同,它表示如果两个表达式相同,则返回null,否则 返回expr1的值。
  4. coalesce(expr1, expr2,… exprN):发音是core or less,英文的意思是联合/合并,在mysql中的用途是返回第一个不是null的值,只有两个参数的情况下,相当于ifnull。

优先级

小括号,not,比较运算符,逻辑运算符

and比or先运算,如果同时出现并希望先算or,需要结合()使用

mysql常见整型比较

类型 tinyint smallint mediumint int/integer bigint
字节数 1 2 3 4 8

特点:

  1. 都可以设置无符号和有符号,默认有符号,通过unsigned设置无符号
  2. 如果超出了范围,会报out or range异常,插入临界值
  3. 长度可以不指定,默认会有一个长度代表显示的最大宽度,如果不够则左边用0填充,但需要搭配zerofill,并且默认变为无符号整型

原文链接

-------------本文结束元宝感谢您的阅读-------------