MySql_笔记

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)


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


    
      
    
Customer,Organization, RefOrganizationCustomer三张表。ID都是自增。(mysql数据库)

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

上面的是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_笔记)