-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathMySQLl笔记.txt
More file actions
499 lines (425 loc) · 20 KB
/
MySQLl笔记.txt
File metadata and controls
499 lines (425 loc) · 20 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
MySQL笔记
----------------------------------------------------------------------------------------------------------------------
【第一章】MySQL基本操作
数据库(Data Base,简称DB)
作用:保存、管理数据
MySQL:关系型数据库
DBMS:数据库管理系统
MySQL数据库特点:
1、免费、开源数据库
2、小巧、功能齐全使用便捷
3、可运行于Windows或Linux操作系统
4、可适用于中小型甚至大型网站应用
MySQL默认端口号: 3306
SQLyog特点: 易用、简洁、图形化
·DOS命令连接数据库
语法:
mysql -h 服务器主机地址 –u 用户名 -p 用户密码
·命令行操作数据库
创建数据库 CREATE DATABASE [IF NOT EXISTS] 数据库名;
删除数据库 DROP DATABASE [IF EXISTS] 数据库名;
查看数据库 SHOW DATABASES;
使用数据库 USE 数据库名;
·结构化查询语句分类:
---------------------------------------------------------------------------------------------
| 名称 解释 命令 |
|---------------------------------------------------------------------------------------------|
|DDL(数据定义语言) 定义和管理数据对象,如数据库,数据表等 CREATE、DROP、ALTER |
|DML(数据操作语言) 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE |
|DQL(数据查询语言) 用于查询数据库数据 SELECT |
|DCL(数据控制语言) 用来管理数据库的语言,包括管理权限及数据更改 GRANT、COMMIT、ROLLBACK|
---------------------------------------------------------------------------------------------
·创建数据表(属于DDL一种)
语法:
CREATE TABLE [IF NOT EXISTS ] 表名 (
字段名1 列类型 [属性] [索引] [注释],
字段名2 列类型 [属性] [索引] [注释]
)[表类型] [表字符集] [表注释];
·数据值和列类型
列类型分为:数值类型、字符串类型、日期和时间型、NULL值
·数值类型
-------------------------------------------------------------------------
| 类型 说明 取值范围 存储需求|
|-------------------------------------------------------------------------|
|tinyint 非常小的数据 有负值: -2(7次方) ~ 2(7次方)-1 1字节 |
| 无负号值:0 ~ 2(8次方)-1 |
|-------------------------------------------------------------------------|
|int 标准整数 有负值: -2(31次方) ~ 2(31次方)-1 4字节 |
| 无负号值:0 ~ 2(32次方)-1 |
|-------------------------------------------------------------------------|
|double 双精度浮点数 ±2.2250738585072014e -308 8字节 |
-------------------------------------------------------------------------
·字符串类型
----------------------------------------------------------------------------------
| 类型 说明 最大长度 |
|----------------------------------------------------------------------------------|
|char[(M)] 固定长字符串,检索快但费空间,0 <= M <= 255 M字节 |
|varchar[(M)] 可变字符串0 <= M <= 65535 M+1 字节 |
|text 文本串 2(16次方)–1字节|
----------------------------------------------------------------------------------
·日期和时间型数值类型
----------------------------------------------------------------------------------
| 类型 说明 取值范围 |
|DATETIME YY-MM-DD hh:mm:ss 1000-01-01 00:00:00 至 9999-12-31 23:59:59 |
----------------------------------------------------------------------------------
·NULL值
理解为“没有值”或“未知值”
不要用NULL进行算术运算,结果仍为NULL
MySQL中,0或NULL都意味着为假,1为真
·数据字段属性
PRIMARY KEY:主键(一张表只能出现一个主键)
UNSIGNED:无符号的声明该数据列不允许负数
ZEROFILL:0填充的,不足位数的用0来填充,如 int(3),5则为 005
AUTO_INCREMENT:自增的,通常用于设置主键,且为整数类型每添加一条数据自动在上一个记录数上加1(删除不 影响数据增长)可定义起始值
DEFAULT:默认的,用于设置默认值。例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为 “男”的值
COMMENT '':注释
NOT NULL:不为空,内容不能为空
·修改数据表
·修改表
修改表名: ALTER TABLE 旧表名 RENAME AS 新表名
添加字段: ALTER TABLE 表名 ADD 字段名 列类型 [ 属性 ]
修改字段: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 [ 属性 ]
删除字段: ALTER TABLE 表名 DROP 字段名
·删除表:
语法:
DROP TABLE [IF EXISTS] 表名
注:IF EXISTS 为可选,判断是否存在该数据表如删除不存在的数据表会抛出错误
·数据库数据管理
数据库意义:数据存储、数据管理
管理数据库数据方法:
1、通过SQLyog等管理工具管理数据库数据
2、通过DML语句管理数据库数据
·DML(数据操作语言)
用于操作数据库对象中所包含的数据
·添加数据(INSERT命令)
语法:
INSERT INTO 表名 [字段1,字段2,字段3] VALUES (“值1”,“值2”,“值3”)
实例:
INSERT INTO `student` (name,age,sex) VALUES ('张三', '17', '男'),('李丽','20','男');
注意:
1、字段或值之间用英文逗号隔开
2、“字段1,字段2”该部分可省略,但添加的值务必与表结构数据列顺序相对应且数量一致 3、可同时插入多条数据,values 后用英文逗号隔开
·修改数据(UPDATE命令)
语法:
UPDATE 表名 SET column_name = value[column_name2 = value2] [where condition];
实例:
UPDATE `student` SET name='张三',Pwd=000000 WHERE Xuehao =1013;
注意:
1、column_name为要更改的数据列
2、value为修改的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果
3、condition为筛选条件,如不指定则修改该表的所有列数据
·WHERE条件子句
简单理解为:有条件性地从表中选取数据筛选数据
·WHERE中的运算符
------------------------------------------------------------
| 运算符 含义 范例 结果 |
|------------------------------------------------------------|
| = 等于 5=6 false|
| <>或!= 不等于 5!=6 true |
| > 大于 5>6 false|
| < 小于 5<6 true |
| >= 大于等于 5>=6 false|
| <= 小于等于 5<=6 true |
| BETWEEN 在某个范围之间 5 BETWEEN 5 AND 10 true |
| AND 并且 5>1 AND 1>2 false|
| OR 或 5>1 OR 1>2 true |
------------------------------------------------------------
·删除数据(DELETE命令、TRUNCATE命令)
·DELETE命令
语法:
DELETE FROM 表名 [where condition];
注意:
FROM为可选关键字condition为筛选条件,如不指定则删除该表的所有列数据
·TRUNCATE命令
用于完全清空表数据,但表结构、索引、约束等不变
语法:
TRUNCATE [TABLE] table_name
注意:
区别于DELETE命令
相同:都能删除数据、不删除表结构,但TRUNCATE速度更快
不同:
1、使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器
2、使用TRUNCATE TABLE不会对事务有影响
----------------------------------------------------------------------------------------------------------------------
【第二章】使用DQL命令查询数据
·SELECT语法:
SELECT [ALL|DISTINCT] { *|table.*} FROM table_name [as table_ alias]
[left|out|inner join table_name2] #联合查询
[WHERE … ] #指定结果需满足的条件
[GROUP BY …] #指定结果按照哪几个字段来分组
[HAVING …] #过滤分组的记录必须满足的次要条件
[ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT { [ offset,] row_count | row_count ,offset }]; #指定查询的记录从哪条至哪条
注:
[]括号代表可选的 {}括号代表必须的 #MySQL语句中的注释符,也可以用 /*注释内容*/
·指定查询字段
·查询表结果时,可指定查询结果的数据列
查询表中所有的数据列结果,采用“*”符号;
如:select * from student;(效率低,不推荐)
·可指定查询的结果数据列;
如只查询student表中的学号、姓名、电话:SELECT StudentNo, StudentName, Phone FROM student;
如区分连接查询时两个表有同名的字段(可指定该字段属于哪个表):
SELECT student.StudentNo,StudentName,StudentResult FROM student,result;
·AS子句作为别名
·AS子句作用
可给数据列名取一个新别名
可给表名取一个新别名
可把经计算或总结的结果用另外一个新值来代替
·AS子句用法
SELECT StudentNo AS '学号' FROM student;
注意:AS 也可省略不写
·DISTINCT关键字
·作用
去掉SELECT查询返回的记录结果中重复(所有返回列的值都相同)的记录,只返回一条
·语法
SELECT DISTINCT 字段名1, 字段名2... FROM 表名
·示例
#查询成绩表中的所包含的课程
ID SELECT DISTINCT SubjectNo FROM result;
·注意
ALL 关键字是默认的,返回所有的记录,与之相反
·表达式
数据库中的表达式一般由文本值、列值、NULL、函数和操作符等组成
·应用场景
SELECT语句返回结果列中使用
SELECT语句的ORDER BY、HAVING等子句中使用
DML语句中的where条件语句中使用表达式
·示例
#给返回结果中的课时都加10个课时
SELECT SubjectName '课程名称', ClassHour+10 AS '新学时' FROM subject;
·注意
避免SQL返回结果中包含“ .”,“*”和括号等干扰开发语言程序
·WHERE条件语句
用于检索数据表中符合条件的记录,搜索条件可由一个或多个逻辑表达式组成,结果一般为真或假
·搜索条件的组成
·逻辑操作符
-----------------------------------------------------------------------
| 操作符名称 | 语法 | 描述 |
|-----------------------------------------------------------------------|
| AND或&& |a AND b 或 a && b |逻辑与,同时为真结果才为真 |
| OR或|| |a OR b 或 a||b |逻辑或,只要一个为真,则结果为真 |
| NOT或! |NOT a 或 !a |逻辑非,若操作数为假,结果则为真 |
-----------------------------------------------------------------------
·比较操作符
----------------------------------------------------------------------------------
| 操作符名称 语法 描述 |
|----------------------------------------------------------------------------------|
| IS NULL a IS NULL 若操作符为NULL,则结果为真 |
| IS NOT NULL a IS NOT NULL 若操作符不为NULL,则结果为真 |
| BETWEEN a BETWEEN b AND c 若a范围在b与c之间则结果为真 |
| LIKE a LIKE b SQL模式匹配,若a匹配b,则结果为真 |
| IN a IN (a1,a2,a3,….) 若a等于a1,a2中的某一个,则结果为真 |
----------------------------------------------------------------------------------
注意:
1、数值数据类型的记录之间才能进行算术运算
2、相同数据类型的数据之间才能进行比较
·NULL空值条件查询
NULL代表“无值”
区别于零值0和空符串“ ”
只能出现在定义允许为NULL的字段
须使用 IS NULL 或 IS NOT NULL 比较操作符去比较
·BETWEEN AND范围查询
根据一个范围值来检索
·语法
SELECT 字段列1,字段2 ,..FROM 表名 WHERE 字段x BETWEEN 值1 AND 值2
等同于 >= 和 <= 联合使用
·示例
#查询课程表中课时在110和120之间的所有记录
SELECT * FROM subject WHERE ClassHour BETWEEN 110 AND 120;
等同于:
SELECT * FROM subject WHERE ClassHour >= 110 AND ClassHour <=120;
·IN自定义范围查询
在WHERE子句中使用IN自定义进行范围查询
·语法
SELECT * FROM 表名 WHERE 字段 IN(值1,值2)
查询的字段的值,至少与括号中的一个值相同,多个值之间用英文逗号隔开
·示例
SELECT * FROM subject where ClassHour IN ( 100,110,120 );
·LIKE模糊查询
WHERE子句中,LIKE关键字模糊查询
·语法
“%” 表示匹配0或任意多个字符
“_” 表示匹配单个字符
·示例
#查询包含“数学”的所有课程
SELECT * FROM subject WHERE SubjectName LIKE "%数学%";
#查询所有姓名为“李**”三个字的学生信息
SELECT StudentNo,StudentName FROM student WHERE StudentName LIKE '李__';
·连接查询
如需要多张数据表的数据进行查询,则可通过连接运算符实现多个查询
·内连接(两张或以上的表连接起来查询需要的数据)
·等值
指使用等号"="比较两个表的连接列的值,取两表连接列值相等的记录。
语法:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列 = 表2.列
示例:
SELECT * FROM student_info AS a INNER JOIN student_score AS b ON (a.student_id=b.student_id);
·非等值
语法:
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.列 <> 表2.列
示例:
#要求:从subject和grade数据表查询课程名称和所属年级名称
#非等值连接查询
SELECT SubjectName,GradeName FROM subject,grade;
·自身连接查询
数据表与自身进行连接
·外连接(两张或以上的表连接起来查询某张表的信息)
·左连接(LEFT JOIN)
指将左表的所有记录与右表符合条件的记录,返回的结果除内连接的结果,还有左表不符合条件的记录,并 在右表相应列中填NULL。
示例:
SELECT 字段1,字段2 FROM table_1 LEFT JOIN table_2 ON table_1.字段x=table_2.字段y;
·右连接(RIGHT JOIN)
与左外连接相反,指将右表的所有记录与左表符合条件的记录,返回的结果除内连接的结果,还有右表不符 合条件的记录,并在左表相应列中填NULL
·JOIN对比
------------------------------------------------------------------
| 操作符名称 描述 |
|------------------------------------------------------------------|
|JOIN(INNER JOIN) 如果表中有至少一个匹配,则返回行 |
| LEFT JOIN 即使右表中没有匹配,也从左表中返回所有的行 |
| RIGHT JOIN 即使左表中没有匹配,也从右表中返回所有的行 |
------------------------------------------------------------------
·子查询
在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
1.嵌套查询可由多个子查询组成,求解的方式是由里及外
2.子查询返回的结果一般都是集合,故而建议使用 IN 关键字
3.如查询结果为一条数据也可使用 =
示例:
SELECT * FROM student stu WHERE stu.id IN (SELECT sc.`sid` FROM score sc ORDER BY sc.`yingyu` DESC);
·ORDER BY排序
对SELECT语句查询得到的结果,按某些字段进行排序,与DESC(大-小)或ASC搭配使用,默认为ASC(小-大)
示例:
SELECT * FROM `student` ORDER BY Class;
·LIMIT分页查询
·语法
select 字段1,字段2 FROM 表名 LIMIT 开始位置,记录数;
·LIMIT m,n或LIMIT m OFFSET n
限制SELECT返回结果的行数
m 制定第一个返回记录行的偏移量
n 制定返回记录行的最大数目
·注意
m不指定则从第一条开始,偏移量为0
m可不写,则返回前n条记录
LIMIT常用于分页显示
·分页查询公式:int M=(页码-1)*页大小;
示例:(pageindex - 1) * pagesize;
·示例
SELECT * FROM `result` LIMIT 5,10 #返回6-15条记录
SELECT * FROM `result` LIMT 5 #返回前5条记录
·统计函数
-------------------------------------------------------------------
| 名称 描述 |
|-------------------------------------------------------------------|
|COUNT( ) 返回列数据的数量,如 SELECT COUNT(*) |
| SUM( ) 返回列数据为数值字段的总和 |
| AVG( ) 返回列数据为数值字段的平均值 |
| MAX( ) 返回列数据为数值、字符字段或表达式的最大值 |
| MIN( ) 返回列数据为数值字段、字符字段或表达式的最小值 |
-------------------------------------------------------------------
·GROUP BY分组
GROUP BY关键字对查询结果分组
1.对所有的数据进行分组统计
2.分组的依据字段可以有多个,并依次分组
3.与HAVING结合使用,进行分组后的数据筛选
示例:
SELECT Tsex AS '性别',COUNT(Tsex) AS '人数' FROM `teacher` GROUP BY Tsex HAVING 性别 = '男';
·索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息是数据库中个用来提高查询性 能最常用的工具。
索引分类:普通索引、唯一索引、主键索引、全文索引、删除索引、禁用索引
普通索引 直接创建,没有唯一性之类的限制
语法:
create index 索引名 on 表名 (列名[(length)])
唯一索引 :创建和普通基本相似、索引列所出现的值具有唯一性
语法:
create unique index 索引名 on 表名 (列名[(length)])
创表附带索引:
语法:
create table 表名([...],unique index[索引名] (列名[(length)]))
主键索引:是一种特殊的唯一索引
语法:
create table 表名 ([...],primary key(列名))
ps:当建立主键时,主键索引会自动建立,不必重复设置,一张表只有一个主键,所以只有一个主键索引
删除索引:
语法:
drop index 索引名 on 表名
禁用索引:
语法:
alter table 表名 disable keys
启用索引:
语法:
alter table 表名 enable keys
查看索引:
语法:
show index 表名 表名
存储引擎分为: Myisam 和 innodb
myisam 不支持外键,事务 一边插入一边建立索引
innodb 支持 外键 事务
因此 myisam表在大批量数据导入时,为提高效率应先禁用索引然后在开启
最合适索引的列,是出现在where子句中的列,或链接字句(on)中指定的列,而不是出现在select后的列
索引的值越多不同,效果越好
使用短索引不仅可以节省空间而且会使查询更快捷
·视图
视图是一张虚拟表,视图不存放数据,视图仅用作查询。
语法:
·创建视图
CREATE VIEW VIEW_name
AS <SELECT 语句>;
·删除视图
DROP VIEW [IF EXISTS] VIEW_name;
·查看视图
SELECT 字段1,字段2 FROM VIEW_name;
示例:
#创建视图
CREATE VIEW student_sname AS
SELECT
`student`.`Name`,
`student`.`Sex`,
`student`.`Birth`
FROM
`student`
WHERE `student`.`Name` LIKE '张%';
#查看视图
SELECT * FROM `student_sname`;
#删除视图
DROP VIEW `student_sname`;
----------------------------------------------------------------------------------------------------------------------
Copyright © 曹帅华 All Rights Reserved