zoukankan      html  css  js  c++  java
  • mysql

    MySQL是多用户多线程的DBMS,默认支持的存储机制是 InnoDB,InnoDB 通过建立行级锁保证事务的完整性,通过共享锁处理 select 语句,以提供事务安全的存储机制。
    引擎管理和处理数据,MySQL支持多种引擎:

    • InnoDB :提供可靠的事务处理,但不支持全文本搜索。
    • MyISAM:性能高、支持全文本搜索,但不支持事务处理。

    工具的安装和使用

    命令行应用程序安装教程:mysql-5.7.15-winx64.zip安装教程常用指令

    net start/stop mysql  // 登录/退出mysql
    mysql [-h 主机名] -u 用户名 -p  (mysql@sqh)
    create user 用户名 identified by '密码'; // 创建用户
    

    图形化交互界面工具:mysql-workbench 或 Navicat for MySQL 或 dbvaver

    基本操作

    show databases:数据库实例包含的数据库
    use/select 数据库名:选择/查看数据库信息
    show tables:数据库中包含的数据表
    show columns from 表名:表列信息
    analyze table 表名; 检查表键是否正确
    optimize table 表名; 优化表空间
    show processlist;显示活动的线程
    

    关于授权

    grant|revoke all privileges on *.* to 'username'@'%' identified by 'pwd' with grant option //授权|回收
    flush privileges //刷新权限
    show grants for 'username'@'localhost' //查看用户权限
    

    编码信息

    SHOW CREATE DATABASE db_name //查看数据库编码
    SHOW CREATE TABLE tb_name //查看表编码
    SHOW FULL COLUMNS FROM tb_name //查看字段编码
    //修改编码
    ALTER DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tbl_name CHANGE 'column_name' 'column_name' 类型 CHARACTER SET utf8 COLLATE utf8_general_ci
    //把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name CHARACTER SET utf8 COLLATE utf8_general_ci 
    

    参见:基础概念

    关键字

    insert:MySql支持在单个insert语句中插入多个values值,且效率高。
    where - having:where 子句过滤行,having 子句过滤组;只能在 having 子句中使用组函数(聚合函数);
    or - in:in 优于 or,速度快,可以包含select子句,与not操作符结合简化SQL语句;
    like - regexp:like利用通配符*和_进行字符串匹配,完全匹配列值;regexp,正则表达式,部分匹配列值,利用^xxx$可完全匹配列值,效果等效于like,其中^和$是定位符分别对应首和尾。binary regexp可区分大小写
    limit:限制选取的行数,MySQL-5新增 limit ... offset ... 语法;
    auto_increment:自动增加,每个表只允许有一列且必须被索引。返回值:(1)last _ insert _ id(); (2)after insert 触发器:
    

    varchar 和 char

    • char定长,varchar变长
    • char限制255字符,与编码无关,varchar限制65532字符,与编码有关
      Latin1、GBK、UTF8的一个字符分别占用1、2、3字节,相应字符限制65532、32766、21844个

    CHARACTER SET utf8 COLLATE utf8_general_ci

    • CHARACTER SET:设置数据库/表的字符集编码
    • COLLATE:数据库/表校对规则
    COLLATE utf8_bin:字符串的每个字符用二进制数据存储,区分大小写
    COLLATE utf8_general_ci/cs:表示不/区分大小写
    

    若建表时选择区别大小写的规则,查询时又不想区别,可以用类似WHERE col_name COLLATE utf8_general_ci='xxx'方式改变查询时的校对规则。新建数据库时一般选用utf8_general_ci即可。mysql编码规则

    primary key 和 unique

    ON UPDATE CURRENT_TIMESTAMP
    当前记录有字段更新,即更新该字段为当前时间

    time1 datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP #自动更新
    time2 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP (ON UPDATE CURRENT_TIMESTAMP) #自动更新
    time3 datetime NOT NULL DEFAULT CURRENT_TIMESTAMP #创建字段更新,后续不自动更新
    

    参考1 参考2

    函数

    //系统函数
    select Now()/Date()/Time();   //时间日期
    select Version();   //版本信息
    //处理函数
    Concat():字符串拼接
    Substring();截取子串
    Locate():查找子串
    

    多表查询

    交叉连接 cross join:笛卡尔乘积,无连接条件;
    自然连接 natural join:以 2 表中的所有同名列为连接条件,内部连接的一种

    • using 子句连接:显式指定某些同名列为连接条件

    左、右、全外连接 left/right/full join:

    • on 子句连接:常用连接方式

    约束

    使用 auto_increment 支持自增长特性,支持除 check 外的 4 种完整性约束:

    not null:非空约束
    unique:唯一约束
    primary key:主键约束
    foreign key:外键约束,参照完整性
    

    级联删除:删除主表记录时,关联的从表记录也删除,则需要在建立外键约束的后面增加 on delete cascade 或 on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。
    具体使用可参见:MySQL-约束

    索引

    模式Schema中的一个数据库对象,从属于数据表。通过快速路径访问方法快速定位数据、加快对表的查询。缺点是索引的存储占用空间、索引的维护有系统开销。

    视图

    一个或多个数据表中记录的逻辑显示。通过 with check option 子句强制不允许修改视图的数据。

    • 提供数据的独立性
    • 简化查询
    • 限制对数据的访问,提供对相同数据的不同显示

    视图的本质是一条被命名的SQL查询语句。利用子查询建立视图,同样可以建立表:

    create or replace view 视图名 as 子查询语句
    查看视图创建语句:show create view 视图名;
    更新视图:create or replace view 视图名;
    

    存储过程

    以call调用存储过程。

    查看存储过程创建语句:show create procedure 存储过程名;
    查看存储过程附加信息:show procedure status like '存储过程名';
    

    游标

    MySql游标只能用于存储过程和函数。
    内部定义顺序:局部变量,游标,句柄

    触发器

    trigger只能关联表,常用的NEW(可更新、可读)表和OLD(只读)表是针对当前触发器的局部表,在高速缓存中存储新插入或删除的行数据的副本。创建:

    create trigger 触发器名 after/before insert/delete/update on 表名
    for each row 
    begin 
      SQL处理语句;
    end;
    

    其中,before用于数据验证,保证操作的合法性和待操作数据的正确性。

    事务

    以start transaction标识事务开始。

    全文本搜索

    MySql要求被检索的列在创建表时必须加索引,即利用 fulltext(列名) 启用全文本搜索,会自动维护更新该索引,通过 Match(列名) Against('模式串') 执行全文本搜索。

    • fulltext速度比like快;
    • 明确控制文本匹配,对检索结果按等级值智能排序

    查询扩展:模糊匹配,MySql对数据和索引进行2遍扫描完成搜索。 Match(列名) Against('模式串' with query expansion)
    布尔文本搜索:无需定义fulltext索引,利用全文本布尔操作符明确控制文本匹配模式,效率低。 Match(列名) Against('模式串' in boolean mode)

  • 相关阅读:
    Linux文件属性
    [Oracle] Listener的动态注册
    jQuery easyUI Pagination控件自定义div分页(不用datagrid)
    桂林电子科技大学出校流量控制器Android版1.0.0
    php使用check box
    Python windows ping
    Python selenium chrome 环境配置
    Linux wget auto login and backup database
    PyQt4 ShowHMDB show sqlite3 with QTableWidget summary
    PyQt4 py2exe 打包 HardwareManager
  • 原文地址:https://www.cnblogs.com/wjcx-sqh/p/13399868.html
Copyright © 2011-2022 走看看