yes20000912

@

MySQL讲解

一.启动服务

  • 用管理员身份运行命令提示符
停止服务
net stop + 服务名

启动服务
net start + 服务名

查询服务器连接所用端口信息
select @@port;

查询系统所支持的存储引擎类型
show engines;

登录到MySQL服务端查看服务器版本信息
select version();

未登录到MySQL服务器端查看服务器版本信息
mysql --version/--V;

查看默认存储引擎
show variables like 'default_storage_engine';

二.MySQL命令之数据库操作

创建数据库
create database 库名;

查看当前所有数据库
show databases;

打开指定的数据库
use 库名;

删除指定的数据库
drop database 库名;

查看当前在哪个数据库
select database();

查看数据库的存储引擎
show variables like 'storage_engine'

查看数据库的存储引擎
show variables like '%storage_engine%'

三. MySQL命令之表操作

创建表
create table if not exists 表名

查看当前数据库的所有表
show tables;

查看其他数据库的所有表
show tables from 库名;

查看表结构
desc 表名;
show index from 表名;
show create table 表名 \g

删除表
drop table [if exists] 表名;

四.MySQL语法规范

  • 不区分大小写,但建议关键字大写,表名,列名小写
  • 建议每条命令用分号结尾
  • 每条命令根据需要,可以进行缩进或换行
  • 注释
    • 单行注释:# 或 --格 注释文字
    • 多行注释:/.../

MySQL数据类型

数据类型 系统数据类型
整数型 TINYINY / SMALLINT / MEDIUMINT / INT / BIGINT
精确数值型 DECIMAL(M,D) / NUMERIC(M,D)
浮点型 FLOAT / REAL / DOUBLE
位型 BIT
二进制型 BINARY / VARBINARY
字符型 CHAR / VARCHAR / BLOB / TEXT / ENUM / SET
Unicode字符型 NCHAR / NVARCHAR
文本型 TINTTEXT / TEXT / MEDIUMTEXT / LONGTEXT
BLOB类型 TINYBLOB / BLOB / MEDIUMBLOB / LONGBLOB
日期时间型 DATETIME / DATE / TIMESTAMP / TIME / YEAR

五.DQL语言(主查询)

  • 基础查询

    • 语法

    select 查询列表 from 表名;

    • 类似于

    system.out.printLn(打印的东西)

    • 特点
      • 查询列表可以是
        1. 表中的字段
        2. 常量值
        3. 表达式
        4. 函数
      • 查询结果是一个虚数值
      • 起别名
        1. 使用AS

        select 要查询的字段 As 别名;

        1. 使用空格

        select 要查询的字段 别名;

      • 去重

      select distinct 要查询的字段 from 表名;

      • 拼接

      select concat(str1,str2,...) As 别名;

  • 条件查询

    • 语法

    select 查询列表 from 表名 where 筛选条件;

    • 筛选条件分类
      • 条件运算符
      >.<.=.!=.<>.>=.<=
      
      • 逻辑运算符
      &&(与) / ||(或) / !(非) / and / or / not
      
      • 模糊查询
      like / between / and / in / is null / is not null 
      

      like一般与通配符搭配使用
      - 通配符
      1. %:任意多个字符,包含0个字符
      2. _:任意单个字符

  • 排序查询

    • 语法:
    select * from student
    where [筛选条件]
    order by 排序列表 [asc | desc]
    

支持多字段排序,中间用,分割

  • 常见函数

    • 概念:类似Java中的方法
    1. 隐藏了实现细节
    2. 提高代码的重用性
    • 调用

    select 函数名() [from 表];

    • 分类
    1. 单行函数

    concat:拼接字符串
    length:个数
    ifnull:判断是否为空

    单行函数:
    	字符函数
    		获取参数值的字节个数
    		length
    
    		拼接字符串
    		concat
    
    		变大写
    		upper
    
    		变小写
    		lower
    
    		截取字符串
    		substr/substring
    
    		返回str2在str1中第一次出现的起始索引
    		instr(str1,str2)
    
    		去掉str2中前后的str1
    		trim(str1 form str2)
    			eg:select trim('a' from 'aaaStudentaaa');
    
    		用指定的字符实现左填充指定长度
    		lpad(str,len,str)
    
    		右填充
    		rpad
    
    		替换
    		replace
    
    	数学函数
    		四舍五入
    		round
    
    		向上取整
    		ceil
    
    		向下取整
    		floor
    
    		截断
    		truncate()
    
    		取余
    		mod
    		
    	日期函数
    		返回当前系统日期和时间
    		now
    
    		返回当前系统的日期,不包含时间
    		curdate
    
    		返回当前系统的时间,不包含日期
    		curtime
    
    		将日期格式字符转换成指定格式
    		str_to_date('9-13-2020','%m-%d-%y')
    
    		将日期转换为字符串
    		date_format('2020/11/16','%y年%m月%d日')
    
    		返回(date1-date2)的天数
    		DATEDIFF(date1,date2)
    
    	其他函数
    		查看MySQL版本号
    		version()
    
    		查看当前数据库
    		database()
    
    		查看当前用户
    		user()
    
    	流程控制函数
    		if函数:实现if else的效果
    		case函数:
    		      --switch case的效果
    			语法:(当then后面接的是语句的时候,要用';'结尾,值的话就不用)
    			case 要判断的字段或表达式
    			when 常量1 then 要显示的值1或语句1
    			when 常量2 then 要显示的值2或语句2
    			...
    			else 要显示的语句n或值
    			end
    		      --多重if
    
  • 分组函数

    • 功能:做统计使用,又称为统计函数、聚合函数、组函数
    分类:
    	求和
    	sum
    
    	平均值
    	avg
    
    	最大值
    	max
    
    	最小值
    	min
    
    	计算非空的值的个数
    	count
    
    • 特点:
      1. 一般sum、avg处理数值类型的数据
        max、min、count可以处理任何类型
      2. 以上分组函数都忽略null值
      3. 可以和distinct搭配去重
      4. count函数的详细介绍
        一般用count(*)统计行数
      5. 和分组函数一同查询的字段要求是group by后面的字段
    • 效率:

    MYISAM存储引擎下,count()效率最高
    innodb存储引擎下,count(
    )和COUNT(1)效率差不多,但比COUNT(字段)要高一些

  • 分组查询

    • 语法:

    select 分组函数,列(要求出现在group by的后面)
    from 表名
    【where 筛选条件】
    【group by 分组列表】
    【order by 子句】

  • 注意:查询列表必须特殊,要求是分组函数和group by后出现的字段

  • 特点:

    1. 分组查询中的筛选条件分为两类
      分组前筛选:从原始表筛选,放在group by前,用where关键字
      分组后筛选:分组后的结果集,放在group by后,用having关键字
    2. 分组函数做条件一定放在having子句中
    3. group by子句支持
      单个字段分组
      多个字段分组(多个字段之间用逗号来连接)
      表达式
      函数
    4. 也可以添加排序
  • 连接查询

    • 含义:又称为多表查询,多表连接,当查询的字段涉及/来自多个表时
    • 笛卡尔乘积现象:表1 m 行,表2 n 行,结果=m*n行
    • 如何发生:没有有效的连接条件
    • 如何避免:添加有效的连接条件
    • 分类:
    • 按年代分类

    sql92标准:仅仅支持内连接
    sql99标准【推荐】:支持内连接+外连接(左外、右外)+交叉连接

    • 按功能分类
      • 内连接

        等值连接
        非等值连接
        自连接

      • 外连接

        左外连接
        右外连接
        全外连接

      • 交叉连接
  • 子查询

  • 分页查询

  • union联合查询

六.DML语言(对表中的数据操作)

- 查看
select * from 表名;

- 插入
	- 语法一
	> insert into 表名 (字段名,...) value(值,[约束]),(值,[约束]);
	- 特点
		1. 要求值的类型和字段的类型一致或兼容
		2. 字段名和值要匹配
	- 语法二
	> insert into 表名 set=值,...;
	- 语法三
	> insert into 表名 values();

- 修改
	- 语法
	> update 表名 set 字段=值,字段=值 [where 筛选条件];

- 删除
	- 语法
	> delete from 表名 where id=1;
  • 标识列
    • 又称为自增长列

    • 含义:可以不用手动的插入值,系统提供默认的序列值

    • 特点

      1. 标识列必须与一个key搭配使用,可以是primary key、foreign key、unique……
      2. 一个表至多一个标识列
      3. 标识列类型只能是数值型
      4. 标识列可以通过:SET auto_increment_increment=3;设置步长
      5. 标识列可以通过手动插入值来设置起始值
    • 创建表时设置标识列

      • 关键词:auto_increment
      查看标识列
      show variables like '%auto_increment%';
      {
      auto_increment_increment:步长
      auto_increment_offset:默认值,MySQL中不支持修改默认值
      }
      

七. DDL语言(表字段操作)

  • 表的约束
    • 常见约束:六大约束
      非空约束
      not null
      
      默认约束
      default
      
      主键约束
      primary key
      
      外键约束
      foreign key
      
      唯一性约束
      类似于primary key,可以为空
      unique
      
      检查约束
      check
      
      
      • 约束可以分为表级约束和列级约束
      • 列级约束,在列后面添加
      • 表级约束

      constraint 约束名 约束类型;

修改表名
alter table 旧表名 rename [to] 新表名;

修改列名/字段语法规则
alter table 表名 change 原字段名 新字段名 新字段类型;

添加列
alter table 表名 add column 列名 类型 [first | after 字段名];

修改列类型或约束
alter table 表名 modify column 列名 新类型 [新约束];

删除某列
alter table 表名 drop column 列名;

复制旧表的结构
create table if not exists 表名 like 旧表名;

复制旧表的结构和数据
create table if not exists 表名 select 查询列表 from 旧表名 [where 筛选条件];

### 八.TCL语言(事务控制语言)
- TCL语言
- 通过show engines;来查看MySQL支持的存储引擎
- 其中innodb支持事务,而myisam,memory等不支持事务
- 事务的属性/特点:
	- 原子性:一个事务不可再分割,要么全部执行,要么全部不执行
	- 一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态
	- 隔离性:一个事务的执行不受其他事务的干扰
	- 持久性:一个事务一旦提交,则会永久的改变数据库的数据

分类:

MySQL

技术点:

相关文章: