MySQL-CRUD

SQL语句分类

  • DQL(数据查询语言): 查询语句,凡是select语句都是DQL。
  • DML(数据操作语言):insert delete update,对表当中的数据进行增删改。
  • DDL(数据定义语言):create drop alter,对表结构的增删改。
  • TCL(事务控制语言):commit提交事务,rollback回滚事务。(TCL中的T是Transaction)
  • DCL(数据控制语言): grant授权、revoke撤销权限等。

Select语句

查看表结构

desc + table_name


    mysql> desc dept;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | DEPTNO | int(2)      | NO   | PRI | NULL    |       |     部门编号
    | DNAME  | varchar(14) | YES  |     | NULL    |       |     部门名称
    | LOC    | varchar(13) | YES  |     | NULL    |       |     部门位置
    +--------+-------------+------+-----+---------+-------+

简单查看表中数据

简答查询

语法格式:
select 字段名1,字段名2,字段名3,.... from 表名;

提示:
1、任何一条sql语句以“;”结尾。
2、sql语句不区分大小写。

给查询结果的列重命名

as关键字,as 关键字可以省略

select ename,sal * 12 as yearsal from emp;

查询所有字段

select * from table_name;

实际开发中不建议使用*,效率较低。

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+

条件查询

语法格式:
select
字段,字段...
from
表名
where
条件;

执行顺序:先from,然后where,最后select

模糊查询

模糊查询使用关键字like
在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_
%代表任意多个字符,_代表任意1个字符。

示例

找出名字当中含有O的?
(在模糊查询当中,必须掌握两个特殊的符号,一个是%,一个是_)
%代表任意多个字符,_代表任意1个字符。
select ename from emp where ename like '%O%';
+-------+
| ename |
+-------+
| JONES |
| SCOTT |
| FORD  |
+-------+
找出名字中第二个字母是A的?
select ename from emp where ename like '_A%';
+--------+
| ename  |
+--------+
| WARD   |
| MARTIN |
| JAMES  |
+--------+
找出名字中有下划线的?
mysql> select * from t_user;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | WANG_WU  |
+------+----------+
select name from t_user where name like '%_%';
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
| WANG_WU  |
+----------+
select name from t_user where name like '%\_%';
+---------+
| name    |
+---------+
| WANG_WU |
+---------+

找出名字中最后一个字母是T的?
select ename from emp where ename like '%T';
+-------+
| ename |
+-------+
| SCOTT | 
+-------+

结果集去重

distinct关键字

mysql> select distinct job from emp; // distinct关键字去除重复记录。
+-----------+
| job       |
+-----------+
| CLERK     |
| SALESMAN  |
| MANAGER   |
| ANALYST   |
| PRESIDENT |
+-----------+   

mysql> select ename,distinct job from emp;
以上的sql语句是错误的。
记住:distinct只能出现在所有字段的最前面。

排序

关键字order by

MySQL中默认是升序。asc表示升序,desc表示降序

语法格式

select 
    ...
from 
    表名 
order by
    ...

执行顺序

select 
        字段                      3
    from
        表名                      1
    where
        条件                      2
    order by
        ....                        4
    
    order by是最后执行的。

查看当前 数据库与版本号

mysql> select database(); 查看当前使用的是哪个数据库
+-------------+
| database()  |
+-------------+
| swu         |
+-------------+

mysql> select version(); 查看mysql的版本号。
+-----------+
| version() |
+-----------+
| 8.0.28    |
+-----------+

分组函数

分组函数又称多行处理函数,输入多行,最终输出的结果是1行

  • count 计数
  • sum 求和
  • avg 平均值
  • max 最大值
  • min 最小值

所有的分组函数都是对“某一组”数据进行操作

注意

分组函数自动忽略NULL

where中不能直接使用

select ename,sal from emp where sal > avg(sal);
//ERROR 1111 (HY000): Invalid use of group function

思考以上的错误信息:无效的使用了分组函数?
原因:SQL语句当中有一个语法规则,分组函数不可直接使用在where子句当中

我们用序号来表示执行的先后顺序

因为group by是在where执行之后才会执行的
                
select      5
        ..          
from        1
        ..
where       2
        ..
group by    3
        ..
having      4
                    ..
order by    6
        ..

count(*)和count(字段)的区别

count(*):不是统计某个字段中数据的个数,而是统计总记录条数。(和某个字段无关)
count(comm): 表示统计comm字段中不为NULL的数据总数量

group by and having

group by : 按照某个字段或者某些字段进行分组。
having : having是对分组之后的数据进行再次过滤

案例:找出每个工作岗位的最高薪资

select max(sal),job from emp group by job;
    +----------+-----------+
    | max(sal) | job       |
    +----------+-----------+
    |  3000.00 | ANALYST   |
    |  1300.00 | CLERK     |
    |  2975.00 | MANAGER   |
    |  5000.00 | PRESIDENT |
    |  1600.00 | SALESMAN  |
    +----------+-----------+

注意:

  • 分组函数一般都会和group by联合使用,这也是为什么它被称为分组函数的原因。
  • 并且任何一个分组函数(count sum avg max min)都是在group by语句执行结束之后才会执行的。
  • 当一条sql语句没有group by的话,整张表的数据会自成一组。
select ename,max(sal),job from emp group by job;
以上在mysql当中,查询结果是有的,但是结果没有意义,在Oracle数据库当中会报错。语法错误。

Oracle的语法规则比MySQL语法规则严谨。
记住一个规则:当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段

完整DQL语句写法

数字代表执行顺序

select          5
        ..
from            1   
        ..
where           2
        ..
group by        3
        ..
having          4
        ..
order by        6
        ..


insert语句

语法格式:

insert into 表名(字段名1,字段名2,字段名3,....) values(值1,值2,值3,....)

要求:字段的数量和值的数量相同,并且数据类型要对应相同

注意:

  • 当一条insert语句执行成功之后,表格当中必然会多一行记录。
  • 即使多的这一行记录当中某些字段是NULL,后期也没有办法在执行
  • insert语句插入数据了,只能使用update进行更新。

一次插入多行数据

insert into t_student(no,name,sex,classno,birth) values
(3,'rose','1','1101','1952-12-14'),
(4,'jack','1','1201','1955-12-14');

查询结果插入表

mysql> insert into dept1 select * from dept;
mysql> select * from dept1;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    |     10 | ACCOUNTING | NEW YORK |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+

表的复制

语法:
create table 表名 as select语句;
将查询结果当做表创建出来

update语句

语法格式:

update 表名 set 字段名1=值1,字段名2=值2... where 条件;

案例

将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU
    update dept1 set loc = 'SHANGHAI', dname = 'RENSHIBU' where deptno = 10;
    mysql> select * from dept1;
    +--------+------------+----------+
    | DEPTNO | DNAME      | LOC      |
    +--------+------------+----------+
    |     10 | RENSHIBU   | SHANGHAI |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    |     10 | RENSHIBU   | SHANGHAI |
    |     20 | RESEARCH   | DALLAS   |
    |     30 | SALES      | CHICAGO  |
    |     40 | OPERATIONS | BOSTON   |
    +--------+------------+----------+

    更新所有记录
        update dept1 set loc = 'x', dname = 'y';
        mysql> select * from dept1;
        +--------+-------+------+
        | DEPTNO | DNAME | LOC  |
        +--------+-------+------+
        |     10 | y     | x    |
        |     20 | y     | x    |
        |     30 | y     | x    |
        |     40 | y     | x    |
        |     10 | y     | x    |
        |     20 | y     | x    |
        |     30 | y     | x    |
        |     40 | y     | x    |
        +--------+-------+------+

delete语句

语法格式:

delete from 表名 where 条件;

注意:没有where设置条件,表中的数据将会被全部删除

如何快速删除大数据量的表

在实际开发过程中,一张表可能有成千上万条记录,此时执行delete语句往往需要十多分钟,我们可以直接使用truncate截断表数据,速度在瞬间完成。

truncate table 表名

警告

表被截断,不可回滚,数据永久丢失


关于删库跑路的一点看法

新闻

首先我们来看两条新闻

  1. 百度 95 后程序员删库跑路被判刑,动机是工作变动及对领导不满 (baidu.com)
  2. 程序员离职当天“删库跑路”,后果很严重,法院判了 (baidu.com)

观点

个人认为删库跑路的程序员不负责任,没有担当意识,“删库跑路”这种行为类似与小孩子发脾气,并且违反了相关法律法规,对自己和公司都造成了严重伤害,可以说是杀敌一千,自损一万。

赔钱事小,蹲监狱事大。

更何况还是删除数据库,给公司带来极大损失,相信以后没有公司还敢再聘用这类程序员。

一时的冲动导致编程生涯的结束,可惜。

我们还是要遵守法律法规,心有不满,可以多和领导多交流,多沟通。

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

推荐阅读更多精彩内容