mysql两个字段去重_MYSQL总结
数据基础
SQL语法顺序
1.建库
create
2.删库
drop
mysql 中两个字符串拼接
select
mysql删除重复的数据保留一条3.默认值 default默认值,comment注释 engine引擎
create
4.查看建库,建表语句,表结构
show
5.查看mysql中⽂件位置
show
6.修改表
1
7.插⼊
insert
8.删除
delete
delete,truncate,drop区别? delete 和truncate 都是删除表中的数据,不删除表,表结构索引不变。 delete可以具体到删除哪
⾏,truncate 直接删完。 delete保留⾃增计时器,truncate直接将⾃增计数器清空 如果在开启了⼀个事务,delete删了之后如果取消还可以回滚, truncate直接删了,和事务⽆关 droptable student 是直接把表删了。
9.更新
update
10.查询
select
select
where⼦句 条件 and or not
select
模糊查询 null,like,in
模糊查询
like
join 多表联查
JOIN ..ON 固定语法
inner
join1
left
join2
right
join3
上⾯三种是最常见的。区别
inner join 是他们通过条件匹配的 a.user_id=u.user_id; 只显⽰两个相等的⾏
left join 即使他们的不符合匹配条件 也会将左表中的数据全部查出,如图join2所⽰ 即使右表中没有与之对应的那⾏数据。
right join同理,右表中的数据全部查出,即使不匹配,所有如图join3所⽰,左表没有与之对应的那⾏数据
JOIN ON 有的后⾯还会跟where 。 on是判断条件,where 时等值查询,可以理解为在on判断条件之后,在进⾏⼀次筛选。
SELECT
扩展3表查询 查出⽂章名,下⾯的评论⼈的姓名和评论内容。
user article comment 三个表 先分为两个表,查出数据,在和第三个表查询
select
⾃连接
⽤⼀张表的某⾏的某字段,去这张表其他⾏的某字段去查询值。
我们现在有个评论表
评论id,评论⽤户的id,评论⽤户的姓名,被评论⽤户的id,我们现在想在这张表中 查出被评论⽤户的姓名怎么查。 关键点在于把这张表看成两张表。这样可以理解a表中的to commentid 要去B表中的 通过commentid 查询到comment_id(被评论⽤户的姓名) ,实际上是⼀张表,通过取别名的⽅式当做两张表⽽已。
SELECT
排序 order by
ascend 升序(默认 ),descend降序
select
分页 limit 还有⼀种瀑布流,往下拉⼀直有
select
⼦查询 (重点)
之前像
通过join多表联查,和where⼦查询 我们不难发现,如果只是需要多经过⼏次的判断,(⼦查询⾥⾯嵌套⼀个查询),⽤⼦查询,多表联查都可以,逻辑上 可能⼦查询好理解⼀点,但是如果我们还需要查询显⽰出另⼀张表其他字段,只能⽤多表联查。例如多个 hobby字
段,select s.* 加上 h.hobby即可,⽽⼦查询只是经过判断 哪个student_id符合,不能加上字段。
⼀些函数
group by分组
查某个科⽬的平均成绩
MD5 加密 不可逆 相当于⼀个字典
insert
进阶
下⾯的内容某些讲的可能没有什么关联。
索引
MySQL官⽅对索引的定义为:索引(Index)是帮助MySQL⾼效获取数据的数据结构。提取句⼦主⼲,就可以得到索引的本质:索引是数据结构。
添加索引
1. ALTER table [表明] add [索引种类] index [索引名] (`column`)
2. create [可加索引种类] index [索引名] on [表名](字段)
删除 DROP INDEX `indexname`
主键索引
主键 : 能唯⼀标识⼀条记录
特点 :
最常见的索引类型
确保数据记录的唯⼀性
确定快速定位到数据
唯⼀索引
作⽤ : 避免同⼀个表中某数据列中的值重复
与主键索引的区别
主键索引只能有⼀个
唯⼀索引可能有多个
普通索引
全⽂索引
插⼊100w条数据
DELIMITER $$
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
DECLARE num INT DEFAULT 1000000;
DECLARE i INT DEFAULT 0;
WHILE i < num DO
INSERT INTO app_user(`name`, `email`, `phone`, `gender`, `password`,
`age`)
VALUES(CONCAT('⽤户', i), '24736743@qq', CONCAT('18', FLOOR(RAND()* (999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(),FLOOR(RAND()*100)); SET i = i + 1;
END WHILE;
RETURN i;
END;
SELECT mock_data();
设计⼀个数据库
为什么要好好设计数据库?
糟糕的数据库设计 :
数据冗余,存储空间浪费
数据更新和插⼊的异常
程序性能差
良好的数据库设计 :
节省数据的存储空间
能够保证数据的完整性
⽅便进⾏数据库应⽤系统的开发

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。