今天看啥
    热点:

      天发国际娱乐官网:俄罗斯《观点报》网站3月25日刊文称,中国与巴基斯坦已将两国关系推至新高度,中国军队参加巴基斯坦阅兵仪式就是最具象征性的鲜明例证之一。

      MySQL Base,mysqlbase



      /* 连接与断开服务器 */
      mysql -h 地址 -P 端口 -u 用户名 -p 密码
      ---> input pwd

       /* 数据库存贮引擎 */
          InnoDB :
              1) 具有提交、回滚和奔溃恢复及事务处理能力(ACID)
         2) 能处理大数据量
         3) 支持外键约束、关联查询

          MyISAM :
        1) 支持大文件、大字段,BLOB 和 TEXT 可以被索引
             2) 有较高的插入、查询速度

       
      /* 数据库操作 */
      -- 查看已有库
            SHOW DATABASES;
        -- 创建数据库         CREATE DATABASE [if not exists] dbName options;         USE dbName;      SHOW TABLES;      DROP DATABASE dbName;  //删除数据库

       

      /* 数据表操作 */

      -- ----------------------------
      -- Table structure for leave_message_topic, design by yaok
      -- ----------------------------
      DROP TABLE IF EXISTS `leave_message_topic`;
      CREATE TABLE `leave_message_topic` (
        `topic_id` varchar(64) NOT NULL COMMENT '留言主题id',
        `topic_name` varchar(64) CHARACTER SET utf8mb4 NOT NULL COMMENT '主题名称',
        `topic_context` text CHARACTER SET utf8mb4 COMMENT '主题内容',
        `sender` varchar(64) NOT NULL COMMENT '发送人ID',
        `sender_name` varchar(200) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '发送人名称',    -- 可以省略,一般通过userId查找name
        `is_show` varchar(32) DEFAULT 'SHOW' COMMENT '是否展示(展示 SHOW,隐藏 HIDE)',
        `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
        `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
        `delete_flag` int(1) DEFAULT '0' COMMENT '删除标志(0:正常1:删除)',
        PRIMARY KEY (`topic_id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户留言主题表';


      -- 查看表
        DESC leave_message_topic;

       --添加/修改字段
          ALTER TABLE `risk_special_list`
              ADD COLUMN `updateDesc` VARCHAR(50) NULL COMMENT `修改原因` AFTER `updateByType`,    //添加字段
              CHANGE `valid` `valid` TINYINT(1) DEFAULT 1 NOT NULL COMMENT `数据状态 (0:无效 1:有效)`;   //修改字段

       

      /* 数据操作 (DML) */

      /* 数据操作 */
         --
           INSERT [INTO] tbName [(字段列表)] VALUES (值列表)[, (值列表), ...]
              -- 如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表。
              -- 可同时插入多条数据记录!
                REPLACEINSERT 完全一样,可互换。
                INSERT [INTO] tbName SET 字段名=[, 字段名=值, ...]
              -- 多表插入、复制
                   INSERT INTO db1_name (field1, field2)  SELECT field1, field2 FROM db2_name  //适合二张表
                   INSERT INTO a (field1, field2)  SELECT * FROM(SELECT b.f1, c.f2 FROM b JOIN c) AS tb   //适合多张表
         --
          SELECT colName FROM tbName
              -- 可来自多个表的多个字段
              -- 其他子句可以不使用
              -- 字段列表可以用*代替,表示所有字段
         --
            DELETE FROM tbName
                 没有条件子句,则会删除全部
             -- delete不能进行多表删除,可以做联级删除 (关联后删除)
                  delete t1,t2 from t1,t2 where 条件
      TRUNCATE TABLE tbName; //彻底删除记录,不能恢复
      -- UPDATE tbName SET 字段名=新值[, 字段名=新值] [更新条件] -- 多表关联更新 UPDATE flat_community, city_business_area SET flat_community.districtId = city_business_area.districtId WHERE flat_community.businessId = city_business_area.id AND city_business_area.id = 123
      
      

      /* 连接查询(join) */

        将多个表的字段进行连接,可以指定连接条件。
        -- 内连接(inner join) 
            - 只有数据存在时才能发送连接。即连接结果不能出现空行。
           on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真)

        -- 外连接(outer join)     
            - 左外连接 left join : 如果数据不存在,左表记录会出现,而右表为null填充
            - 右外连接 right join :如果数据不存在,右表记录会出现,而左表为null填充
        -- 自然连接(natural join)
            -自动判断连接条件完成连接。
          相当于省略了using,会自动查找相同字段名。
          natural join
          natural left join
          natural right join

       

      /* 数据类型 */
      http://www.1click-soft.com/tfgjylgw/doc/refman/5.7/en/data-types.html

       

      /* 列属性、约束 */
      -- 主键
      - 能唯一标识记录的字段,可以作为主键
      - 一个表只能有一个主键
      - 主键具有唯一性
      - 声明字段时,用 primary key 标识
      也可以在字段列表之后声明
      ex:create table tab ( id int, stu varchar(10), primary key (id));
      - 主键字段的值不能为null。
      - 主键可以由多个字段共同组成。此时需要在字段列表后声明的方法。
      ex: create table tab ( id int, stu varchar(10), age int, primary key (stu, age));

      -- unique 唯一索引(唯一约束)
      使得某字段的值也不能重复

      -- null 约束
      null不是数据类型,是列的一个属性
      表示当前列是否可以为null,表示什么都没有
      null, 允许为空。默认
      not null, 不允许为空
      insert into tab values (null, 'val');
      -- 此时表示将第一个字段的值设为null, 取决于该字段是否允许为null

      -- default 默认值属性
      当前字段的默认值
      insert into tab values (default, 'val'); -- 此时表示强制使用默认值
      create table tab ( add_time timestamp default current_timestamp );
      -- 表示将当前时间的时间戳设为默认值。
      current_date, current_time

      -- auto_increment 自动增长约束
      自动增长必须为索引(主键或unique)
      只能存在一个字段为自动增长
      默认为1开始自动增长。可以通过表属性 auto_increment = x进行设置,或 alter table tbl auto_increment = x;

      -- comment 注释
      ex:create table tab ( id int ) comment '注释内容';

       

      /* 字符集编码 */ ------------------
      -- MySQL、数据库、表、字段均可设置编码
      -- 数据编码与客户端编码不需一致
      SHOW VARIABLES LIKE 'character_set_%' -- 查看所有字符集编码项
      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 'pattern']/SHOW CHARSET [LIKE 'pattern'] 查看所有字符集
      SHOW COLLATION [LIKE 'pattern'] 查看所有校对集
      charset 字符集编码 设置字符集编码
      collate 校对集编码 设置校对集编码

       

      /* select */ ------------------

      select [all|distinct] select_expr from -> where -> group by [合计函数] -> having -> order by -> limit

      a. 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; 

      c. where 子句
      -- 从from获得的数据源中进行筛选。
      -- 整型1表示真,0表示假。

        SELECT * FROM user_landlord
            WHERE 1=1
            AND ( name LIKE #{value} OR phone LIKE #{value} )
                -- 条件判断格式比较鲜明,一般用于动态SQL条件判断

      -- 表达式由运算符和运算数组成。
      -- 运算数:变量(字段)、值、函数返回值
      -- 运算符:
      =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
      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 使用:

      with rollup : 是否对分类聚合后进行再汇总
      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, 全部记录

      /* delete & truncate */ ------------------
      DELETE FROM tbl_name [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]
      
      按照条件删除(WHERE), 指定删除的最多记录数。Limit,可以通过排序条件删除。order by + limit
      
      支持多表删除,使用类似连接语法。
      delete from 需要删除数据多表1,表2 using 表连接操作 条件。
      
      /* truncate */
      TRUNCATE [TABLE] tbl_name
      清空数据
      删除重建表
      
      区别:
      1,truncate 是删除表再创建,delete 是逐条删除
      2,truncate 重置auto_increment的值。而delete不会
      3,truncate 不知道删除了几条,而delete知道。
      4,当被用于带分区的表时,truncate 会保留分区

       

      /* 子查询 */ ------------------
      - 子查询需用括号包裹。
      -- from型
      from后要求是一个表,必须给子查询结果取个别名。
      - 简化每个查询内的条件。
      - from型需将结果生成一个临时表格,可用以原表的锁定的释放。
      - 子查询返回一个表,表型子查询。
      select * from (select * from tb where id>0) as subfrom where id>1;

      -- where型
      - 子查询返回一个值,标量子查询。
      - 不需要给子查询取别名。
      - where子查询内的表,不能直接用以更新。
      select * from tb where money = (select max(money) from tb);

      -- 列子查询
      如果子查询结果返回的是一列。
      使用 in 或 not in 完成查询
      exists 和 not exists 条件
      如果子查询返回数据,则返回1或0。常用于判断条件。
      select column1 from t1 where exists (select * from t2);

      /* EXISTS , IN */     exists:  强调是否返回结果集,无需知道返回什么,有返回判断为真,反之假 (ex: exists_in用法举例.sql),对外表做Loop循环,每次循环再对内表进行查询      in :  外表和内表做hash连接,内层语句返回一个数据列           如两表大小相当,则都可以用;如一大一小,子表大用exist,小用in           ex1: (a小b大)               SELECT id, name FROM a WHERE EXISTS (SELECT * FROM b WHERE a.id = b.aid) ;               // 有值返回真,显示对应a表id, name,无值则不返回,b表如是大表用exists,小表用in               OR   SELECT id, name FROM b WHERE cc IN (SELECT cc FROM a)           ex2:               UPDATE flat_flats f1 SET f1.districtId = 3 WHERE EXISTS (select 1 from flat_community f2 where f2.businessId = 33 and f1.communityId = f2.id) ;     // 批量更新      /* NOT EXISTS , NOT  IN */       NOT IN 逻辑上不完全等同于 NOT EXISTS,会调用子查询,不会走索引

      -- 行子查询
      查询条件是一个行。
      select * from t1 where (id, gender) in (select id, gender from t2);
      行构造符:(col1, col2, ...) 或 ROW(col1, col2, ...)
      行构造符通常用于与对能返回两个或两个以上列的子查询进行比较。

      -- 特殊运算符
      != all() 相当于 not in
      = some() 相当于 in。any 是 some 的别名
      != some() 不等同于 not in,不等于其中某一个。
      all, some 可以配合其他运算符一起使用。

       

      /* 连接查询(join) */ ------------------
      将多个表的字段进行连接,可以指定连接条件。
      -- 内连接(inner join)
      - 默认就是内连接,可省略inner。
      - 只有数据存在时才能发送连接。即连接结果不能出现空行。
      on 表示连接条件。其条件表达式与where类似。也可以省略条件(表示条件永远为真)
      也可用where表示连接条件。
      还有 using, 但需字段名相同。 using(字段名)


      -- 左外连接 left join
      如果数据不存在,左表记录会出现,而右表为null填充
      -- 右外连接 right join
      如果数据不存在,右表记录会出现,而左表为null填充
      -- 自然连接(natural join)
      自动判断连接条件完成连接。
      相当于省略了using,会自动查找相同字段名。
      natural join
      natural left join
      natural right join

      /* 事务(transaction) */ ------------------
      事务是指逻辑上的一组操作,组成这组操作的各个单元,要不全成功要不全失败。
      - 支持连续SQL的集体成功或集体撤销。
      - 事务是数据库在数据晚自习方面的一个功能。
      - 需要利用 InnoDB 或 BDB 存储引擎,对自动提交的特性支持完成。
      - InnoDB被称为事务安全型引擎。

      -- 事务开启
      START TRANSACTION; 或者 BEGIN;
      开启事务后,所有被执行的SQL语句均被认作当前事务内的SQL语句。
      -- 事务提交
      COMMIT;
      -- 事务回滚
      ROLLBACK;
      如果部分操作发生问题,映射到事务开启前。

      -- 事务的特性
      1. 原子性(Atomicity)
      事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
      2. 一致性(Consistency)
      事务前后数据的完整性必须保持一致。
      - 事务开始和结束时,外部数据一致
      - 在整个事务过程中,操作是连续的
      3. 隔离性(Isolation)
      多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离。
      4. 持久性(Durability)
      一个事务一旦被提交,它对数据库中的数据改变就是永久性的。

      -- 事务的实现
      1. 要求是事务支持的表类型
      2. 执行一组相关的操作前开启事务
      3. 整组操作完成后,都成功,则提交;如果存在失败,选择回滚,则会回到事务开始的备份点。

      -- 事务的原理
      利用InnoDB的自动提交(autocommit)特性完成。
      普通的MySQL执行语句后,当前的数据提交操作均可被其他客户端可见。
      而事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作。

      -- 注意
      1. 数据定义语言(DDL)语句不能被回滚,比如创建或取消数据库的语句,和创建、取消或更改表或存储的子程序的语句。
      2. 事务不能被嵌套

      -- 保存点
      SAVEPOINT 保存点名称 -- 设置一个事务保存点
      ROLLBACK TO SAVEPOINT 保存点名称 -- 回滚到保存点
      RELEASE SAVEPOINT 保存点名称 -- 删除保存点

      -- InnoDB自动提交特性设置
      SET autocommit = 0|1; 0表示关闭自动提交,1表示开启自动提交。
      - 如果关闭了,那普通操作的结果对其他客户端也不可见,需要commit提交后才能持久化数据操作。
      - 也可以关闭自动提交来开启事务。但与START TRANSACTION不同的是,
      SET autocommit是永久改变服务器的设置,直到下次再次修改该设置。(针对当前连接)
      而START TRANSACTION记录开启前的状态,而一旦事务提交或回滚后就需要再次开启事务。(针对当前事务)

       

      www.1click-soft.comtruehttp://www.1click-soft.com/Mysql/1228981.htmlTechArticleMySQL Base,mysqlbase /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 - p 密码 --- input pwd /* 数据库存贮引擎 */ InnoDB : 1) 具有提交、回滚和...

      相关文章

      相关搜索: ports

      帮客评论

      视觉看点
      百度 360 搜狗