tonglin0325的个人主页

MySQL学习笔记——增删改查

有关数据库的DML操作

  -insert into

  -delete、truncate

  -update

  -select

    -条件查询

    -查询排序

    -聚合函数

    -分组查询

 

DROP、TRUNCATE、DELETE

-DELETE删除数据,保留表结构,可以回滚,如果数据量大,很慢,回滚就是因为备份删除的数据

-TRUNCATE删除所有数据,保留表结构,不可以回滚,一次全部删除所有数据,速度相对很快

-DROP删除数据和表结构,删除数据最快(直接从内存抹去这一块数据)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#1.指明字段进行插入,注意字段和值的数量和类型都需要匹配
INSERT INTO tb_dept (NAME,loc,description) VALUES('开发部','广州','负责软件开发工作');

#2.如果插入的values是所有字段,可以不同显式写插入的字段名,不推荐
INSERT INTO tb_dept VALUES(3,'财务部','广州','负责财务工作');

#auto_increment会记住曾经生成的值

#3.一次插入多条记录 mysql特有
INSERT INTO tb_dept (NAME,loc,description)
VALUES('开发部','广州','负责软件开发工作'),
('财务部','广州','负责财务工作'),
('市场部','广州','负责采购工作');

#4.可以从一张表中插入数据
#创建一张表和tb_dept表的结构一样,通过这种方式建表只是复制表结构,不复制约束
CREATE TABLE tb_dept2
SELECT * FROM tb_dept
#where id = 99

#先建表再插入
INSERT INTO tb_dept2(id,NAME,loc,description)
SELECT id,NAME,loc,description FROM tb_dept

INSERT INTO tb_emp(id,NAME,sex,age,address,email,dept_id)
VALUES(1,'Tony','男',26,'广州','Tony@163.com',1);

#更新 UPDATE table SET column = value [,column = value] [WHERE condition]
#where建议使用主键或者唯一键,建议是主键
UPDATE tb_emp SET age=23 WHERE id = 1;
UPDATE tb_emp SET age=23,sex='女' WHERE id = 2;

#删除 DELETE [FROM] table [WHERE condition];
DELETE FROM tb_emp; #删除表所有数据
DELETE FROM tb_emp WHERE id=2;

#阶段,DDL语句 TRUNCATE语句 作用是完全清空一个表
TRUNCATE TABLE tb_emp;

 

最简单的SELECT语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#查找 字段、字段。。。从 表 *表示所有的列
SELECT NAME,loc,description FROM tb_dept
SELECT * FROM tb_dept
SELECT NAME FROM tb_dept

#SELECT语句中的算数表达式
SELECT NAME,age,age*2
FROM tb_emp;

#NULL和0还有空字符不是一个概念
SELECT * FROM tb_emp;
SELECT * FROM tb_emp WHERE age = 0;
SELECT * FROM tb_emp WHERE age IS NULL;

#改变列的标题头,别名
SELECT NAME '姓名',age AS '年龄',age*2 '年龄乘2'
FROM tb_emp;

#重复记录
#缺省情况下查询显示所有行,包括重复行
SELECT dept_id
FROM tb_emp;

#使用DISTINCT关键字可从查询结果中清楚重复行
SELECT DISTINCT dept_id
FROM tb_emp;

#DISTINCT作用的范围是后面字段的组合
SELECT DISTINCT dept_id,age
FROM tb_emp WHERE dept_id=1;

#使用WHERE子句限定返回的记录
SELECT *
FROM tb_emp
WHERE age=22;

#字符串和日期要用单引号括起来
SELECT *
FROM tb_emp
WHERE NAME = 'Tom';

#比较运算符> < >= <= = <>
SELECT NAME,age
FROM tb_emp
WHERE age>=24;

SELECT NAME,age
FROM tb_emp
WHERE age>=24 AND age<27;

#BETWEEN AND 包含最小值和最大值
SELECT NAME,age
FROM tb_emp
WHERE age BETWEEN 24 AND 27;

#使用IN运算符
SELECT NAME,age
FROM tb_emp
WHERE age IN (22,26);

SELECT NAME,age
FROM tb_emp
WHERE age NOT IN (22,26);

#使用LIKE运算符进行模糊查询 _代表一个字符 %代表一个或者多个字符
SELECT NAME
FROM tb_emp
WHERE NAME LIKE '_a%';

#IS NULL
SELECT NAME,age
FROM tb_emp
WHERE age IS NULL;

#对结果进行排序 ORDER BY 从高到低
SELECT *
FROM tb_emp
ORDER BY age DESC;

#默认从低到高或者ASC
SELECT *
FROM tb_emp
ORDER BY age;