MySQL基础(适合新手入门)


基础1


1.sql语句

1. 语言分类

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

   数据操作语言:简称DML,用来对数据库中表的记录进行操作。关键字:insert,delete,update等

   数据查询语言:简称DQL,用来查询数据库中表的记录。关键字:select,from,where等

   数据控制语言:简称DCL,用来定义数据库的访问权限和安全级别,及创建用户。

2. sql语句的通用语法

   1.SQL语句可以单行或多行书写,以分号结尾
   2.可使用空格和缩进来增强语句的可读性:基本上一个单词就一个空格
   3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写

   例如:SELECT * FROM user。
   4.- 同样可以使用/**/的方式完成注释  #
   / *我是一个注释 */     #我也是一个注释     -- 我也是一个注释

3. sql中的数据类型

   int(整数长度): 整数类型     double: 小数类型    decimal(m,d): 指定整数位与小数位长度的小数类型  

   date: 日期类型, 格式为yyyy-MM-dd,包含年月日,不包含时分秒  2020-01-01  

   datetime: 日期类型,格式为 YYYY-MM-DD HH:MM:SS,包含年月日时分秒   到9999年  

   timestamp: 日期类型,时间戳  从1970年到2038年  

   varchar(字符串长度): 文本类型, M为0~65535之间的整数

 2.mysql中语句

1. DDL之数据库操作:database

   1.创建数据库: create database 数据库名字 charset utf8

   2.查看数据库:  show database  /show databases

   2.删除数据库:  1.关键字:drop   2.语法:drop database 数据库名字

   3.使用数据库: use 数据库名;

2. DDL之表操作: table

   1.创建表:  关键字:create table
         语法:
                  create table 表名(
                        列名 数据类型(长度) [约束],
                        列名 数据类型(长度) [约束],
                        列名 数据类型(长度) [约束]
                    );

   ​         注意:a.如果定义完一个列之后,后面还有其他的列,需要加,
   ​                 b.如果定义最后一个列了,就不用加,
   ​                 c.一张表应该有一个主键(约束),  primary key
   ​                     当一列设置成主键了,此列中的数据唯一,不能重复
   ​                     一个主键可以代表一条数据(好比是身份证)

   2.删除表: 1.关键字:drop table        2.语法:drop table 表名

   3.查看表: show tables       查看表结构: desc  表名

   4.修改表结构: alter table 表名 add 列名 类型(长度) [约束];  作用:添加列. 

   ​                         alter table 表名 modify 列名 类型(长度) [约束];
   ​                                作用:修改列的类型,长度及约束.

   ​                         alter table 表名 drop 列名;     作用:修改表_删除列.

   ​                         rename table 表名 to 新表名;  作用:修改表名

3. DML之数据操作语言

   1.插入数据:1.关键字:insert into values
                       2.语法: insert into 表名(列名,列名) values (具体的值,具体的值)

    2.删除数据:  1.关键字:delete from
                          2.语法:delete from 表名-> 一次全删除
                                      delete from 表名 where 条件-> 按照条件删除

    3.修改数据: 1.关键字:update set
                          2.语法:update 表名 set 列名 = 值 -> 是将指定的列所有的数据全部修改
                                      update 表名 set 列名 = 值 where 条件 -> 根据条件修改数据

3.约束

1. 主键约束:   

   1. 主键约束:primary key

      1.主键列中的数据有什么特点:
              a.数据唯一,不能重复      b.不能为NULL      c.一个主键相当于一个人的身份证,代表一整条数据
       2.注意:每张表中都应该有一个主键列,代表一条数据

      ​     添加方式1:在创建表时,在字段后面直接指定(重点)

      ​     添加方式2:在constraint约束区域,去指定主键约束  (添加表语句的最后一行)      

      ​     添加方式3:通过修改表结构的方式 :

      ​          1.格式:ALTER TABLE 表名 ADD  PRIMARY KEY (字段列表)

2. 联合主键:    1.什么是联合主键:多个列结合称之为是一个主键
                        2.特点:数据不能完全一样,不能为NULL

   ​                     3.格式:  PRIMARY KEY (xing,ming)   (主键的第二种添加方式)

3. 删除主键约束: ALTER TABLE 表名 DROP PRIMARY KEY->删除主键约束

4. 自增长约束

   1. 基本操作:  字段名 字段类型  PRIMARY KEY AUTO_INCREMENT

      1.关键字:auto_increment
      2.使用:一般和primary key 一起使用
      3.注意:a.主键能代表一条数据    b.自增长列,只能自动维护此列中的数据,可以自动编号,但是不能代表一条数据

      4.想让主键自增长的类重新编号:TRUNCATE TABLE `user`; -- 删除所有数据,摧毁表结构

      5.自增长和主键的删除顺序:先自后主

   2. truncate和delete区别

      相同点:都可以删除数据
      不同点:
        如果delete的是主键自增长的数据,那么删除之后,再添加会继续往下编号,不会重新编号
        如果truncate,会将所有的数据干掉,摧毁表结构,主键自增长的列数据会重新编号

5. 非空约束

   1.关键字:  NOT NULL
   2.特点: 此列的数据不能为NULL

6. 唯一约束

   1.关键字:UNIQUE
   2.特点: UNIQUE修饰的列中的数据不能重复

   3.唯一约束和主键约束也是有区别的
     相同点:列中的数据都是唯一的
     不同点:唯一约束:不能代表一条数据,而且表中可以有多个列都是唯一约束
                 主键约束:能代表一条数据,而且一个表中必须有一个主键,只能有一个主键

4.简单查询

1. 关键字:  select  from   where
   语法:  a.select * from 表名  -> 查询所有列的数据
              b.select 列名,列名 from 表名-> 查询数据,指定只展示哪几列
              c.select 列名,列名 from 表名 where 条件
   3.注意: 我们查询出来的结果也是呈表格的形式展现,但是查询出来的表是一张伪表,这个表不能修改的,是只读的

   4.起别名:列名 as 别名(as可省略)   格式:飘飘或者啥也不加

2. 条件查询

   比较运算符<  <=  >=   =  <>     大于、小于、大于(小于)等于、不等于  
   BETWEEN  ...AND...   显示在某一区间的值(含头含尾)   
  字段 IN(set)    显示在in列表中的值,例:in(100,200)  查询id为1,3,7的商品: id  in(1,3,7)
   列名 LIKE ‘张pattern’ 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符, 例如:`first_name like '_a%';`    比如:查询姓张的人:name like '张%' 查询商品名中带香的商品: pname like '%香%' 查询第二个字为想的商品: like '_想%' 查询商品名为四个字的商品:like '' 
   IS NULL         判断是否为空   
   逻辑运行符    and  (与)      多个条件同时成立  全为true,整体才为true 
   or(或)            多个条件任一成立   有真则真    
   not(非)           不成立,例:`where not(salary>100);`   

3. 排序查询

   1.关键字: order by 排序规则
            asc:升序  order by后面没写默认是升序
            desc:降序          
   2.问题:先排序还是先查询?  先走查询,得到结果之后再排序
   3.注意: order by最后写,也最后执行
   4.语法:select 列名 from 表名 order by 排序字段 asc|desc-> 查询之后要指明对哪一列进行排序

   书写sql语句关键字的顺序:  select    from   where    group by    having     order by
   执行顺序:  from   where   group by   having   select   order by

基础2

1.聚合查询

1. 关键字:聚合函数
   count(列名):统计表中有多少条数据
   sum(列名):对指定列求和
   avg(列名):对指定列做平均值
   max(列名):求指定列中的最大值
   min(列名):求指定列中的最小值
   语法:  select 聚合函数(列名) from 表名 [where 条件]

   注意:纵向查询,结果是单值

2. 分组查询(大致可以理解为去重复)

   1.关键字: group by 列名
   2.语法:select 列名,列名... from 表名 group by 分组字段 having 分组后的条件
   3.分组小技巧:  相同的为一组    不同的单独为一组
   4.注意:分组查询都是和聚合函数结合使用

3. 分页查询

   1.语法: select * from 表名 limit (m,n)
          m:每页的起始位置  -> 表中的第一条数据看做是0位置
          n:每页显示条数    
   2.如何快速计算每页的起始位置  
    (当前页-1)*每页显示条数
   3.分页其他参数计算
           后台计算出页码、页数(页大小)
           分页需要的相关数据结果分析如下,
           注意:下面是伪代码不用于执行
                       int curPage = 2; -- 当前页数
                       int pageSize = 5; -- 每页显示数量
                       int startRow = (curPage - 1) * pageSize; -- 当前页, 记录开始的位置(行数)计算
                       int totalSize = select count(*) from products; -- 记录总数量
                       int totalPage = Math.ceil(totalSize * 1.0 / pageSize); -- 总页数
                   总页数 = (总记录数/每页显示条数)向上取整

2. 数据库的备份与还原

1. 命令操作备份

   mysqldump  -u用户名 -p密码 数据库名>生成的脚本文件路径
   生成的脚本文件路径:指定备份的路径,写路径时最后要指明备份的sql文件名,命令后不要加;

2. 命令操作还原

   mysql  -uroot  -p密码 数据库名 < 文件路径
   注意:我们利用命令备份出来的sql文件中没有单独创建数据库的语句,所以如果利用命令去还原的话,需要我们自己手动先创建对应的库命令后不要加;

3.数据库范式

1. 第一范式: 确保每列保持原子性  (数据库表中的所有字段值都是不可分解的原子值)
2. 第二范式: 要求数据库表中的每个实例或行必须可以被惟一的区分
3. 第三范式: 非主键之间不能相互依赖

 4.多表之间的关系

1. 一对一: 比如人和身份证号
2. 一对多:  分类表和商品表
   主表:分类表  -> 主表中的数据约束着商品表   从表:商品表
   关系:从分类表出发,往商品表看  ->  一个分类对应多个商品   ->  一对多
           从商品往分类表看  ->  多个商品属于一个分类   -> 多对一 
   结论:从主表往从表看是一对多,反过来是多对一,结果就是一对多关系
3. 多对多: 商品表和订单表
   从商品表往订单表看:一个商品可以在多个订单中  -> 一对多
   从订单表往商品表看:一个订到中可以包含多个商品  -> 一对多
   正着看,反着看都是一对多,结果就是多对多

 5.创建外键约束

1. 格式:alter table 从表 add [constraint 外键名称(自定义)] foreign key 从表(外键列名) references 主表(主键列名)

 6.多表查询

1. 交叉查询   语法: select * from 表A,表B
       注意: 交叉查询查询的结果是有"笛卡尔乘积"现象

2. 内连接查询

   1.关键字:inner join on -> inner可以省略
   2.语法:
     显示内连接:select * from 表名A join 表B on 条件
     隐式内连接:select 列名 from 表A,表B where 条件

3. 外连接

   1.关键字:  outer join on -> outer可以省略
   2.分类:
     左外连接:left join on
     右外连接:right join on
   3.语法:
     select * from 左表 left/right join 右表 on 条件
   4.如何分清谁是左表,谁是右表
     join左边的是左表
     join右表的是右表
   5.左外连接,右外连接,内连接区别:
     a.左外连接:查询的是和右表的交集,以及左表的全部
     b.右外连接:查询的是和左表的交集,以及右表的全部
     c.内连接:只查询交集

4. union联合查询实现全外连接查询

   联合查询是将多条查询语句的查询结果合并成一个结果并去掉重复数据。

   union的语法:
     查询语句1 union 查询语句2 union 查询语句3 ...

5. 子查询:  一条查询语句作为另外一条查询语句的条件使用

6. 子查询作为伪表使用: 1.查询出来的结果是以表的形式呈现,这个表是只读权限,这个查询出来的表就是一张伪表

7.mysql函数(了解)

1. 字符串函数

   1 .字符串函数列表概览

   CONCAT(S1,S2,......,Sn)     连接S1,S2,......,Sn为一个字符串 
   CONCAT_WS(separator, S1,S2,......,Sn)    连接S1一直到Sn,并且中间以separator作为分隔符 
   UPPER(s) 或 UCASE(s)     将字符串s的所有字母转成大写字母              
   LOWER(s)  或LCASE(s)     将字符串s的所有字母转成小写字母              
   TRIM(s)                            去掉字符串s开始与结尾的空格                   
   SUBSTRING(s,index,len)  返回从字符串s的index位置其len个字符           

   2.字符串连接函数
   concat(str1, str2, ...)     字符串连接函数,可以将多个字符串进行连接 
   concat_ws(separator, str1, str2, ...)    可以指定间隔符将多个字符串进行连接;     

   3.字符串大小写处理函数
    upper(str)   得到str的大写形式 
    lower(str)   得到str的小写形式 

   4.移除空格函数: trim(str)  将str两边的空白符移除
 

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL入门学习(1)。   MySQL入门学习(1) · 安装篇 PHP+MySQL+Linux目前已逐渐成为小型web服务器的一种经典组合。在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考。 1、下载mysql-3.23.35-win.zip并解压; 2、运行setup.exe;选择d:\mysql,"tyical install" 3、启动mysql,有如下方法: · 方法一:使用winmysqladmin 1)、进入d::\mysql\bin目录,运行winmysqladmin.exe,在屏幕右下角的任务栏内会有一个带红色的图符 2)、鼠标左键点击该图符,选择“show me”,出现“WinMySQLAdmin”操作界面;首次运行时会中间会出现一个对话框要求输入并设置你的用户名和口令 3)、选择“My.INI setup” 4)、在“mysqld file”中选择“mysqld-opt”(win9x)或“mysqld-nt”(winNT) 5)、选择“Pick-up or Edit my.ini values”可以在右边窗口内对你的my.ini文件进行编辑 6)、选择“Save Modification”保存你的my.ini文件 7)、如果你想快速使用winmysqladmin(开机时自动运行),选择“Create ShortCut on Start Menu” 8)、测试: 进入DOS界面; 在d:\mysql\bin目录下运行mysql,进入mysql交互操作界面 输入show databases并回车,屏幕显示出当前已有的两个数据库mysql和test · 方法二:不使用winmysqladmin 1)、在DOS窗口下,进入d:/mysql/bin目录 2)、win9X下)运行: mysqld 在NT下运行: mysqld-nt --standalone 3)、此后,mysql在后台运行 4)、测试mysql:(在d:/mysql/bin目录下) a)、mysqlshow 正常时显示已有的两个数据库mysql和test b)、mysqlshow -u root mysql 正常时显示数据库mysql里的五个表: columns_priv db host tables_priv user c)、mysqladmin version status proc 显示版本号、状态、进程信息等 d)、mysql test 进入mysql操作界面,当前数据库为test 5)、mysql关闭方法: mysqladmin -u root shutdown 4、至此,MySQL已成功安装,接着可以熟悉MySQL的常用命令并创建自己的数据库了。 上篇讲了如何安装并测试MySQL,环境建好后就可以继续我们的学习了。本篇主要熟悉一写常用命令。 · 1、启动MySQL服务器 实际上上篇已讲到如何启动MySQL。两种方法: 一是用winmysqladmin,如果机器启动时已自动运行,则可直接进入下一步操作。 二是在DOS方式下运行 d:mysqlbinmysqld · 2、进入mysql交互操作界面 在DOS方式下,运行: d:mysqlbinmysql 出现: mysql 的提示符,此时已进入mysql的交互操作方式。 如果出现 "ERROR 2003: Can´t connect to MySQL server on ´localhost´ (10061)“, 说明你的MySQL还没有启动。 · 3、退出MySQL操作界面 在mysql>提示符下输入quit可以随时退出交互操作界面: mysql> quit Bye 你也可以用control-D退出。 · 4、第一条命令 mysql> select version(),current_date(); +----------------+-----------------+ | version() | current_date() | +----------------+-----------------+ | 3.23.25a-debug | 2001-05-17 | +----------------+-----------------+ 1 row in set (0.01 sec) mysql> 此命令要求mysql服务器告诉你它的版本号和当前日期。尝试用不同大小写操作上述命令,看结果如何。 结果说明mysql命令的大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值