MySQL学习笔记1

 

数据库的基本概念

    数据库(DataBase):简称DB,用于存储和管理数据的仓库,我们使用了统一的方式操作数据库------SQL

MySQL的安装、卸载、配置

1、安装…

2、卸载:注意卸载完了看一下C/ProgramData目录下MySQL文件夹,这个也要删去。//这个文件夹可能隐藏起来,需要将隐藏目录显示

3、配置:服务启动 :两种方法    ① cmd—>services.msc打开服务窗口,找到MySQL启动

                                                      ② 使用管理员权限打开cmd :启动MySQL就输入net start mysql
                                                                                                      关闭就输入net stop mysql

                 环境变量的配置......(省略)

                 MySQL的登录 :mysql -uroot -p密码          // 这里的密码是自己设置的链接目标的密码

                 MySQL的退出: 输入exit或quit都可以。

                 

SQL

    1、什么是sql? Structured Query Language(结构化查询语言)

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

 

    2、通用语法:以分号结尾,不区分大小写,关键字建议使用大写表示。

        单行注释:以“-- ”开头或者‘#’开头,--后面有个空格,#号后面可有可无空格。

        多行注释:/*      */和Java一样。

    3、SQL的分类:

             DDL (操作数据库和表)    关键字:create,drop,alter等。

             DML (对数据进行增删改)    关键字:insert,delete,update等。

             DQL (查询数据的记录)    关键字:select,where等。

             DCL (定义权限)    关键字:GRANT,REVOKE等。

 

DDL:操作数据库,表

    1、操作数据库:CRUD

            ① C (create) :创建

                                         1、创建一个数据库:create database 数据库名称;

                                         2、创建一个数据库,如果存在就不创建,不存在就创建:create database if  exists 数据库名称;

                                         3、创建数据库并指定字符集:create database 数据库名称 character set 字符集名;

                                         4、练习一下:创建数据库db2,判断是否存在,并将字符集设置为gbk;

                                                               create database if  exists db2 character set gbk;

            ② R(retrieve):查询

                                         查询所有数据库的名称:show databases;

                                         查询某个数据库的字符集:其实是查询某个数据库的创建语句:show create database 数据库名称;

            ③U(Update ):修改

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

            ④D(Delete)  :删除

                                        删除数据库:drop database 数据库名称;

                                        判断是否存在,存在就删除,不存在就不删除:Drop Database if exists 数据库名称;

            ⑤使用数据库:查询当前使用的数据库:select database();

                                    使用数据库:use 数据库名称;

 

    2、操作表:CRUD

            ① C (create) :创建

                                        1、语法:create table 表名(

                                                列名1  数据类型1,

                                                列名2  数据类型2,

                                                ......

                                                列名n  数据类型n                //注意最后一列数据不要逗号;

                                        );

                                        数据类型:int:    整数类型

                                                        double:小数类型

                                                        data:日期,只包含年月日    yyyy-MM-dd

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

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

                                                                 datatime和timestamp的区别在哪里呢?

                                                                 当某一天我们又对某一条数据进行修改,那么timestamp的时间就会自动更新为当时的时间。

                                                    varchar:字符串

                                                                    name  varchar(10)    10的含义是姓名最大为10个字符串。

                                     复制表:create table 表名 like 被复制的表名;                                                                         

            ② R(retrieve):查询

                                        查询某个数据库中所有表的名称:show tables;

                                        查询表的结构:desc 表名;          //desc(description的缩写,描述的意思)

            ③U(Update ):修改

                                         1、修改表名

                                                 alter table 表名 rename to 新表名;

                                         2、修改表的字符集

                                                 alter table 表名 character set 新字符类型;

                                         3、添加一列

                                                 alter table 表名 add 列名 列的类型;

                                         4、修改列名称、类型

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

                                                 直接修改类型:alter table 表名 modify 列名 新数据类型;

                                         5、删除列

                                                 alter table 表名 drop 列名;

                                      

            ④D(Delete)  :删除

                                        drop table 表名;

                                        drop table if exists 表名;

 

 

客户端图形化工具:SQLyog下载

                              https://www.jianshu.com/p/46ea86e099d2

                              如果连接时遇到 错误码2058,请看:https://jingyan.baidu.com/article/7908e85cda0de1af481ad22c.html

 

DML:增删改表中数据

            1、添加数据:

                     语法:insert into 表名(列名1,列名2...列名n) values(值1,值2,值n);

                     注意:列名和值要一一对应,如果不定义列名,则默认给所有列添加值。

                               除了数字,其他类型的值都要用引号引起来(单引号或者双引号都可以)。

                               如果有不想赋值的就赋null。

            2、删除数据:

                     语法:delete from 表名 where 某一个自定义的条件;

                     注意:如果不加条件,就把表中所有记录都删除。(不建议使用,效率低)。

                               如果要删除所有数据,可以使用truncate table 表名;(建议使用,效率高)。

                     

            3、修改数据:

                     语法:update 表名 set 列名1 = 值1 , 列名2 = 值2 , 列名3 = 值3 , ......where 某个条件;

                     注意:如果不加where条件,会把表中的所有数据全部修改。

 

DQL:查询语句

现在有这么一个表,方便举例:

   1、 语法:

        select

             字段列表

        from

            表名列表

        where

            条件列表

        group by

            分组字段

        having

            分组之后的字段

        oder by

            排序

        limit

            分页限定

    2、基础查询

        查询所有字段:可以用 * 号,也可以一个一个打出来

                select * from 表名;

        查询某几个字段:

                select name,age from 表名;

        去除重复的字段:distinct

                select distinct 列名 from 表名;        //这儿如果有多个字段,那么只有当这些字段全部相等的时候才去重。

        将两列的结果相加:如果有一个值为null,那么所加的结果就为null,这时候就需要用ifnull语句

            ifnull(列名,被替换的值) 。如果某个字段的名称有点长了,或者不适合了,我们可以起别名,用as来起,也可以用空格。

            math + ifnull(english,0) as 总分  或者math + ifnull(english,0)  总分

 

    3、条件查询:

        1、where子句后跟条件

        2、运算符

                >、<、>=、<=、=、<>、!=            //在SQL中等于用一个等号表示,不等号可以用!=或<>都可以。

        between and;             例:where age between 20 and 30;

        &&可以写为and

        ||可以写成or        where age = 18 or age = 19 or age = 20;    也可以写为where age in (18,19,20);

        注意null值不能用等号不等号之类来判断用is null来判断,如果判断不是null可以写为is not null;

        

        like 模糊查询

            占位符:_ 占一个字符,% 任意多个字符。

                例如:查询姓马的 :select * from 表名 where name like '马%';

                          查询包含马的:select * from 表名 where name like '%马%';

                          查询第二个字为化的:select * from 表名 where name = '_化%';

                     

        1、排序查询:

            ① 语法:order by 子句

                           select * from 表名 order by 排序字段1  排序方式1,排序字段2  排序方式2......;

            ② 排序方式:

                    ASC:升序(默认)

                    DESC: 降序

            注意 :如果有多个排序条件,那么当前面的排序条件值一样时才会判断第二个排序条件。

        2、聚合函数:将一列数据作为一个整体,进行纵向的计算。

             ① count 计算个数

                         举个例子:select count(要计算的那列名称) from 所在的表;

                         注意:聚合函数的计算,排除null值。

                         这里如果让它不排除null值,可以有下面这几种写法:

                             1、select count(ifnull(要查找的那列名称,0)) from 所在的表;

                                  意思是将某一列的null换成0来计算那列的个数,但是被计算的那列的本身null值不变。

                             2、select count(*) from 所在的表;

                                  这个意思是这个表中的所有列,只要有一行不为空,就按不为空计算。

                             3、使用主键那一列来查找。

             ② max 计算最大值

                         select max(要计算的那一列) from 所在的表;

             ③ min 计算最小值

                         select min(要计算的那一列) from 所在的表;

             ④ sum 计算和

                         select sum(要计算的那一列) from 所在的表;

             ⑤ avg 计算平均值

                         select avg(要计算的那一列) from 所在的表;


             

            3、分组查询:

              1、语法:group by 分组字段;

               用上图举例:select sex ,avg(math),count(id)  from 表名 group by sex;

               

 

 

               如果想在分组之前进行一次筛选操作,可以增加一些条件where 例如:

               select sex ,avg(math),count(id)  from 表名 where math > 70 group by sex;

               

               

 

               如果对于显示出的数据,再做某些删选,比如分组之后只显示人数大于2的,可以添加having 例如:

               select sex ,avg(math),count(id)  from 表名 where math > 70 group by sex having count(id) > 2;

               

               

               

               where和having的区别:

                       where:在分组前进行限定

                       having:在分组之后进行限定,如果不满足结果,就不会被查询出来。

                       where后不能跟聚合函数,having可以跟聚合函数

        4、分页查询:

        1、语法:limit 开始的索引,每页查询的条数:

                        开始的索引 = (当前页码 - 1) * 每页显示的条数;

                        举个例子:select * from 表名 limit 0,3; -- 第一页

         2、limit是MySQL的方言,用来分页的。

 

 

    约束:

        概念:对表中的数据进行限制,保证数据的正确性,有效性和完整性。

        分类:

            1、主键约束:primary key

            2、非空约束:not null

            3、唯一约束:unique

            4、外键约束:foreign key

       

          非空约束:not null

                创建表时添加约束:

                        create table student(

                               id int,

                               name varchar(20)   not null//后面加了一句 not null,这时候如果再添加数据name的时候就不可以添加为null了。

                         );

                         删除非空约束:就是修改所要修改的数据的字段,alter table student modify name varchar(20);

             创建表后添加非空约束:修改索要修改的数据字段,alter table student modify name varchar(20) not null;

          唯一约束:unique

                创建唯一约束

                        create table student(

                               id int,

                               name varchar(20) unique   //添加唯一约束,注意null值可以有多个

                         );

                 删除唯一约束:   //注意不能像非空那样来删除唯一约束。而是按照下面这个方式。

                        alter table student drop index name;

                 在创建表后添加唯一约束:

                        alter table student modify name varchar(20) unique;

        主键约束:primary key

                1、注意:

                        ① 非空且唯一

                        ② 一张表只有一个字段为主键

                        ③ 主键是表中记录的唯一标识

                2、创建表时添加主键约束

                        create table student(

                                id int primary key ,    //设为主键

                                name varchar(20)

                        );

                3、删除主键:    //主键的删除也不能像非空那样来删,应按照下面这个方式来删。

                        alter table student drop primary key;

                4、创建完表后添加主键

                        alter table student modify id int primary key;

                5、自动增长

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

                        create table student(

                                id int primary key auto_increment,      //设为主键,并使其自动增值。注意auto后的值只与上一次值有关,下一                                                                                                 //次的值为上一次值+1

                                name varchar(20)

                        );

                 6、删除自动增长

                        alter table student modify id int;

                 7、增加自动增长

                        alter table student 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 casecade;

                        2、分类:

                            级联的更新:on update cascade

                            级联的删除:on delete casecade

                        

                        

数据库的设计:

        1、多表之间的关系     

            ① 分类  

                一对一关系:一一对应

                一对多(多对一) :

                           如部门和员工,一个部门可以有多个员工,一个员工只能对应一个部门

                多对多:

                           一个学生可以选择多门课程,一个课程也可以被多个学生选择

            ② 实现方式

                一对多:在多的一方建立外键来指向一的地方的主键

                多对多:需要借助第三张中间表

                           新建一个中间表,最少有两个字段,这两个字段分别是其他两个表的主键,并且这两个字段作为中间表的外键,分                             别指向两张表的主键。primary key(id1,id2)

                一对一:在任意一方添加外键,指向另一方的主键,但要让这个外键唯一,加一个唯一约束。正常情况不会有一对一,直                               接放在后面就好了,不需要麻烦。

        2、数据库设计的范式

                概念:设计数据库时需要遵循的规范

                分类:

                        第一范式:

                        第二范式:在第一范式的基础上,让所有的非主属性完全依赖于主码

                                1、函数依赖:A-->B    如果通过A属性(属性组)的值可以唯一确定B属性的值,则称B依赖于A

                                                      比如学号-->姓名      (学号,课程名称)-->分数

                                2、完全函数依赖:A-->B

                                        如果A是一个属性组,则B属性值的确定需要依赖于A属性中的所有属性值

                                            例如:(学号,课程名称)-->分数

                                3、部分函数依赖: 如果A是一个属性组,则B属性值的确定需要依赖于A属性中的某些个属性值

                                            例如:(学号,课程名称)-->姓名

                                4、传递函数依赖:若A-->B , B-->C 则A-->C

                                5、码:一个属性(属性组)在该表中被其他属性完全依赖

                                        主属性:码属性组中的所有属性

                                        非主属性:除了主属性中的属性

                        第三范式:在第二范式的基础上 任何非主属性不依赖于其他非主属性(消除传递依赖)

 

 

 

补充:sql的select语句执行顺序

        SELECT 语句的执行顺序
                       1. from语句
                       2. where语句(结合条件)
                       3. start with语句
                       4. connect by语句
                       5. where语句
                       6. group by语句
                       7. having语句
                       8. model语句
                       9. select语句
                       10. union、minus、intersect等集合演算演算
                       11. order by语句

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值