建站堂

 找回密码
立即注册
热搜: 活动 交友 discuz

[mysql] 一千行 MySQL 详细学习笔记(值得学习与收藏)

[复制链接]
发表于 2021-7-7 10:02:17 | 显示全部楼层 |阅读模式
[quote]作者:shockerli
来源:https://shockerli.net/post/1000-line-mysql-note/
[/code]Windows服务
[code]-- 启动MySQL    net start mysql-- 创建Windows服务    sc create mysql binPath= mysqld_bin_path(注意:等号与值之间有空格)</pre>连接与断开服务器
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息</pre>数据库操作
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容</pre>表的操作
[code]-- 创建表    CREATE [TEMPORARY] TABLE[ IF NOT EXISTS] [库名.]表名 ( 表的结构定义 )[ 表选项]        每个字段必须有数据类型        最后一个字段后不能有逗号        TEMPORARY 临时表,会话结束时表自动消失        对于字段的定义:            字段名 数据类型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT &#39;string&#39;]-- 表选项    -- 字符集        CHARSET = charset_name        如果表没有设定,则使用数据库字符集    -- 存储引擎        ENGINE = engine_name        表在管理数据时采用的不同的数据结构,结构不同会导致处理方式、提供的特性操作等不同        常见的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive        不同的引擎在保存表的结构和数据时采用不同的方式        MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引        InnoDB表文件含义:.frm表定义,表空间数据和日志文件        SHOW ENGINES -- 显示存储引擎的状态信息        SHOW ENGINE 引擎名 {LOGS|STATUS} -- 显示存储引擎的日志或状态信息    -- 自增起始数        AUTO_INCREMENT = 行数    -- 数据文件目录        DATA DIRECTORY = &#39;目录&#39;    -- 索引文件目录        INDEX DIRECTORY = &#39;目录&#39;    -- 表注释        COMMENT = &#39;string&#39;    -- 分区选项        PARTITION BY ... (详细见手册)-- 查看所有表    SHOW TABLES[ LIKE &#39;pattern&#39;]    SHOW TABLES FROM 表名-- 查看表机构    SHOW CREATE TABLE 表名 (信息更详细)    DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE &#39;PATTERN&#39;]    SHOW TABLE STATUS [FROM db_name] [LIKE &#39;pattern&#39;]-- 修改表    -- 修改表本身的选项        ALTER TABLE 表名 表的选项        eg: ALTER TABLE 表名 ENGINE=MYISAM;    -- 对表进行重命名        RENAME TABLE 原表名 TO 新表名        RENAME TABLE 原表名 TO 库名.表名 (可将表移动到另一个数据库)        -- RENAME可以交换两个表名    -- 修改表的字段机构(13.1.2. ALTER TABLE语法)        ALTER TABLE 表名 操作名        -- 操作名            ADD[ COLUMN] 字段定义       -- 增加字段                AFTER 字段名          -- 表示增加在该字段名后面                FIRST               -- 表示增加在第一个            ADD PRIMARY KEY(字段名)   -- 创建主键            ADD UNIQUE [索引名] (字段名)-- 创建唯一索引            ADD INDEX [索引名] (字段名) -- 创建普通索引            DROP[ COLUMN] 字段名      -- 删除字段            MODIFY[ COLUMN] 字段名 字段属性     -- 支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上)            CHANGE[ COLUMN] 原字段名 新字段名 字段属性      -- 支持对字段名修改            DROP PRIMARY KEY    -- 删除主键(删除主键前需删除其AUTO_INCREMENT属性)            DROP INDEX 索引名 -- 删除索引            DROP FOREIGN KEY 外键    -- 删除外键-- 删除表    DROP TABLE[ IF EXISTS] 表名 ...-- 清空表数据    TRUNCATE [TABLE] 表名-- 复制表结构    CREATE TABLE 表名 LIKE 要复制的表名-- 复制表结构和数据    CREATE TABLE 表名 [AS] SELECT * FROM 要复制的表名-- 检查表是否有错误    CHECK TABLE tbl_name [, tbl_name] ... [option] ...-- 优化表    OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...-- 修复表    REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]-- 分析表    ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...</pre>数据操作
[code]-- 增    INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]        -- 如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表。        -- 可同时插入多条数据记录!        REPLACE 与 INSERT 完全一样,可互换。    INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]-- 查    SELECT 字段列表 FROM 表名[ 其他子句]        -- 可来自多个表的多个字段        -- 其他子句可以不使用        -- 字段列表可以用*代替,表示所有字段-- 删    DELETE FROM 表名[ 删除条件子句]        没有条件子句,则会删除全部-- 改    UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新条件]</pre>字符集编码
[code]-- MySQL、数据库、表、字段均可设置编码-- 数据编码与客户端编码不需一致SHOW VARIABLES LIKE &#39;character_set_%&#39;   -- 查看所有字符集编码项    character_set_client        客户端向服务器发送数据时使用的编码    character_set_results       服务器端将结果返回给客户端所使用的编码    character_set_connection    连接层编码SET 变量名 = 变量值    SET character_set_client = gbk;    SET character_set_results = gbk;    SET character_set_connection = gbk;SET NAMES GBK;  -- 相当于完成以上三个设置-- 校对集    校对集用以排序    SHOW CHARACTER SET [LIKE &#39;pattern&#39;]/SHOW CHARSET [LIKE &#39;pattern&#39;]   查看所有字符集    SHOW COLLATION [LIKE &#39;pattern&#39;]     查看所有校对集    CHARSET 字符集编码     设置字符集编码    COLLATE 校对集编码     设置校对集编码</pre>数据类型(列类型)

一千行 MySQL 详细学习笔记(值得学习与收藏)

一千行 MySQL 详细学习笔记(值得学习与收藏)




一千行 MySQL 详细学习笔记(值得学习与收藏)

一千行 MySQL 详细学习笔记(值得学习与收藏)




一千行 MySQL 详细学习笔记(值得学习与收藏)

一千行 MySQL 详细学习笔记(值得学习与收藏)




选择类型
[code]-- PHP角度1. 功能满足2. 存储空间尽量小,处理效率更高3. 考虑兼容问题-- IP存储 ----------1. 只需存储,可用字符串2. 如果需计算,查找等,可存储为4个字节的无符号int,即unsigned    1) PHP函数转换        ip2long可转换为整型,但会出现携带符号问题。需格式化为无符号的整型。        利用sprintf函数格式化字符串        sprintf(&#34;%u&#34;, ip2long(&#39;192.168.3.134&#39;));        然后用long2ip将整型转回IP字符串    2) MySQL函数转换(无符号整型,UNSIGNED)        INET_ATON(&#39;127.0.0.1&#39;) 将IP转为整型        INET_NTOA(2130706433) 将整型转为IP</pre>列属性(列约束)
[code]1. PRIMARY 主键    - 能唯一标识记录的字段,可以作为主键。    - 一个表只能有一个主键。    - 主键具有唯一性。    - 声明字段时,用 primary key 标识。        也可以在字段列表之后声明            例:create table tab ( id int, stu varchar(10), primary key (id));    - 主键字段的值不能为null。    - 主键可以由多个字段共同组成。此时需要在字段列表后声明的方法。        例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));2. UNIQUE 唯一索引(唯一约束)    使得某字段的值也不能重复。3. NULL 约束    null不是数据类型,是列的一个属性。    表示当前列是否可以为null,表示什么都没有。    null, 允许为空。默认。    not null, 不允许为空。    insert into tab values (null, &#39;val&#39;);        -- 此时表示将第一个字段的值设为null, 取决于该字段是否允许为null4. DEFAULT 默认值属性    当前字段的默认值。    insert into tab values (default, &#39;val&#39;);    -- 此时表示强制使用默认值。    create table tab ( add_time timestamp default current_timestamp );        -- 表示将当前时间的时间戳设为默认值。        current_date, current_time5. AUTO_INCREMENT 自动增长约束    自动增长必须为索引(主键或unique)    只能存在一个字段为自动增长。    默认为1开始自动增长。可以通过表属性 auto_increment = x进行设置,或 alter table tbl auto_increment = x;6. COMMENT 注释    例:create table tab ( id int ) comment &#39;注释内容&#39;;7. FOREIGN KEY 外键约束    用于限制主表与从表数据完整性。    alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);        -- 将表t1的t1_id外键关联到表t2的id字段。        -- 每个外键都有一个名字,可以通过 constraint 指定    存在外键的表,称之为从表(子表),外键指向的表,称之为主表(父表)。    作用:保持数据一致性,完整性,主要目的是控制存储在外键表(从表)中的数据。    MySQL中,可以对InnoDB引擎使用外键约束:    语法:    foreign key (外键字段) references 主表名 (关联字段) [主表记录删除时的动作] [主表记录更新时的动作]    此时需要检测一个从表的外键需要约束为主表的已存在的值。外键在没有关联的情况下,可以设置为null.前提是该外键列,没有not null。    可以不指定主表记录更改或更新时的动作,那么此时主表的操作被拒绝。    如果指定了 on update 或 on delete:在删除或更新时,有如下几个操作可以选择:    1. cascade,级联操作。主表数据被更新(主键值更新),从表也被更新(外键值更新)。主表记录被删除,从表相关记录也被删除。    2. set null,设置为null。主表数据被更新(主键值更新),从表的外键被设置为null。主表记录被删除,从表相关记录外键被设置成null。但注意,要求该外键列,没有not null属性约束。    3. restrict,拒绝父表删除和更新。    注意,外键只被InnoDB存储引擎所支持。其他引擎是不支持的。</pre>建表规范
[code]    -- Normal Format, NF        - 每个表保存一个实体信息        - 每个具有一个ID字段作为主键        - ID主键 + 原子表    -- 1NF, 第一范式        字段不能再分,就满足第一范式。    -- 2NF, 第二范式        满足第一范式的前提下,不能出现部分依赖。        消除符合主键就可以避免部分依赖。增加单列关键字。    -- 3NF, 第三范式        满足第二范式的前提下,不能出现传递依赖。        某个字段依赖于主键,而有其他字段依赖于该字段。这就是传递依赖。        将一个实体信息的数据放在一个表内实现。</pre>SELECT
[code]SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合计函数] -> HAVING -> ORDER BY -> LIMITa. select_expr    -- 可以用 * 表示所有字段。        select * from tb;    -- 可以使用表达式(计算公式、函数调用、字段也是个表达式)        select stu, 29+25, now() from tb;    -- 可以为每个列使用别名。适用于简化列标识,避免多个列标识符重复。        - 使用 as 关键字,也可省略 as.        select stu+10 as add10 from tb;b. FROM 子句    用于标识查询来源。    -- 可以为表起别名。使用as关键字。        SELECT * FROM tb1 AS tt, tb2 AS bb;    -- from子句后,可以同时出现多个表。        -- 多个表会横向叠加到一起,而数据会形成一个笛卡尔积。        SELECT * FROM tb1, tb2;    -- 向优化符提示如何选择索引        USE INDEX、IGNORE INDEX、FORCE INDEX        SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;        SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;c. WHERE 子句    -- 从from获得的数据源中进行筛选。    -- 整型1表示真,0表示假。    -- 表达式由运算符和运算数组成。        -- 运算数:变量(字段)、值、函数返回值        -- 运算符:            =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,            in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor            is/is not 加上ture/false/unknown,检验某个值的真假            <=>与<>功能相同,<=>可用于null比较d. GROUP BY 子句, 分组子句    GROUP BY 字段/别名 [排序方式]    分组后会进行排序。升序:ASC,降序:DESC    以下[合计函数]需配合 GROUP BY 使用:    count 返回不同的非NULL值数目  count(*)、count(字段)    sum 求和    max 求最大值    min 求最小值    avg 求平均值    group_concat 返回带有来自一个组的连接的非NULL值的字符串结果。组内字符串连接。e. HAVING 子句,条件子句    与 where 功能、用法相同,执行时机不同。    where 在开始时执行检测数据,对原数据进行过滤。    having 对筛选出的结果再次进行过滤。    having 字段必须是查询出来的,where 字段必须是数据表存在的。    where 不可以使用字段的别名,having 可以。因为执行WHERE代码时,可能尚未确定列值。    where 不可以使用合计函数。一般需用合计函数才会用 having    SQL标准要求HAVING必须引用GROUP BY子句中的列或用于合计函数中的列。f. ORDER BY 子句,排序子句    order by 排序字段/别名 排序方式 [,排序字段/别名 排序方式]...    升序:ASC,降序:DESC    支持多个字段的排序。g. LIMIT 子句,限制结果数量子句    仅对处理好的结果进行数量限制。将处理好的结果的看作是一个集合,按照记录出现的顺序,索引从0开始。    limit 起始位置, 获取条数    省略第一个参数,表示从索引0开始。limit 获取条数h. DISTINCT, ALL 选项    distinct 去除重复记录    默认为 all, 全部记录</pre>UNION
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息0</pre>子查询
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息1</pre>连接查询(join)
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息2</pre>导出
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息3</pre>INSERT
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息4</pre>DELETE
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息5</pre>TRUNCATE
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息6</pre>备份与还原
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息7</pre>视图
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息8</pre>事务(transaction)
[code]mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行SHOW VARIABLES -- 显示系统变量信息9</pre>锁表
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容0</pre>触发器
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容1</pre>

[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容2</pre>SQL编程
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容3</pre>用户和权限管理
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容4</pre>表维护
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容5</pre>杂项
[code]-- 查看当前数据库    SELECT DATABASE();-- 显示当前时间、用户名、数据库版本    SELECT now(), user(), version();-- 创建库    CREATE DATABASE[ IF NOT EXISTS] 数据库名 数据库选项    数据库选项:        CHARACTER SET charset_name        COLLATE collation_name-- 查看已有库    SHOW DATABASES[ LIKE &#39;PATTERN&#39;]-- 查看当前库信息    SHOW CREATE DATABASE 数据库名-- 修改库的选项信息    ALTER DATABASE 库名 选项信息-- 删除库    DROP DATABASE[ IF EXISTS] 数据库名        同时删除该数据库相关的目录及其目录内容6</pre>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|建站堂 ( 沪ICP备2021003614号-2 )

GMT+8, 2024-5-19 02:15 , Processed in 0.205631 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表