MySQL 笔记

结构化查询语言 - SQL

Structured Query Language - 结构化查询语言

警告

  1. 数据库中所有字符串类型必须使用 单引号 ,不能使用 双引号 ;日期类型也要使用 单引号

内容定义

定义解释
db_name数据库名
tab_name数据表名
tab_name_new新数据表名
charset_name字符集名
field_name字段名
field_name_new新字段名
field_type字段类型
ct_name约束名
ct_type约束类型:PRIMARY KEY、UNIQUE
ip_addrip地址
field_list字段列表,包括*

数据定义语言 - DDL

Data Definition Language - 数据定义语言

数据库

基本操作
  • 查询数据库

    SHOW DATABASE;
    
  • 切换数据库

    USE db_name;
    
  • 新建数据库

    CREATE DATABASE [IF NOT EXISTS] db_name [CHARSET=utf8];
    
  • 删除数据库

    DROP DATABASE [IF EXISTS] db_name;
    
  • 修改数据库

    ALTER DATABASE db_name CHARACRER SET utf8;
    

数据表

数据类型
分类数据类型含义(有符号)备注
整形tinyint(m)1个字节 范围(-128~127)m 显示位宽,不影响数据范围
mediumint(m)2个字节 范围(-32768~32767)
smallint(m)3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)
浮点型float(m,d)单精度浮点型 8位精度(4字节) m总位数,d小数位m,d 显示位宽,不影响数据范围
double(m,d)双精度浮点型 16位精度(8字节) m总位数,d小数位
float(m,d)单精度浮点型 8位精度(4字节) m总位数,d小数位
字符串char(n)固定长度,最多255个字符n 数据长度
varchar(n)固定长度,最多65535个字符
tinytext可变长度,最多255个字符
text可变长度,最多65535个字符
mediumtext可变长度,最多2的24次方-1个字符
longtext可变长度,最多2的32次方-1个字符
二进制_BLOB存储的数据只能整体读出-
_TEXT可以指定字符集,英文存储区分大小写
日期时间date日期 '2008-12-2'-
time时间 '12:25:36'
datetime日期时间 '2008-12-2 22:06:44'
timestamp自动存储记录修改时间
属性关键字
关键字含义
NULL数据列可包含NULL值
ZEROFILL零填充
DEFAULT默认值
UNSIGNED无符号
NOT NULL非空约束,数据列不允许包含NULL值
PRIMARY KEY主键约束,非空、唯一、被引用(外键)
AUTO_INCREMENT自增约束,自动递增,适用于整数类型
UNIQUE唯一约束,唯一、不可重复,可为NULL
FOREIGN KEY外键约束,必须是引用一张表的主键,可重复,可为空,可引用多个
CHARACTER SET charset_name指定一个字符集
基本操作
  • 查看当前数据库所有表

    SHOW TABLES;
    
  • 查看表索引

    SHOW INDEX FROM tab_name;
    
  • 创建表

    CREATE TABLE tab_name (
    	field_name field_type [ props ],
    	...
        [[CONSTRAINT ct_name] ct_type field_name ]
    );
    
  • 查看创建表的SQL语句

    SHOW CREATE TABLE tab_name;
    
  • 查看表结构

    DESC tab_name;
    
  • 删除表

    DROP TABLE tab_name;
    
  • 清空数据

    TRUNCATE TABLE tab_name;  # 先DROP,再CREATE,无法回滚
    
  • 修改表 - ALTER TABLE

    • 增加新字段

      ALTER TABLE tab_name 
      ADD(
      field_name field_type [props],
      );
      
    • 修改字段类型

      ALTER TABLE tab_name 
      MODIFY field_name field_type;
      
    • 修改字段定义

      ALTER TABLE tab_name 
      CHANGE field_name field_name_new field_type [ props ];
      
    • 删除字段

      ALTER TABLE tab_name 
      DROP field_name;
      
    • 修改表名

      ALTER TABLE tab_name 
      RENAME TO tab_name_new;
      
    • 添加字段约束

      ALTER TABLE tab_name ADD CONSTRAINT ct_name PRIMARY KEY( field_name );  # 添加主键约束
      ALTER TABLE tab_name ADD CONSTRAINT ct_name UNIQUE( field_name );  # 添加唯一约束
      ALTER TABLE tab_name ADD CONSTRAINT ct_name CHECK( field_name > 0 );  # 添加范围约束
      ALTER TABLE tab_name ADD CONSTRAINT ct_name DEFAULT value FOR field_name;  # 添加默认约束
      
约束操作
  • **PRIMARY KEY ** - 主键

    # 建表时指定字段 主键 属性
    CREATE TABLE tab_name(
    	field_name field_type PRIMARY KEY,
        ...
    );
    
    # 建表时通过 主键约束 指定字段
    CREATE TABLE tab_name(
    	field_name field_type,
        ...
        PRIMARY KEY( field_name )
    );
    
    # 修改表指定主键
    ALTER TABLE tab_name
    ADD PRIMARY KEY( field_name );
    
    # 修改表字段定义
    ALTER TABLE tab_name
    CHANGE field_name field_name_new field_type PRIMARY KEY;
    
    # 删除主键
    ALTER TABLE tab_name
    DROP PRIMARY KEY;
    
  • AUTO_INCREMENT - 自增

    # 建表时指定字段 自增 属性
    CREATE TABLE tab_name(
    	field_name field_type PRIMARY KEY AUTO_INCREMENT,
        ...
    );
    
    # 修改表字段定义时设置自增
    ALTER TABLE tab_name
    ADD PRIMARY KEY( field_name );
    
    # 删除自增
    ALTER TABLE tab_name
    DROP PRIMARY KEY;
    
  • UNIQUE - 唯一

    # 建表时指定字段 唯一 属性
    CREATE TABLE tab_name(
    field_name field_type UNIQUE,
        ...
    );
    
    # 建表时指定字段 联合唯一 属性
    CREATE TABLE tab_name(
    	field_name1 field_type,
        field_name2 field_type,
        ...
        UNIQUE KEY (field_name1, field_name2)
    );
    
    # 修改表字段定义时设置自增
    ALTER TABLE tab_name
    ADD PRIMARY KEY( field_name );
    
    # 删除自增
    SHOW CREATE TABLE tab_name;  # 产看 
    

数据库操作语言 - DML

Data Manipulation Language - 数据库操作语言

条件表达式运算符

条件表达式运算符含义
=等于
!=不等于
<>不等于,不包含
>大于
<小于
>=大于等于
<=小于等于
BETWEEN m AND n[m,n] 左右闭区间; 字符串比较是从左到右按位按照其ASCII值来进行比较
IN(o,p,q)字段值为 o,p,q 中任一为真
NOT 条件表达式非,取反
条件表达式 AND 条件表达式与,两条真则真
条件表达式 OR 条件表达式或,任一真为真
IS NULL字段内容为 NULL 则真
IS NOT NULL字段内容非 NULL 则真
LIKE_:占位符;%:通配符

基本操作

  • 插入数据 - INSERT INTO

    • 插入所有字段数据

      INSERT INTO tab_name
      VALUES( value1, value2, ... );
      
    • 插入部分字段数据

      INSERT INTO tab_name(field_name1, field_name2) 
      VALUES(value1, value2);
      
  • 更新数据 - UPDATE

    UPDATE tab_name
    SET field_name=value,...
    WHERE 条件表达式
    
  • 删除数据 - DELETE FROM

    DELETE FROM tab_name
    [WHERE 条件表达式]
    

数据控制语言 - DCL

Data Control Language - 数据控制语言

用户管理

约定
  1. 一个项目创建一个用户,一个项目对应的数据库只有一个
基本操作
  • 创建用户

    CREATE USER user_name@ip_addr IDENTIFIED BY 'pass_wd';  # ip_addr -> '%' 为任意ip_addr
    
  • 删除用户

    DROP USER user_name@ip_addr
    

权限管理

权限表
PrivilegeGrant Table ColumnContext
ALL [PRIVILEGES]Synonym for “all privileges”Server administration
ALTERAlter_privTables
ALTER ROUTINEAlter_routine_privStored routines
CREATECreate_privDatabases, tables, or indexes
CREATE ROUTINECreate_routine_privStored routines
CREATE TABLESPACECreate_tablespace_privServer administration
CREATE TEMPORARY TABLESCreate_tmp_table_privTables
CREATE USERCreate_user_privServer administration
CREATE VIEWCreate_view_privViews
DELETEDelete_privTables
DROPDrop_privDatabases, tables, or views
EVENTEvent_privDatabases
EXECUTEExecute_privStored routines
FILEFile_privFile access on server host
GRANT OPTIONGrant_privDatabases, tables, or stored routines
INDEXIndex_privTables
INSERTInsert_privTables or columns
LOCK TABLESLock_tables_privDatabases
PROCESSProcess_privServer administration
PROXYSee proxies_priv tableServer administration
REFERENCESReferences_privDatabases or tables
RELOADReload_privServer administration
REPLICATION CLIENTRepl_client_privServer administration
REPLICATION SLAVERepl_slave_privServer administration
SELECTSelect_privTables or columns
SHOW DATABASESShow_db_privServer administration
SHOW VIEWShow_view_privViews
SHUTDOWNShutdown_privServer administration
SUPERSuper_privServer administration
TRIGGERTrigger_privTables
UPDATEUpdate_privTables or columns
USAGESynonym for “no privileges”Server administration
权限操作
  • 查看用户权限

    SHOW GRANT FOR user_name@ip_addr;
    
  • 授予权限

    GRANT 权限清单 ON db_name.tab_name TO user_name@ip_addr;  # db_name.* -> 数据库 db_name 下所有表
    
  • 撤销权限

    REVOKE 权限清单 ON db_name.tab_name FROM user_name@ip_addr;
    
  • 刷新权限

    flush privileges;
    

数据查询语言 - DQL

Data Query Language - 数据查询语言

基本查询

SELECT *
FROM tab_name
WHERE 条件表达式

排序 - ORDER BY

SELECT *
FROM tab_name
WHERE 条件表达式
ORDER BY field_name [ASC | DESC] [, field_name [ASC | DESC] ... ]

# ASC 升序, DESC 降序
# 如果 排序字段出现相等的值,则该部分按后续排序规则进行排序

字段控制

  • 完全重复的记录只显示一次

    SELECT DISTINCT field_list 
    FROM tab_name;
    
    # 当查询的记录出现完全一致时,只显示一次,多数出现在只查询部分列的场景
    
  • 字段运算

    • 字段类型为 数量类型 时可进行 四则运算

      SELECT field_name + [-,*,/] value
      FROM tab_name
      
    • 字段类型为 字符串类型 时可进行 连接运算

      SELECT CONCAT(str,str,...)
      FROM tab_name
      
      # 可将合适位置的 str 换成 字段名 进行字符串拼接
      
    • NULL 值转换

      SELECT IFNULL(field_name,value)
      FROM tab_name;
      
      # 将字段值为NUll的用value替换
      
    • 给字段起别名

      SELECT field_name as field_name_new
      FROM tab_name;
      
      # field_name 可为 SELECT 函数产生的列名;
      # field_name field_name_new  <=>  field_name as field_name_new
      
  • 聚合函数

    • COUNT( ) - 计数

      # 返回表中总行数,不忽略 NULL,COUNT(1)效果类似
      SELECT COUNT(*)
      FROM tab_name;
      
      # 返回字段除值为 NULL 外的总行数
      SELECT COUNT( field_name )
      FROM tab_name;
        
        # 返回字段值不重复,且忽略 NULL的总行数
        SELECT COUNT( DISTINCT field_name )
        FROM tab_name;
      
    • MAX( field_name ) - 字段最大值

      SELECT MAX( field_name )
      FROM tab_name
      
    • MIN( field_name ) - 字段最小值

      SELECT MIN( field_name )
      FROM tab_name
      
    • SUM( field_name ) - 字段和

      SELECT SUN( field_name )
      FROM tab_name
      
      #忽略 NULL,NULL + 1 = NULL
      
    • AVG( field_name ) - 字段平均值

      SELECT AVG( field_name )
      FROM tab_name;
      
      #忽略 NULL 行
      

分组查询 - GROUP BY

SELECT field_name [, 聚合函数 ]
FROM tab_name
WHERE 条件表达式
GROUP BY field_name

# 查询的字段应该和分组字段保持一致,可组合的列名为聚合函数,在逻辑层面才有意义

LIMIT - MySQL方言

SELECT field_list
FROM tab_name
WHERE 条件表达式
LIMIT m,n

# 查询结果从下标m开始,取n行,类似分页效果

多表查询

  • 合并结果集

    对两个结果集进行并集操作

    1. SELECT 语句列的数量、顺序必须相同,字段的类型也要求相似( 合并的是 SELECT 的结果集合 );

    2. 结果集的列名为第一个SELECT语句中的字段名;

    3. 可带 WHEREORDER BY 关键字:

    SELECT field_name FROM tab_name
    UNION
    SELECT field_name FROM tab_name
    WHERE 条件表达式
    ORDER BY field_name
    
    # UNION  不包括重复行,相当于 DISTINCT 属性
    # UNION ALL 包括重复的记录
    
  • 连接查询

    • 内连接

      只显示满足连接条件的结果集

      # 标准 - INNER JOIN
      SELECT field_list
      FROM tab_name_1 alias_name_1 INNER JOIN tab_name_2 alias_name_2
      ON alias_name_1.field_name = alias_name_2.field_name
      
      # 自然 - NATURAL JOIN  (自动寻找两张表相同的字段,筛选笛卡儿积。)
      SELECT field_list
      FROM tab_name_1 alias_name_1 NATURAL JOIN tab_name_2 alias_name_2
      
      # MySQL 方言,使用 "," 连接表,通过 WHERE 筛选条件
      SELECT field_name
      FROM tab_name_1, tab_name_2
      WHERE 条件表达式
      
    • 外连接

      一主一从,当主表存在不满足连接条件的记录,用NULL补全从表显示

      # LEFT OUTER JOIN - 左表为主表,左表存在右表不存在的记录时,右表查询字段用NULL补全
      SELECT field_list
      FROM tab_name_1 LEFT OUTER JOIN tab_name_2
      ON alias_name_1.field_name = alias_name_2.field_name 
      
      # RIGHT OUTER JOIN - 右表为主表,左表存在右表不存在的记录时,左表查询字段用NULL补全
      SELECT field_list
      FROM tab_name_1 RIGHT OUTER JOIN tab_name_2
      ON alias_name_1.field_name = alias_name_2.field_name 
      
    • 自然连接

      # 内连接
      NATURAL JOIN
      
      # 外连接
      NATURAL LEFT OUTER JOIN
      NATURAL RIGHT OUTER JOIN
      
  • 子查询

    查询中有查询

    1. WHERE 后作为条件

      • 单行单列

        SELECT field_list
        FROM tab_name
        WHERE field_name [ =, >, <, >=, <=, != ] ( SELECT ... FROM ... WHERE... )
        
      • 多行单列

        SELECT field_list
        FROM tab_name
        WHERE field_name [ IN, ALL, ANY ] ( SELECT ... FROM ... WHERE... )
        
      • 单行多列

        SELECT field_list
        FROM tab_name
        WHERE field_name IN( SELECT ... FROM ... WHERE... )
        
    2. FROM 后作为数据表,需要使用别名

      • 多行多列

        SELECT alias.field_list
        FROM ( SELECT ... FROM ... WHERE... ) alias
        WHERE 条件表达式
        

概念模型

序号概念理解
1一对多一张表的一个字段的值取值范围是另一张表的一个字段值
2多对多两张表相互存在一对多关系,通过中间表建立关系
3一对一副表的主键的取值范围是另一张表的主键(唯一,非空,被引用)

维护

编码

  • 查看数据库编码

    SHOW VARIABLES LIKE 'char%';
    
    Variable_nameValue标注
    character_set_clientutf8mb4所有客户端发过来的数据,都以 Value 设定的字符集存储
    character_set_connectionutf8mb4
    character_set_databaseutf8mb4
    character_set_filesystembinary
    character_set_resultsutf8mb4服务器把所有查询结果以 Value 设定的字符集发给客户端
    character_set_serverutf8mb4
    character_set_systemutf8mb3
    character_sets_dir/usr/share/mysql/charsets/
  • 临时改编码

    set character_set_client=gbk;
    set character_set_results=gbk;
    
    # 只在当前窗口有效
    
  • 永久改编码

    [mysql]
    default-character-set=gbk; 
    
    #同时设定 client,results,connection 字符集
    

备份与恢复

  • 备份
    # 通过 shell命令 备份
    mysqldump -uroot -p123 db_name > sql_path
    
  • 恢复
    # 通过 shell命令 恢复
    mysql -uroot -p123 db_name < sql_path
    
    # 通过 MySQL客户端 恢复
    MySQL > USE db_name; SOURCE sql_path;
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
CSDN是一个技术交流平台,里面有许多关于各种编程语言和数据库的学习资料和笔记。而MySQL是其中一种常用的关系型数据库管理系统,也是开放源代码软件之一。 在CSND上,MySQL笔记是指关于MySQL数据库的学习和使用的笔记和教程。这些笔记包含了MySQL数据库的基本概念、安装配置、SQL语句的使用、数据表的设计和管理、索引使用、数据备份和恢复等方面的知识。学习MySQL笔记可以帮助开发者更好地理解和应用MySQL数据库MySQL笔记主要可以分为以下几个方面来介绍和学习: 1. 数据库基础知识:学习数据库的基本概念和原理,了解关系型数据库的特点以及MySQL的特点。 2. 安装和配置:学习如何在不同操作系统上安装和配置MySQL数据库,包括设置用户名、密码和端口等。 3. SQL语句的使用:学习SQL语句的基本语法和常用命令,包括查询、插入、更新、删除等操作。 4. 数据表的设计和管理:学习如何设计和创建数据表,包括选择适当的数据类型、设置主键和外键等。 5. 索引的使用:学习如何创建和使用索引来提高查询效率和数据访问速度。 6. 数据备份和恢复:学习如何进行MySQL数据库的数据备份和恢复,包括全量备份和增量备份等。 通过学习MySQL笔记,开发者可以掌握MySQL数据库的基本操作和高级功能,提高数据管理和查询的效率。此外,还可以了解MySQL数据库的优化技巧和性能调优方法,提升数据库的性能和稳定性。 总之,通过CSDN上的MySQL笔记,开发者可以系统地学习和掌握MySQL数据库的相关知识,从而更好地应用于实际的项目开发中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值