mysql数据库是由DB跟DBMS跟sql组成

     DB 数据库仓库

     DBMS 数据库管理系统

     SQL 一门通用的数据库语言

       数据库启动命令 : 关闭->net stop MySQL || 开启—>net start Mysql

           命令行链接数据库: mysql -h localhost -P 3306 -u root -p123 

               也可以简介 mysql -u root -p123

       查询数据库管理系统中有几个数据库的仓库 Show DataBases

   默认四个数据库
               information_schema 保存数据库源文件信息
               performance_schema 保存搜索性能参数系统参数信息
               mysql 保存数据库用户信息
               test 测试数据库     

               进库语法: use 库名;
               查看库里有几张表语法: show tables;
               还可以指定那个库名查看: show tables from 库名;
               查看我当前在那个库里面: select database(); ->调函数
               建表: creta tble 表名(填写你需要的字段);
               查看表结构:desc 表名;
               查看当前数据管理系统版本 slect version(); dos命令查询: mysql --version

     SQL语言分为
               DQL :一些函数 分组 连接查询 条件查询 子查询 分页查询 union去重复查询
               DML :增删改语句
               DDL :库表管理 数据库类型 常见约束

---------------------------------------SQL语言-------------------------------------------------

     DQL--->

     基础查询----------->1:
     去重 :select distinct age from student ->DISTINCT
     mysql里面+只能做运算符来用
     拼接字符串 :concat()里面拼接
     把null转0.0 :ifnull(字段,0)

     条件查询----------->2:
     条件运算符: > < = <> >= <=
     逻辑运算符: and or not
     模糊查询:
     like
     between and
     in
     is null
     查询什么到什么之间:between 100 and 200
     根据一个字段等于多个条件查询: in(条件1,条件2,条件3)
     判断null :
     查null ->is null
     查不是null ->is not null
     安全等于 : <=> 用作: <=> null, 字段 <=> 值

     排序查询----------->3:
     排序: ORDER BY 字段 DESC 降序|| ASC 升序

     常见函数----------->4:
     函数概念:就是跟Java中的方法一样
     好处:隐藏了实现细节 提高了代码的重用性
     调用:select 函数名(实参列表) 【from 表名】;

     分类:
     单列函数:只有一个数据,并对一个数据返回一个结果
     分组函数:用于多个数据,并对多个数据返回一个结果
     理解:多个数据就跟java中的数组 集合一样

     查看当前客户端子符集: show variables Like '%char%'

     单行函数:
     1.字符函数
     length():获取数值个数 length('qwe')
     upper():大写 upper('q')
     lower():小写 lower('Q')
     substr():截取字符串 substr(1111,1,2)
     instr():返回字串第一次出现的索引,找不到返回 instr('1我11','我')
     trim():去前后的空格,也可以指定前后的值去掉 trim('1' from '11yy11')
     lpad():用指定的子符实现左填充指定的长度 lpad('123',3,'*')
     rpad()用指定的子符实现右填充指定的长度 lpad('123',3,'*')
     replace():替换 replace('123','2','我')

     2.数字函数
     round() 四舍五入加上0.5向上取整
     ceil() 向上取整
     floor() 向下取整
     truncate() 小数点截断 truncate(1.69999,1)
     mod() 取余 mod(10,3)

     3.日期函数
     Now() 返回当前系统日期+时间
     curdata() 返回当前系统日期
     curtime() 返回当前系统时间
     指定获取部分-->
     year() 年
     month() 月
     day() 日
     hour() 小时
     minute() 分钟
     second() 秒

     str_to_data() 将日期格式的子符换成指定格式的日期
     用法:str_to_data('9-13-1999','%m-%d-%y')
     格式符:-->
     %Y 四位的年份
     %y 2位的年份
     %m 月份(01,02...)
     %c 月份(1,2...)     
     %d 日(01,02...)
     %H 24小时制
     %h 12小时制
     %i 分钟
     %s 秒
     date_format() 将日期转成子符
     用法 date_format(new(),'%y年%m月%d日')

     4.其他类型函数
     version()
     database()
     user()

     5.流程控制函数
     if(10<5,'大','小') if函数-->if else 效果
     case函数

     select case 字段
     when 1 then '我是1'
     when 2 then '我是2'
     when 3 then '我是3'
     else '结束'
     end from student;

     分组函数:
     sum()
     max()
     min()
     avg()
     count()
     特点:
     1.sum,avg一般用于处理数值型
     max,min,count 可以处理任何类型
     2.分组函数都忽略null值

     3.可以跟distinct搭配去重复

     count()效率:
     Myisam引擎下count(*)的效率高
     innodb引擎下count(*)比加字段效率要高

     分组查询----------->
     GROUP by 需要分组的字段
     也可以根据多个字段分组 前提是分组值一样

     连接查询----------->
     错误情况
     笛卡尔乘机现象:表1 有m行,表2 有n行,结果=m*n行
     发生原因:没有有效的连接条件
     解决方法:添加有效的连接条件

     mysql支持标准
     按年代划分分类:
     sql92标准:只支持内连接
     sql99标准:支持内连接+外连接(左外和右外)+交叉连接
     按功能分类:
     内连接:
     等值连接
     非等值连接
     自连接
     外连接:
     左外连接
     右外连接
     全外连接
     交叉连接

     1.Sql92标准
     等值连接注(有=):
     select * from 表1,表2
     where 表1.字段名=表2.字段名
     非等值连接注(没=);
     select * from 表1,表2
     where between 表1.字段名 and 表2.字段名
     自连接:
     2.Sql99标准
     外连接的查询结果外主表中的所有记录
     有值跟他匹配的就显示匹配的值
     没有就显示null
     外连接:就是内连接结果+主表中没有匹配对应表的数据
     1.左连接
     select * from 表1 left outer join 表2
     on 表1.字段名=表2.字段名
     注(on是代表一个面上就是不是在一张表里做条件查询是在两个表里面做查询
     。where就是只能在一个表里面做查询。)

     2.右连接
     select * from 表1 Right outer join 表2
     on 表1.字段名=表2.字段名

     3.全外连接(Mysql不支持)
     select * from 表1 Full outer join 表2
     on 表1.字段名=表2.字段名
     注(全外连接是查询3表的数据
     结果是:
     表1里面所有的内连接结果+
     表2里面不是内连接结果数据+
     表1里面不是内连接结果的数据
     )

     4.交叉连接
     select * from 表1 cross join 表2

     子查询----------->
     分类:
     按子查询出现的位置:
     select后面
     只支持标量子查询
     from后面
     只支持表子查询
     wehere或having后面
     支持标量子查询
     列子查询
     行子查询
     exists后面(相关子查询)
     只支持表子查询
     按结果集的行列数不同:
     标量子查询(结果只有一列一行)
     列子查询(结果一列多行)
     行子查询(结果一行多列) 注(用的不多因为有局限性语法(字段1,字段2)=(子sql))
     表子查询(结果一般为多行多列)

     联合查询----------->8
     union:去重复
     unionall :不去重复
     语法:
     查询语句1
     union|unionall
     查询语句2

     DML--->
     新增:
     方式一
     insert into 表名 values(1,'王翔','1111');
     方式一进阶:
     插入多行
     insert into 表名 values(1,'王翔','1111'),(1,'王翔','1111');
     插入子查询结果集
     insert into 表名
     select * from 表名;
     方式二
     insert into 表名 set id=1,name='王翔',phone='1111';

     修改:
     语法:
     单表:
     update 表名 set 字段='值' where id=1
     多表:
     多表连接修改注(使用内连接)
     update 表1 inner join 表2 on 表1.字段=表2.字段
     set 字段='值' where id=1

     删除:
     语法:
     方式一:
     单表:
     delete 表名 where id=1
     多表:
     多表连接修改注(使用内连接)
     delete 表1 inner join 表2 on 表1.字段=表2.字段
     where id=1
     方式二:
     truncate table 表名 注(这种删除方式可以把主键自增长删除(会让自增长从1开始)
     但是这个删除没有返回值,(truncate没有回滚,delete有回滚))

     DDL--->

     1.库的管理
     1.库的创建
     语法:
     create database 【if not exists】 库名;
     2.库的修改
     修改库名语法:
     renaem database 库名 to 新库名
     更改库的子符集语法:
     alter database 库名 character set gbk;
     2.表的管理
     1.创建表
     create table 表名(
     id int,
     name varchar(120),
     )
     2.修改列名
     alter table 表名 change column 旧列名 新列名 datetime;
     3.修改列的类型或约束
     alert table 表名 modify column 列名 类型;
     4.添加新列
     alter table 表名 add column 列名;
     5.修改表名
     alter table 旧表名 reaname to 新表名
     5.删除列名
     alter table 表名 drop column 列名
     7.表的删除
     drop table if existe 表名;
     8.表的复制
     1.复制表的结构
     create table copy like 复制的表名
     1.复制表的结构+内容
     create table copy2
     select * from 复制的表名

     1.常见的数据类型
     数值型:
     整型:int integer bigint
     小数
     都可以指定取值范围(M跟D是取值范围)
     (M,D) M代表合计一共5位数,D是保留小数点长度几位
     浮点型: float double
     定点数型: dec注(保存精度比浮点型高)
     子符型:
     较短的文本:char,varchar
     较长的文本:text, blob(较长的二进制数据)
     日期型:
     date 格式2019-12-31
     datetime 格式2019-12-31 23:59:59
     timestamp 格式一串数字某个时刻
     time 格式 23:59:59
     year 格式 2019

     2.常见约束
     含义:一种限制,用于限制表中的数据,为了保证表中的数据准确和可靠性
     六大约束分类:
     not null :非空
     default :默认
     primary key :主键不可为空
     unioue :唯一可为空
     check(字段=男 or 字段=女):检查约束【mysql不支持】
     foreige key :外键
     添加约束的时机:
     1.创建表时
     2.修改表时
     约束的添加分类:
     列级约束: 六大约束语法都支持,但外键没有效果
     表级约束: 除了非空,默认其余的六大约束支持      
     语法: constraint 别名 约束名(字段名)
     添加外键: constraint 别名 foreige key(字段名) references 主键表名(字段名)
     查看索引: show index from 表名

     修改表时添加约束语法
     1.添加列级约束
     alter table 表名 modify column 字段名 字段类型 新约束;
     2.添加表级约束
     alter table 表名 add 【constraint 约束名】 约束类型(字段名) 【外键的引用】
     1.删除列级约束
     alter table 表名 modify column 字段名 字段类型;
     2.删除表级约束
     alter table 表名 drop 约束类型(字段名);
     标识列(自增长)
     key|unique auto_increment
     查看当前标识列信息
     show variables like '%auto_increment%'

     TCL--->

     事务的属性:
     简称(acid)
     原子性
     一致性
     隔离性(需要通过隔离级别来控制)
     持久性

     多个事务如果使用不隔离级别就会出现以下问题
     脏读 (T1事务读取字段修改更新未提交T2事务在去读取字段就读取了无效的数据)
     重复读 (T1事务读取了一个字段,此时T2事务把字段改了,就导致T1事务刷新一下数据改了)
     幻读 (T1事务读取一个表T2事务此时在表中新增了几行数据,就导致T1事务看到的数据不同)
     数据库隔离级别
     readuncommitted(读未提交数据) 数据库隔离级别-->最低隔离级别
     readcommited(读已提交数据) 数据库隔离级别-->比最低好一点点的隔离级别
     repeatableread(可重复读) 数据库隔离级别-->中隔离级别
     serializable(串行化) 数据库隔离级别-->高隔离级别(相当与java同步)
     查看当前数据库的隔离级别--->select @@tx_isolation;
     修改隔离级别--->set session transaction isolation level 隔离级别名
     设置回滚断点:savepoint

 

---------------------------------------其他----------------------------------------------------

     视图的介绍--->
     创建视图语法 create view 视图名 as 查询语句(select)
     修改视图:
     方法一:alter view 需要修改的视图名 as 查询语句(select)
     方法二:create or replace view 需要修改的视图名 as 查询语句(select)
     删除视图:drop view 视图名,视图名...;
     显示视图创建过程sql--->show create 视图名\G

     存储过程--->
     变量:
     系统变量:
     全局变量
     会话变量
     查询所有的系统变量
     show global|session variables;
     给变量赋值
     set global|session 系统变量名=值;
     自定义变量:
     作用域:用户变量(相当于会话变量)|局部变量(只能用于begin end中)
     用户变量
     初始化 修改值:
     set @变量名=值;
     赋值:
     select 字段 into @变量名;
     局部变量
     declare 变量名 类型;
     declare 变量名 类型 default 值;

     存储过程创建语法
     结束标记:delimiter $ 可以设置结束标记

     create procedure 存储过程名(参数列表)
     begin
     存储过程体(一组合法的sql语句)
     end
     参数列表包含3部分
     参数模式 参数名 参数类型
     模式有 in out inout
     空参存储过程语法
     create procedure myp1()
     begin
     select * from student
     end;
     带in 存储过程语法
     create procedure myp2(in myname varchar(20))
     begin
     select * from student
     where name=myname
     end
     带out存储过程语法
     create procedure myp3(in myname varchar(20),out return varchar(20))
     begin
     select name into return from student
     where name=myname
     end;
     带inout存储过程语法
     create procedure myp3(inout my int) 注(这里传过来的是个变量)
     begin
     set=my*2;
     end;

     删除存储过程--> drop procedure 存储过程名
     查看存储过程的信息--> show create procedure 存储过程名

     函数--->
     创建语法:
     create function 函数名(参数列表) Returns 返回值类型
     begin
     函数体
     end;

     注意:参数包含两部分
     参数名 参数类型
     函数体:肯定会有return语句不写也不会报错

     案例---->
     无参:
     create function myf1() returns int
     begin
     declare c int default 0;
     select count(*) into c
     from student
     return c;
     end $
     有参:
     create function myf2(myname varchar(20)) returns int
     begin
     declare u int default 0;
     select age into u
     from student where name=myname
     return u;
     end
     删除函数--> drop function 函数名
     查看存储过程的信息--> show create function 函数名

     流程控制结构--->
     循序结构:程序从上往下执行
     分支结构:程序从两条或多条路径中选择一条去执行
     循环结构:程序在满足一定条件的基础上,重复执行一段代码

     1.分支结构
     1.if函数
     功能:实现简单的双分支
     if(表达式1,表达式2,表达式3)
     如果表达式1成立就返回表达式2的值否则就返回表达式3的值
     应用场景:任何场合

     2.case结构
     语法:
     case 变量|表达式|字段
     when 要判断的值 then 要返回的值
     when 要判断的值 then 要返回的值
     ...
     else 要返回的值
     end
     应用场景:任何场合

     3.if结构
     if 条件1 then 语句1;
     elseif 条件2 then 语句2;
     【else 语句n】
     end if;
     应用场景:begin end;

     2.循环结构
     分类:
     while loop repeat
     循环控制:
     iterate类似于 continue,继续,结束当前循环继续下一次
     leave类似于 break,结束当前所在的循环

     1.while 特点:先判断后执行
     语法:
     【标签:】while 循环条件 do
     循环体
     end while 【标签】;

     案例:
     1.没有用循环控制的
     set @i=0;
     while @i<=10 do
     insert into values('1','王翔','29')
     set @i=@i+1;
     end while;

     1.用到循环控制的
     set @i=0;
     a:while @i<=10 do
     insert into values('1','王翔','29')
     if @i=2 then leave a;
     end if;
     set @i=@i+1;
     end while a;

     2.loop 特点:没有条件的死循环
     语法:
     【标签:】loop
       循环体
     end loop 【标签】;

     案例:
     set @i=0;
     a:loop
     insert into values('1','王翔','29')
     set @i=@i+1;
     if @i=2 then leave a;
     end if;
     end loop a;

     3.repeat 特点:先执行后判断
     语法:
     【标签:】repeat
     循环体
     until 结束循环的条件
     end repeat 【标签】;

     案例:
     set @i=0;
     a:repeat
     insert into values('1','王翔','29')
     set @i=@i+1;
     until @i=10
     end repeat a;

Mysql基础篇(笔记)的更多相关文章

  1. 【目录】mysql 基础篇系列

    随笔分类 - mysql 基础篇系列 mysql 开发基础系列22 SQL Model(带迁移事项) 摘要: 一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql m ...

  2. 重新整理 mysql 基础篇————— 介绍mysql[一]

    前言 准备整理mysql的基础篇了,前面整理了sql语句序列的的<sql 语句系列(八百章)>,感觉很多用不上,就停下来了,后续还是会继续整理. mysql 基础篇主要是对一些基础进行整理 ...

  3. 有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)

    hi 今天登上来,发现竟然有了3个评论~~加油吧! 这周的计划其实远远没有达到,然后下周还有一大堆事情...那么...周末好好玩吧~ 今天试图完结MySQL的基础篇知识,小白变为大白? 1.MySQL ...

  4. mysql基础篇 - 其他基本操作

    基础篇 - 其他基本操作         其他基本操作 一.实验简介 本节实验中我们将学习并实践数据库的其他基本操作:索引.视图,导入和导出,备份和恢复等. 这些概念对于数据库管理员而言都非常重要,请 ...

  5. mysql基础篇 - 数据库及表的修改和删除

    基础篇 - 数据库及表的修改和删除         修改和删除 一.实验简介 本节实验中,我们将学习并实践如何对数据库的内容做修改,删除,重命名等操作. 二.实验准备 在正式开始本实验内容之前,需要先 ...

  6. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  7. mysql基础知识笔记

    Mysql基础笔记 环境配置 基本概念 mysql命令行 进入 use show 查询 select order by where like 数据过滤regexp concat 文本函数 日期函数 数 ...

  8. MySql基础补漏笔记

    在MySQL教程|菜鸟教程系统复习的时候有一些知识点还没掌握透的或者思维方式还没完全跟上的地方,写了一个笔记,讲道理此笔记对除我之外的任何读者不具有任何实用价值,只针对我在复习MySQL基础过程中的查 ...

  9. MySQL基础篇(一)

    本文主要内容为MySQL的基础语句以及正则表达式等内容. 本文操作的数据库内容存在个人github:https://github.com/YuanGao-1/blog_demo.git init_sc ...

随机推荐

  1. mysqldump导入导出

    如果导入数据:使用mysqldump命令 导出数据和表的结构: 1.导出表数据和表结构 mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql(这个名字随便叫) #/usr/l ...

  2. Gos: Armed Golang 💪

    Gos: Armed Golang

  3. HTTPS证书转换成PEM格式

    PEM 格式的证书文件(*.pem)一般为以下格式: 注意:PEM 格式证书文件可用 notepad++ 等文本编辑器打开. CER / CRT 格式证书转换为 PEM 格式 对于 CER / CRT ...

  4. 2019-3-6-WPF-使用-SharpDX

    title author date CreateTime categories WPF 使用 SharpDX lindexi 2019-03-06 16:52:37 +0800 2018-4-20 9 ...

  5. [USACO]奶牛会展(背包)

    [USACO]奶牛会展 题目背景 奶牛想证明它们是聪明而风趣的.为此,贝西筹备了一个奶牛博览会,她已经对N 头奶牛进行 了面试,确定了每头奶牛的智商和情商. 题目描述 贝西有权选择让哪些奶牛参加展览. ...

  6. JAVA中的反射机制 详解

    主要介绍以下几方面内容 理解 Class 类 理解 Java 的类加载机制 学会使用 ClassLoader 进行类加载 理解反射的机制 掌握 Constructor.Method.Field 类的用 ...

  7. frugally-deep: Header-only library for using Keras models in C++

    // Convenience wrapper around predict for models with // single tensor outputs of shape (1, 1, 1), / ...

  8. 对https的研究

    HTTPS简介 超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP ...

  9. linux运维、架构之路-linux定时任务

    1.基础优化之开机启动服务优化 使用awk拼接的方式 [root@cache01 ~]# chkconfig |egrep -v "crond|network|sshd|rsyslog|sy ...

  10. visual studio 编译报错:未能向文件“....csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝

    在网上开始查找出错的解决方法,终于找到了,原来解决方法这么简单,当初以为是权限的问题,后来发现不是权限问题,在VSS中比以前多了两个目录“bin”和“obj”,可能是有人上传的时候将这两个文件夹一起上 ...