美文网首页
MySql_笔记

MySql_笔记

作者: bboymonk | 来源:发表于2017-03-10 12:20 被阅读0次

    mysql的序列一般都是用系统自带的序列自增,但如果事务rollback的话,再新增数据时,主键就没有连续性了。

    另一种自动序列,比如定单号,车票号等等。可以使用SQL方式生成序列号:

    处理重复数据:

    1,

    select userName, count(*) from user group by userCode having count(*) > 1;
    

    2,添加主键和唯一索引,它们的数据是不能重复的。
    如果向表里insert into数据时,正常情况会报错,如果用insert ignore into不会报错,但也不插入数据。

    mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
        -> VALUES( 'Jay', 'Thomas');
    Query OK, 1 row affected (0.00 sec)
    mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
        -> VALUES( 'Jay', 'Thomas');
    Query OK, 0 rows affected (0.00 sec)
    

    如果使用replace into插入重复数据的话,则会替换原来的数据。

    mysql> REPLACE INTO person_tbl (last_name, first_name)
        -> VALUES( 'Ajay', 'Kumar');
    Query OK, 1 row affected (0.00 sec)
    mysql> REPLACE INTO person_tbl (last_name, first_name)
        -> VALUES( 'Ajay', 'Kumar');
    Query OK, 2 rows affected (0.00 sec)
    


    多表关联时,新增数据要考虑的问题:

    <insert id="addCustomer" parameterType="com.pd.gch.moudles.customer.model.Customer" useGeneratedKeys="true" keyProperty="id">
        <!--<selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">-->
          <!--SELECT LAST_INSERT_ID() AS id-->
        <!--</selectKey>-->
    
    Customer,Organization, RefOrganizationCustomer三张表。ID都是自增。(mysql数据库)

    有多张表有关联关系时,新增关系表RefOrganizationCustomer的数据时,如何获取Customer和Organiaztion的ID!!!
    mybatis的<insert>时,加上useGeneratedKeys属性,设为true,KeyProperty的值对应的是customer表对应的customer实体类的主键ID,假如名字叫A,
    那么这里的值就为A。
    执行完<insert>后,新增的customer表的ID就被赋值到它对应的customer实体类里了。这个时候customer.getId()获取到的就是新增后的ID值了。

    上面的<selectKey>是Oracle的用法。

    数据库备份:

    1,导出表作为原始数据

    未登录数据库时用如下命令:
    数据库wjb下的bboy表导出到F盘的bboy.txt,最好不要有这个文件。



    注意:如果加了-d的话,导出的只是表结构,没有insert into数据。上面的命令包含insert into数据。数据库后面不写表名就是导出整个数据库。

    2,导入表到数据库

    把bboy表导入到数据库wjb里。


    另一种方式来实现这一点,无需使用一个中间文件是来发送,mysqldump输出直接通过网络到远程MySQL服务器。如果可以从源数据库所在的主机那里连接两个服务器,使用此命令(请确保两个服务器可以访问):

    mysqldump -u root -p wjb | mysql -h other-host.com wjb
    

    命令 mysqldump 的一半连接到本地服务器,并转储输出写入管道。另一半MySQL连接到 other-host.com 远程MySQL服务器。它读取管道输入并发送每条语句到other-host.com服务器

    删除重复数据

    注意,必须包一层select,不然会报错。因为mysql 不支付查询出来的数据再作为更新操作。

    delete from t_game where id not in (select minid from (select MIN(id) as minid from t_game GROUP BY name HAVING COUNT(name) > 1)b) and id != 1
    

    相关文章

      网友评论

          本文标题:MySql_笔记

          本文链接:https://www.haomeiwen.com/subject/pivngttx.html