MySQL学习(一)

安装数据库

本人操作系统Ubuntu 16.04,可以使用apt工具直接安装,安装命令为:

sudo apt-get install mariadb-server

此命令会安装各种依赖库和mariadb的客户端和服务端。mariadb是mysql的分支,使用和mysql一致,但各方面都比mysql强大。安装完成后,发现执行mysql访问被拒绝,原因是当前用户权限不足,在mysql命令前加sudo就行了:

sudo mysql

执行后进入mysql终端,可以先参照这篇博文创建一个普通用户,执行以下语句创建用户:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

创建失败的话会提示错误,创建成功的话会显示下面的提示:

Query OK, 0 rows affected (0.00 sec)

创建成功之后就可以使用新的用户密码登录了:

mysql -u username -p password

用户权限不足的话可以参考上面的文章给用户授权,命令格式为:

GRANT ALL ON *.* TO 'pig'@'%';

关于MySQL重复数据

如何查找重复数据

查找重复数据即查找存在2次或2次以上的数据,可以先使用GROUP BY进行分组,再根据数量进行过滤即可。下面的命令可以看到每条数据出现的次数:

SELECT Email,COUNT(*) 
FROM email 
GROUP BY Email;

执行结果为:

+---------+----------+
| Email   | COUNT(*) |
+---------+----------+
| a@b.com |        2 |
| c@d.com |        1 |
+---------+----------+

下面的命令可以仅显示数量大于1,即重复的数据:

SELECT Email 
FROM email 
GROUP BY Email
HAVING COUNT(*)>1;

执行结果为:

+---------+
| Email   |
+---------+
| a@b.com |
+---------+

如何删除重复数据

如果需要删除所有重复数据,可以使用下面的语句:

DELETE FROM email 
WHERE Email IN 
(
	SELECT * FROM 
	(
		SELECT Email 
		FROM email 
		GROUP BY Email 
		HAVING COUNT(*)>1
	) 
	AS TEMP
);

请注意上面的语句是删除所有重复数据的,如果想保留唯一记录,即删除多余的重复数据,可以执行下面的语句。先按Email字段进行分组,再取重复值的最小ID的列表,将不在这个列表内的记录全部删除:

DELETE FROM email 
WHERE ID NOT IN 
(
	SELECT * FROM 
	(
		SELECT ID 
		FROM email 
		GROUP BY Email
	) 
	AS TEMP
);

如果想保留最大ID的列表,即保留比较新的值,可以使用下面的语句:

DELETE FROM email 
WHERE ID NOT IN 
(
	SELECT * FROM 
	(
		SELECT MAX(ID)
		FROM email 
		GROUP BY Email
	) 
	AS TEMP
);

保证数据唯一性

为了保证数据的唯一性,可以在建表时给列加上唯一约束,如:

CREATE TABLE email (
ID INT NOT NULL PRIMARY KEY,
Email VARCHAR(100) NOT NULL UNIQUE
);

这样子设置之后,当尝试插入重复的数据时,就会报以下错误:

ERROR 1062 (23000): Duplicate entry 'a@b.com' for key 'Email'

条件查找

假设要从下面的表中查找面积超过 300 万平方公里,或者(人口超过 2500 万并且 gdp 超过 2000 万)的国家:

+-------------+-----------+---------+------------+-----------+
| name        | continent | area    | population | gdp       |
+-------------+-----------+---------+------------+-----------+
| Afghanistan | Asia      |  652230 |   25500100 |  20343000 |
| Albania     | Europe    |   28748 |    2831741 |  12960000 |
| Algeria     | Africa    | 2381741 |   37100000 | 188681000 |
| Andorra     | Europe    |     468 |      78115 |   3712000 |
| Angola      | Africa    | 1246700 |   20609294 | 100990000 |
+-------------+-----------+---------+------------+-----------+

则可以按照条件进行逻辑组合查找,按照上面的条件,翻译成sql语句应该为:

SELECT * FROM World 
WHERE 
area > 3000000 
OR 
(
	population > 25000000
	AND 
	gdp > 20000000
);

其中逻辑运算符有AND、OR,还有前面用到NOT。比较运算符有=、>、<、!=或<>以及模糊查询的LIKE。具体可以点击这个链接学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

番茄大圣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值