mysql数据库常用要点记录

MyBatis在insert插入操作时返回主键ID的配置:

MySQL用法:

<insert id="insert" parameterType="com.test.User"  keyProperty="userId" useGeneratedKeys="true" >

上面配置中,“keyProperty”表示返回的id要保存到对象的那个属性中,“useGeneratedKeys”表示主键id为自增长模式。

Oracle用法:

<insert id="insert" parameterType="com.test.User">
   <selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">  
       SELECT SEQ_USER.NEXTVAL as userId from DUAL
   </selectKey> 
    insert into user (user_id,)values (#{userId,jdbcType=INTEGER}) 
</insert>

需要注意的是:由于Oracle没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性。

而是使用<selectKey>将ID获取并赋值到对象的属性中,insert插入操作时正常插入id。


mybatis中的#{}和${}区别:

#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,$将传入的数据直接显示生成在sql中。

#方式能够很大程度防止sql注入$方式一般用于传入数据库对象,MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建
预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName},这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

使用语法:  #{columnName},  ${columnName}  , in (${departmentId})  #拼接数据时会自动加双引号所以使用$


MYSQL IF 和 IFNULL:

IF函数  表达式:IF(expr1,expr2,expr3) 满足条件expr1即条件expr1返回true 则expr2 否则就是expr3,  SELECT IF(1=1,2,3); 则输出2

IFNULL函数 表达式:IFNULL(expr1,expr2) 如果expr1值为NULL,则输出expr2 如果expr1值不为空则输出expr1本身


MYSQL 字段拼接成新字段:

表达式: CONCAT()   示例:SELECT CONCAT(region_name,"-",store_name) name  FROM Geography


MYSQL 查询方式:

普通查询: select * from t_system_user 

条件查询: select * from t_system_user  where name=#{name}

模糊查询: select * from t_system_user  where name like CONCAT('%',#{name},'%')

     或 select * from t_system_user  where name like '%'+#{name}+'%'

查询排序: select * from t_system_user order by ${排序字段}

连接查询:

   union 和 union all:

            UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并去除重复记录,

      UNION all 也用于合并两个或多个 SELECT 语句的所有结果集,不去除重复记录,

        示例: select * from t_system_user_A union select * from t_system_user_B

      注意:使用UNION时,两张表查询的结果有相同数量的列、列类型相似。
      INNER JOIN(内连接)
       作用:根据两个或多个表中的列之间的关系,从这些表中查询数据。
                 包含等值(=),非等值(> 、>、=、 <、 <=、 !=, 还可以使用BETWEEN…AND 之类的谓词),自然连接(Natural join)-去除相同属性列
        示例:  SELECT * FROM press AS p INNER JOIN authors AS a ON p.city=a.city 
                 等价于:SELECT * FROM press AS p ,authors AS a WHERE p.city=a.city
         注意: 内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。内连接,只查满足连接谓词的匹配行。
         Left join(左连接)
           左外连接会返回左表的所有记录和右表中匹配记录的组合(如果右表中无匹配记录, 来自于右表的所有列的值设为 NULL).
           如果左表的一行在右表中存在多个匹配行, 那么左表的行会复制和右表匹配行一样的数量, 并进行组合生成连接结果.
           示例: select * from t_system_menus_a m1 LEFT JOIN t_system_menus_b m2 ON m1.id=m2.parentid;
           
           全连接
            
            全连接是左右外连接的并集. 连接表包含被连接的表的所有记录, 如果缺少匹配的记录, 即以 NULL 填充.。                        SELECT * FROM   press FULL OUTER JOIN authors ON press.id= authors.press_id

            连接查询参考资料: http://blog.csdn.net/xuanjiewu/article/details/50636465

    时间格式设置: date_format(n.begin_time, '%Y-%m-%d' )


猜你喜欢

转载自blog.csdn.net/lchq1995/article/details/79456359
今日推荐