参考文章:
1.mysql数据库的基本操作
2.10分钟学会MySQL基础教程
1.增加一条记录insert
-- insert [into] tab_name (field1,filed2,.......) values (value1,value2,.......);
insert into employee_new (id,name,birthday,salary) values (1,'yuan','1990-09-09',9000);
-- 插入多条数据
insert into employee_new values (4,'alvin1','1993-04-20',3000),(5,'alvin2','1995-05-12',5000);
-- set插入: insert [into] tab_name set 字段名=值
insert into employee_new set id=12,name="alvin3";
2.修改表记录
/* 注意:WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。*/
-- update tab_name set field1=value1,field2=value2,......[where 语句]
update employee_new set birthday="1989-10-24" WHERE id=1;
-- 将yuan的薪水在原有基础上增加1000元。
update employee_new set salary=salary+4000 where name='yuan';
3.删除表纪录
/*注意:
1.如果不跟where语句则删除整张表中的数据
2.delete语句只能删除表中的内容,想要删除表,用drop
3.truncate table(截断)也可以删除表中的所有数据,词语句首先摧毁表,再新建表。此种方式删除的数据不能在
事务中恢复。
*/
delete from tab_name [where ....]
-- 删除表中名称为’alex’的记录。
delete from employee where name='alex';
-- 删除表中所有记录。
delete from employee;//注意此时表自增id没有被重置
-- 重置表自增id
alter table employee auto_increment=1;
-- 使用truncate删除表中记录。
truncate table emp_new;
4.查询表记录
-- (1)select [distinct] *|field1,field2,...... from tab_name
select distinct JS ,name from ExamResult;
-- (2)select 也可以使用表达式,并且可以使用 as 给字段起别名
-- 在所有学生分数上加10分特长分显示。
select name,JS+10,Django+10,Database+10 from ExamResult;
-- 统计每个学生的总分。
select name,JS+Django+Database from ExamResult;
-- 使用别名表示学生总分。
select name as 姓名,JS+Django+Database as 总成绩 from ExamResult;
-- (3)使用where子句,添加查询条件进行查询过滤,where字句中可以使用:
-- 比较运算符:
> < >= <= <> !=
between 80 and 100 //值在80到1000之间
in(80,90,100) //值是80或90或100
like 'yuan%' //模糊匹配
//模糊匹配的运算符是%或者_,
//如果是%则表示任意多字符,此例如唐僧,唐国强
//如果是_则表示一个字符唐_,只有唐僧符合。
-- 逻辑运算符
在多个条件直接可以使用逻辑运算符 and or not
-- (4)Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的别名。
-- select *|field1,field2... from tab_name order by field [Asc|Desc]
-- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。
-- (5)group by 分组查询:
-- 注意,按分组条件分组后每一组只会显示第一条记录,
如果想显示每个组的全部数据,可以使用 order by 或 group_concat()函数
-- group by字句,其后可以接多个列名,也可以跟having子句,对结果进行筛选
/*having 和 where两者都可以对查询结果进行进一步的过滤,差别有:
<1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;
<2>使用where语句的地方都可以用having进行替换
<3>having中可以用聚合函数,where中就不行。
*/
select name,sum(Django) from ExamResult
where name!="yuan"
group by name
having sum(Django)>130;
-- GROUP_CONCAT() 函数
1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;
separator是一个字符串值,缺省为一个逗号。
SELECT id,GROUP_CONCAT(name),GROUP_CONCAT(JS) from ExamResult GROUP BY id;
-- (6)聚合函数: 一般和分组查询配合使用
--<1> 统计表中所有记录
-- COUNT(列名):统计行的个数
-- 注意:count(*)统计所有行; count(字段)不统计null值.
-- SUM(列名):统计满足条件的行的内容和
-- 注意:sum仅对数值起作用,否则会报错。
-- AVG(列名):求平均值
-- Max、Min:求最高分和最低分(数值范围在统计中特别有用)
-- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!ifnull(JS,0)
-- (7) limit
SELECT * from ExamResult limit 1,5;
5.多表查询
-- (1) 笛卡尔积查询
-- select * from table_name1, table_name2;
-- (2) 内连接,查询两张表中都有的关联数据,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
--select * from table_name1 inner join table_name2 on table_name1.dept_id = table_name2.dept_id;
-- (3) 外连接(左联接、右连接、全连接)
-- 左连接:在内连接的基础上增加左边有右边没有的结果
select * from table_name1 left join table_name2 on table_name1.dept_id = table_name2.dept_id;
-- 右外连接:在内连接的基础上增加右边有左边没有的结果
select * from table_name1 right join table_name2 on table_name1.dept_id = table_name2.dept_id;
-- 全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果
-- 注意:mysql不支持全外连接 full join,但是可以使用此种方式间接实现全外连接:
select * from table_name1 right join department on table_name1.dept_id = table_name2.dept_id
union
select * from table_name1 left join table_name1 on table_name1.dept_id = table_name2.dept_id;
-- 注意 union与union all的区别:union会去掉相同的纪录
-- (4) 子查询
-- 子查询是将一个查询语句嵌套在另一个查询语句中。
-- 内层查询语句的查询结果,可以为外层查询语句提供查询条件。
-- 子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字
-- 还可以包含比较运算符:= 、 !=、> 、<等
2018年5月4日更新:
我被人问到:“如何创建用户名和密码?”,然后就蒙了。。。
参考文章:MySQL创建用户的三种方法
特此记录:
一.创建用户:
命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password';
例子: CREATE USER 'root'@'localhost' IDENTIFIED BY '123456';
说明:
username : 你将创建的用户名;
host : 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%;
password : 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器;
二.授权:
命令: GRANT privileges ON databasename.tablename TO 'username'@'host'
例子: GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
说明:
privileges : 用户的操作权限,如SELECT , INSERT , UPDATE 等,如果要授予所的权限则使用ALL;
databasename : 数据库名;
tablename : 表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*;
三.设置与更改用户密码:
命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
例子: SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456");
如果是当前登陆用户用:SET PASSWORD = PASSWORD("newpassword");
四.撤销用户权限:
命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';
例子: REVOKE SELECT ON *.* FROM 'pig'@'%';
说明: privilege, databasename, tablename - 同授权部分.
注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%', 则在使用REVOKE SELECT ON . FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限.
具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看.
五.删除用户:
命令:DROP USER 'username'@'host';
例子:DROP USER 'root'@'host';
网友评论