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