之前的个人整理、记录
1:查询表中,name字段是j开头,k结尾,总计3个字符长度的数据
SELECT * FROM testtt WHERE `name` LIKE 'j_k'
2:查询表中以j开头的
SELECT * FROM testtt WHERE `name` LIKE 'j%'
3:查询表中以k结尾的
SELECT * FROM testtt WHERE `name` LIKE '%k'
4:查询表中以j开头,k结尾,长度不限的数据
SELECT * FROM testtt WHERE `name` LIKE 'j%k'
5:将查询出来的数据插入目标数据表中
INSERT INTO person_copy SELECT * FROM person
6:从两个表查询数据
SELECT pes.age,tes.`name` FROM person AS pes,testtt AS tes
7:若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作,否则插入一条新的记录。
INSERT INTO person(id,name,age) VALUES (3,'qwer',99) on DUPLICATE KEY UPDATE age=199
8:如果 EXISTS 后面语句为真,就执行前面的语句。
SELECT * from person WHERE EXISTS (SELECT * from person WHERE age>155)
9:修改一个表中查询出来的数据(即查询的同时修改查询的数据,会报错(1093)),需要先将查询出来的数据放到临时表t。
UPDATE person SET age=999 WHERE ID in (SELECT t.ID FROM (SELECT * FROM person)t)
10:主键ID自增长删除后,无法从头开始问题。(当表在不断的更新时,删除了先前的数,表ID无法置0,或者连续开始)
表中原先存在4条数据,将id为1和4的数据删除
插入一条id自增长数据
INSERT INTO person VALUES (NULL,'qwe',465)
数据过多时,如何处理?
先将表复制,将复制的表使用 truncate 清空。然后,将原本数据转移置copy表。
清空copy表
TRUNCATE person_copy
转移数据
INSERT INTO person_copy (SELECT NOT IFNULL(id,NULL),`name`,age FROM person ORDER BY id ASC)
或者
INSERT INTO person_copy (SELECT NULL,`name`,age FROM person ORDER BY id ASC)
最后自己再改下表名就可以了
11.表中有条重复记录,如何删除多余的重复记录
查询name不带重复的
SELECT DISTINCT(`name`) FROM person_copy
删除全部重复记录
Delete FROM person_copy Where `name` In (Select F.name FROM(SELECT `name` FROM person_copy)F Group By F.name Having Count(*)>1)
删除多余重复,只留下一条。例如:多余的重复的,留下age最大的。
Delete From person_copy Where age Not In (Select Max(T.age) From (SELECT * from person_copy)T Group By T.name)
就是这么强大,烦恼!