MySQL 必知必会的操作

参考文章:
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'; 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,026评论 0 19
  • 值得写传记的人都有一个牛逼的人生,雷军就是!他,从一个程序员做到了职业经理人,转身变为最成功的天使投资人,再度出山...
    王图阅读 541评论 0 1
  • 01职业形象塑造- 02仪态-坐姿 坐姿要舒适自然、大方端庄。入座时动作轻盈和缓、自然从容;落座时要轻、不能突然...
    筱筱德阅读 1,272评论 0 3
  • 器:工具--锅碗瓢盆各类工具 术:方法--吃什么、怎么吃 道:目标--拥有健康和充沛的精力 用:行动、践行的结果-...
    Abby爱整理阅读 241评论 0 0
  • 写作对我来说应该是在开始有公众号的时候逐渐的写,但是写的并不多。后来又有了头条,加入了今日头条的大团队之后开始写的...
    3c2e97818ff5阅读 100评论 0 0