mysql日常操作

update

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name

    SET col_name1=expr1 [, col_name2=expr2 ...]     [WHERE where_definition]     [ORDER BY ...]     [LIMIT row_count]

 MySQL replace [into] 用法

用户在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新...

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

MySQL replace into 有三种形式:

 

1. replace into tbl_name(col_name, ...) values(...) 2. replace into tbl_name(col_name, ...) select ... 3. replace into tbl_name set col_name=value, ...

 

REPLACE的运行与INSERT很相像。只有一点除外,如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

 

1.replace into<br />replace into table (id,name) values('1','aa'),('2','bb')<br />此语句的作用是向表table中插入两条记录。如果主键id为1或2不存在<br />就相当于<br />insert into table (id,name) values('1','aa'),('2','bb')<br />如果存在相同的值则不会插入数据

 

 

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into&nbsp;会直接插入数据,这将导致表中出现重复的数据。

这里我先truncate table upimg 先清空了表,然后,把UID改成了  alter table upimg add unique uidlist(`uid`) ; 然后就可以正常用replace into去替换了;

 

 

此处附加一个:改表的sql alter;

 

1:删除列

 

ALTER TABLE 【表名字】 DROP 【列名称】

 

2:增加列

 

ALTER TABLE 【表名字】 ADD 【列名称】 INT NOT NULL  COMMENT '注释说明'

 

3:修改列的类型信息

 

ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称(这里可以用和原来列同名即可)】 BIGINT NOT NULL  COMMENT '注释说明'

 

4:重命名列

 

ALTER TABLE 【表名字】 CHANGE 【列名称】【新列名称】 BIGINT NOT NULL  COMMENT '注释说明'

 

5:重命名表

 

ALTER TABLE 【表名字】 RENAME 【表新名字】

 

6:删除表中主键

 

Alter TABLE 【表名字】 drop primary key

 

7:添加主键

 

ALTER TABLE sj_resource_charges ADD CONSTRAINT PK_SJ_RESOURCE_CHARGES PRIMARY KEY (resid,resfromid)

 

8:添加索引

 

ALTER TABLE sj_resource_charges add index INDEX_NAME (name);

 

9: 添加唯一限制条件索引

 

ALTER TABLE sj_resource_charges add unique emp_name2(cardnumber);  删除  也是 alter table T1 drop index emp_name2;

 

10: 删除索引

 

alter table tablename drop index emp_name;

 

 

11:添加外键

mysql> alter table amount add constraint foreign key amountseller(seller) references seller(`id`) on update cascade;      

 

2016-03-03 14:57  晚上回去继续,把用户管理那块做完就好,么么哒豪哥;

 

 

delete from 表名;

truncate table 表名;

不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。

效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。

delete的效果有点像将mysql表中所有记录一条一条删除到删完,

truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。

 

 

case

 

mysql数据库中CASE WHEN语句。

case when语句,用于计算条件列表并返回多个可能结果表达式之一。

  1. SELECT  
  2.   sum(CASE when score<60 then else 0 end)   AS '不及格',  
  3.   sum(CASE when score>=60 and score<70 then else 0 end)   AS '差',  
  4.   sum(CASE when score>=70 and score<80 then else 0 end)   AS '中',  
  5.   sum(CASE when score>=80 and score<90 then else 0 end)   AS '良',  
  6.   sum(CASE when score>=90 and score<=100 then else 0 end)   AS '优'  
  7. from student;  

 

 

mysql> select user,avg(id) from test group by user;

+------+----------+

| user | avg(id)  |

+------+----------+

| f    | 290.0000 |

| h    | 160.0000 |

| m    | 240.0000 |

 

+------+----------+

 

链接 多条sql的结果集,主意,要是数据类型相同,数据列数相同

SELECT * FROM A UNION SELECT * FROM B; 这里会屏蔽重复的项;

SELECT * FROM A UNION ALL SELECT * FROM B; 区别是显示所有项;

 

LEFT JOIN  和 RIGHT JOIN

LEFT: 会拿出左表中的所有匹配项,即使右表木有;

 

posted @ 2016-08-30 21:10  拾阶而上的PM  阅读(92)  评论(0)    收藏  举报
本博内容由王子豪 www.07byte.com 提供