MySQL基础知识及其基本相关操作

本文介绍了数据库的基本作用,包括存储大量数据、确保数据完整性、安全与共享,以及数据分析。数据库经历了层次模型、网状模型到关系模型的发展,关系模型以表格形式存储数据。SQL作为结构化查询语言,包括DDL、DQL、DML和DCL四个部分,用于数据库的管理和操作。此外,文章还讨论了数据库的完整性规则,如实体完整性、域完整性和引用完整性。
摘要由CSDN通过智能技术生成

# 为什么用数据库?

  1. 数据可以存在哪里?

    浏览器上,内存(变量-数组,临时存储),硬盘,网盘,手抄,光盘

  2. 数据永久化?

    硬盘,网盘,光盘---以文件的形式

    word , excel , ppt , xml  //数据量小的时候

    数据库实现数据永久化(还是一种文件)  //数据量大的时候

  数据库的作用

  1. 可以存储大量的数据,可以对其进行访问,检索(管理数据)

  2. 保证数据的完整性(稳定性 + 正确性)

  3. 安全与共享

  4. 可以对数据进行重新分析,产生新的数据(数据分析,数据挖掘)

# 什么是数据库

    存储的数据的"仓库"

# 数据库发展历程

  1. 层次模型

  2. 网状模型

  3. 关系模型

    以表格为单位,进行数据存储

   

    表:一类实体对象的集合

        行:实体,记录

        列:属性,字段

    关系:

        1   ——   N      一对多

        N   ——   1      多对一

        N   ——   N      多对多


 

  4. 对象模型(mongoDB)

# 关系型数据库

    sql server, oracle, mysql, db2, access等

    数据库管理系统(DataBase Manage System: DBMS)

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

    SQL 语句:

    四部分:

        DDL(Data Define Language): 数据定义语言

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

        DML(Data Manage Language): 数据管理语言(添、删、改数据)

        DCL(Data Control Language): 数据控制语言(设置权限、用户管理)

        职位:DBA(database Administor)

    DDL 数据定义语言

    1. 创建数据库

    语法:

        create database 数据库名;

        命名规则︰

            1.第一个字符必须是下列字符之一:

                a-z和A-Z,

                下划线(_)、at符号(@)或者数字符号(#)。

            2.后续字符可以是

                at符号(@)、美元符号($)、数字符号或下划线,字母。

            3.标识符不能是所用RDBMS的保留字。

                不允许嵌入空格或其它特殊字符

        使用数据库

           use 数据库名

        删除数据库

           drop database 数据库名

    2.创建表

        create table表名(列名 列的数据类型(列的约束), ... );

       

        数据类型有哪些

            数字            大小

                int         4字节

                float       单浮点,4字节

                double      双精度,8字节

                decimal     总位数,小数点后的位数,17字节

                    注:总位数必须大于小数点后的位数


 

            字符串

                char : 固定字符,固定字符长度

               

                varchar : 可变字符,随内容长度变化

                text : 长文本(不用指定长度)

                nchar

                nvarchar

                ntext

                n: 只Unicode编码,可显示中文

           

            日期

                date

                datetime

                timestamp 时间戳 timestamp

                ...


 

       列的规则:实现数据的完整性

        完整性 = 可靠性 + 正确性

        1. 实体完整性   主键约束,唯一约束,标识列

            -- 保证行的有效性

       

            主键约束:primary key,表中主键列不能重复且不为空

            唯一约束:unique key,设置唯一约束不能重复,可为空

            列标识:自增列没有重复值

        2. 域完整性

            -- 保证列的有效性

                非空约束Not Null

                默认约束:Default

                check约束

        3. 引用完整性

             -- 引用数据的完整性

           

        4. 外键

            外键:外键是指从表的某列与主表的某列存在依附关系,此关系是设计这两张表时根据业务而建立的,但是此关系并没有强制性依赖。

            外键约束:是指在外键关联主键上强制加上一个约束,如果违反该约束,则不允许该条数据的修改

        语法:

            constraint foreign key(列名) references 主表(主表列名)

        5. 自定义完整性

            存储过程

       

        删除表

        drop table 表名

            --有外键关系时不能删除

        复制表

        create table new select * from old  // 复制旧表的结构与数据,不复制约束

        create table new select * from old where 1=0 // 复制旧表的结构,不复制数据与约束


 

        修改表

        -添加列

            alert table 表名 add phone char(11) unique

        -修改列

            alert table 表名 change phone mobile char(11) unique

        -删除列

            alert table 表名 drop column mobile


 

    DML: 数据操作语言(添加、修改、删除)

    添加

    语法:

        insert into 表名(表中各列名) values (对应列的值)

        // 字符给值要加单引号,自增列用null,默认值用default

        // 表名后加括号,可选其中部分列赋值,不加括号需要给每个字段值

        INSERT INTO student (stuNo, stuName, state,classId) VALUES ('007', 'zhangsan' , 1,1);

    多行添加

        insert into 表名(表中各列名) values (对应列的值),(对应列的值),(对应列的值)...;

        INSERT INTO student (stuNo, stuName, state,classId) VALUES ('007', 'zhangsan' , 1,1),

        ('008', 'lisi' , 1,1),

        ('009', 'wangwu' , 1,1),

        ('010', 'zhaoliu' , 1,1)

        ;


 

    更新:

        update 表名 set 列名=值 where 条件(如:列名1=值 and 列名2=值);

   

    删除:

        delete from 表名 where 条件

        truncate table 表名     //用于删除所有表数据

        区别:

        delete 可以有条件,删除数据后能恢复(有日志文件),效率低,自增列不会重置;

        truncate 只能删除整个数据,删除后数据不能恢复,效率高,可以重置自增列;

    DQL: 数据查询语言

    # MYSQL 查询?

    从表中查找需要的数据

    # 查询原理

        表中全部遍历,根据条件查询相应的数据,投影需要的数据。

   

    语法:

        查询全部

        select * from 表名

        查询部分字段

        select 字段1,字段2,... from 表名

        查询并重命名列

        SELECT stuNo AS No,stuName AS NAME,... FROM 表名

        查询表的部分操作方法

        (1)concat(str1,str2...)  //拼接字符串

        例:

            SELECT CONCAT(stuName,' hahah') FROM student

        (2)distinct //去重

            SELECT DISTINCT classld, age FROM student

            // 判断满足classId 和 age 都存在重复时进行去重操作

        (3)limit  //返回指定的行数

        limit 开始行数,返回的数量--开始的行数从0开始

        例:

            SELECT * FROM student LIMIT 0,2

        (4)排序 order by

        order by 列名 asc(升序,默认)/desc(降序)

        例:

            SELECT * FROM student ORDER BY age DESC

            SELECT * FROM student ORDER BY age DESC id ASC

            // 先按年龄降序排列,有相同值的再按id升序排列

        (5)模糊查询 like

        通配符:

            %: 0个或多个    任意字符

            _: 1个          任意字符

        (6)范围 between 开始值 and 结束值

        注:开始值小于或者等于结束值;但是如果大于了也不报错,只是没有数据

            SELECT*FROM student WHERE age >=20 AND age <=17

            SELECT* FROM student WHERE age BETWEEN 20 AND 17

        (7)聚合函数,特点:返回单行单列,不统计为Null的值

        求和 sum(列名)

        求平均 avg()

        求最大 max()

        求最小 min()

        数量 count(列名)

        (8)group by 分组统一

        例:

            select classID from student group by classID

            select count(1),classID from student group by classID

            // 与count()合用可获取各分组的数量

        执行顺序

        from - where - select - group by - having - order by - limit

        (9)join 连接

        --内连接,显示两表共有的部分记录

        select 查询的内容 from 表1 join 表2 on 连接条件

        例:

            SELECT student.*,class.className FROM student JOIN class ON student.classId = class.classId

       

        --外连接

            -left join

            -right join

        例:

            select * from A left join B on A.aid = B.bid;

            // 显示A表全部记录的情况下,将符合条件的B表中的记录连接到右边,如未在B表中找到记录则字段显示null;

            select * from A right join B on A.aid = B.bid;

            // 显示B表全部记录的情况下,将符合条件的A表中的记录连接到右边,如未在A表中找到记录则字段显示null;

       

    条件查询时使用的符号,关系运算符: >,< ,>=,<=,= ,!= ,>,要求,只为单个值

    条件范围:

        查询id =1 和id = 4 的学生信息-- in/not // in可以是多个值

       

        // in中的值,是或者关系

        SELECT * FROM student WHERE id IN (1,4)

       

        SELECT * FROM student WHERE id NOT IN(1,4)

    子查询

        ·select中的子查询

        例:

        select *,(select className from class where classId = student.classId) as className from student

        // 主查询一行记录,子查询需要遍历一遍,性能低,慎用

        ·from中的子查询(返回多行多列)

        例:

            SELECT * FROM

            (SELECT * FROM student WHERE sex ='女’) AS temp

            WHERE age = 17

        ·where中的子查询

        select * from student where classId = (select classId from class where className = "web");

# 三大范式

    1NF:保证原子性(行不重复,列不再分)

    2NF:满足1NF,且所有非主键列,完全依赖主键列

    3NF:满足2NF,且每列与主键有直接关系,没有间接关系

内容未详细整理,有误的地方欢迎大佬们指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值