-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmysql.txt
More file actions
380 lines (336 loc) · 14.6 KB
/
mysql.txt
File metadata and controls
380 lines (336 loc) · 14.6 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
连接别的电脑的mysql host名就是那台电脑的ipv4
127.0.0.1 是自己的电脑
ip地址是外网分配的
C:\Windows\System32\drivers\etc\host 文件
MySQL57
1.默认安装
c/program files/mysql
2.配置环境变量
1)新建MYSQL_HOME变量,并配置:C:\Program Files\MySQL\MySQL Server 5.6
MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.6
2)编辑path系统变量,将%MYSQL_HOME%\bin添加到path变量后。配置path环境变量,也可不新建MYSQL_HOME变量,而是直接将MySQL安装目录下的bin配置到path变量下,即:C:\Program Files\MySQL\MySQL Server 5.6\bin
Path:%MYSQL_HOME%\bin
或Path:C:\Program Files\MySQL\MySQL Server 5.6\bin
3.
登陆连接:mysql -uroot -p -hlocalhost -P3308
net start mysql57
net stop mysql57
\s server characterset:utf-8 把编码方式全弄成utf-8
my.ini
[mysql]
default-character-set=utf-8
exit,quit,\q退出
CRTL+C 退出到命令提示符
4.参数:
-u,-p,-h,-D,--prompt=name设置命令提示符,-P端口号(默认3306),--delimiter=name,-V版本信息并退出
5.
prompt 提示符
\D完整日期
\d当前数据库
\h服务器名称
\u用户名
select version();
select now()
select user()
select database()
\c 当前命令不会被执行
6。 DELIMITER +分隔符
7. \T 开启输出日志 \t 结束
8. CREATE DATABASE IF NOT EXISTS test1 DEFAULT CHARACTER SET = 'UTF8';
SHOW WARNINGS; 查看上一操作的警告
SHOW DATABASES;SHOW SCHEMAS;
SHOW CREATE DATABASE或SCHEMA 数据库名称;
DROP DATABASE db;
9.数据类型
CREATE TABLE [IF NOT EXISTS] tbl_name(字段名称 字段类型)
1.日期时间类型(TIME,DATE,DATETIME,TIMESTAMP,YEAR)
2.整数类型(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT,BOOLEAN=TINYINT(1))
3.浮点类型(FLOAT[(M,D)],DOUBLE[(M,D)],DECIMAL[(M,D)])
4.字符串类型(CHAR(M),VARCHAR(M),TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT,ENUM('VALUE1','VALUE2')枚举,SET('value1',..)集合能选择多个值。)
查看帮助手册 help tinyint;help create table;? BIGINT
10.存储引擎
决定了表在计算机中的存储方式
SHOW ENGINES;
后面加\G能让结果显示的更有规律
SHOW VARIABLES LIKE 'have%';
SHOW VARIABLES LIKE 'storage_engine';查看默认的引擎
常用引擎:innodb,myisam,memory
1.innodb 提供回滚 恢复;支持事务处理,并发控制, 支持外键 ;存储在.fim文件中;
缺点:读写效率低 占用空间大
2.myisam 存储成三个文件,建表保存到fim,myd,myi三个文件中,静态型,动态型,压缩型
优点:处理速度快,空间占用小,插入,读取数据快
缺点:不支持事务
3.memory 存储在内存中,fim类型,优点:速度快
缺点:占用内存,不能建立大表
11.注释
#
--
COMMENT
12. show tables 查看表
USE `DB`
CREATE TABLE IF NOT EXISTS `tblname` (
id SMALLINT,
username VARCHAR(20),
age TINYINT,
sex ENUM('男','女'), #当需要输入中文的时候,需要临时转换编码 (SET NAMES UTF8)
email VARCHAR(50),
birth YEAR,
salary FLOAT(8,2),
tel INT,
married TINYINT(1)
)ENGINE=INNODB CHARSET=UTF8;
13.
DESC tbl_name
DESCRIBE tbl_name
SHOW COLUMNS FROM tbl_name
字段
INSERT tbl_name VALUE ();
SELECT * FROM tbl_name;
字段属性 UNSIGNED 无负号
零填充 ZEROFILL(自动加上UNSIGNED)
14.字符串
CHAR 定长 空间大 时间短
VARCHAR 变长 空间小 时间长
CHAR 不保留末尾空格
SELECT CONCAT('-', str) FROM TABLE
数据检索的效率:CHAR>VARCHAR>TEXT
15.
枚举类型
可以以序号代替值
集合类型
SET('A','B','C')
INSERT tbl VALUES('A,B,C')
INSERT tbl VALUES(3) #序列的前两个值
集合以二进制保存,即第一个是1,第二个是2,其次是4,8,16,32。。。
16.
CREATE TABLE IF NOT EXISTS test3(
birth YEAR
);
INSERT test3 VALUES('1969');
INSERT test3 VALUES('12'); #2012
INSERT test3 VALUES('0'); #2000
INSERT test3 VALUES(0); #0000
YEAR占用空间小
17. 完整性约束条件
PRIMARY KEY主键(不重复 不为空,单字段主键 多字段主键)
AUTO_INCREMENT自增长(1开始,一个表中只能有一个自增长字段,而且必须是主键)
FOREIGN KEY外键
NOT NULL
UNIQUE KEY唯一
DEFAULT
CREATE TABLE IF NOT EXISTS test4(
id INT AUTO_INCREMENT,
username VARCHAR(20),
PRIMARY KEY(id, username) #复合主键
);
INSERT test4 VALUES('queen')
18.查看表的创建语句
SHOW CREATE TABLE tbl_name
19.自增长(1开始,一个表中只能有一个自增长字段,而且必须是主键)
CREATE TABLE IF NOT EXISTS test5(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20)
)AUTO_INCREMENT=100;
INSERT test5 VALUES(NULL,'A');
ALTER TABLE test5 AUTO_INCREMENT=500;#把自增长初始值从100改为500
20.非空约束
CREATE TABLE IF NOT EXISTS test5(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED);
INSERT test5(username,password) VALUES ('','')
21.默认值
CREATE TABLE IF NOT EXISTS test6(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
password VARCHAR(20) NOT NULL,
age TINYINT UNSIGNED DEFAULT 18,
addr VARCHAR(50) NOT NULL DEFAULT '北京');
INSERT test6 VALUES(3,'QUEEN','QUEEN',DEFAULT,'上海');
22.唯一性约束(UNIQUE KEY)
CREATE TABLE IF NOT EXISTS test7(
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(20) NOT NULL,
card CHAR(18) UNIQUE
);
23.建表总结
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称,字段类型,[UNSIGNED,ZEROFILL] [NULL|NOT NULL] [DEFAULT] [[PRIMARY] KEY|UNIQUE [KEY]] [AUTO_INCREMENT]
)ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100;
24.修改表名
ALTER TABLE tbl_name RENAME [TO|AS] new_name;
RENAME TABLE tbl_name TO new_name;
25.添加删除字段
ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称];
ALTER TABLE tbl_name DROP 字段名称;
ALTER TABLE tbl_name DROP 字段名称1,DROP 字段名称2,DROP 字段名称3;
26.修改字段
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称];
ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称];
27.添加删除主键
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY[index_type](字段名称1,字段名称2);
ALTER TABLE tbl_name DROP PRIMARY KEY;
28.添加删除唯一
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [index_type][索引名称](字段名称1,字段名称2);
ALTER TABLE tbl_name DROP INDEX 字段名称;
mysql -uroot -p -D database_name;
29.插入数据
INSERT [INTO] tbl_name VALUES()
INSERT tbl_name (字段名称1,字段名称2...) VALUES (值1,值2...)
INSERT tbl_name SET 字段名称=值,字段名称2=值2
INSERT tbl_name SELECT id,user_name FROM tbl_name2
30.更新删除记录
UPDATE tbl_name SET 字段名称=值 [WHERE条件][ORDER BY 字段名称][LIMIT限制条件数];
DELETE FROM tbl_name [WHERE条件][ORDER BY 字段名称][LIMIT限制条件数];(delete 不会重置AUTO_INCREMENT)
TRUNCATE [TABLE] tbl_name;(彻底清空数据,重置AUTO_INCREMENT)
31.模糊查询(LIKE,NOT LIKE)
%:代表>=0的任意字符
_:代表1个任意字符
32.逻辑运算符
AND,OR
IS NOT NULL
33.分组
GROUP BY(只显示一个组里的第一条数据)
34. GROUP_CONCAT()
SELECT id,sex,GROUP_CONCAT(username) FROM tbl_name GROUP BY sex;
35.聚合函数
COUNT() 不统计NULL值 中间可以使* 也可以是字段名称(配合WITH ROLLUP 将分组后的数据再求总个数和)
MAX()(配合WITH ROLLUP 将分组后的数据再求最大值)
MIN()(配合WITH ROLLUP 将分组后的数据再求最小值)
AVG()(配合WITH ROLLUP 将分组后的数据再求平均值)
SUM()
36.having 子句(对分组后的数据进行二次筛选,配合GROUP BY)
SELECT sex,GROUP_CONCAT(username),COUNT(*),MAX(age),SUM(age) FROM tbl_name GROUP BY sex HAVING COUNT(*) >2 AND MAX(age) >56;
37.ORDER BY
DESC(降序)
ASC(升序,默认)
SELECT * FROM tbl_name ORDER BY RAND(); 随机提取排序
38.limit
SELECT * FROM table LIMIT 3;
SELECT * FROM table LIMIT 1;
SELECT * FROM table LIMIT 0,1;(好比分页,左边的表示第一页,右边的表示一页里有几条数据)
39.内连接查询(找到表和表中连接的桥梁)
JOIN|CROSS JOIN|INNER JOIN
ON连接条件
40.外连接查询
LEFT [OUTER] JOIN(显示左表的全部记录和右表中的符合条件记录)
RIGHT [OUTER] JOIN
与内连接区别
41.外键操作
保持数据的一致性和完整性
父表和子表的存储引擎必须为InnoDB
外键列和参照列必须有相似的数据类型,数字的长度和是否有符号位必须相同
必须创建索引,如果没索引,MYSQL会自动创建
RESTRICT拒绝对父表的删除和更新操作(外键默认)
CREATE TABLE IF NOT EXISTS department(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
depName VARCHAR(20) NOT NULL UNIQUE
)ENGINE=INNODB;
CREATE TABLE IF NOT EXISTS employee(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE,
)ENGINE=INNODB;
department是主表,employee是从表
CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
ON DELETE CASCADE:对父表的删除操作,子表能自动删除
ON UPDATE CASCADE:对父表的删除更新,子表能自动更新
SET NULL:从父表删除更新行,并设置子表中的外键列为NULL。
42.添加或删除外键
CREATE TABLE IF NOT EXISTS employee(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department(id)#(emp_fk_dep:外键名称)
)ENGINE=INNODB;
ALTER TABLE employee DROP FOREIGN KEY emp_fk_dep;
ALTER TABLE employee ADD CONSTRAINT emp_fk_dep FOREIGN KEY(depId) REFERENCES department;
43.联合查询
UNION 去重
UNION ALL
SELECT username FROM tbl1 UNION SELECT username FROM tbl2;
44.子查询(IN,NOT IN,>=(),EXISTS,NOT EXISTS)
SELECT id,username FROM tb1;SELECT id FROM tb2 WHERE depId IN (1,2,3);
SELECT id,username FROM tb1;SELECT id FROM tb2 WHERE depId IN (SELECT id FROM tb2);
SELECT id,username FROM tb1 WHERE score >=(SELECT level FROM tb2 WHERE id=1);
SELECT id,username FROM tb1 WHERE EXISTS(SELECT * FROM tb2 WHERE id=5)(如果内层语句为真,外层语句会被执行,否则外层语句不会被执行)
SELECT id,username FROM tb1 WHERE score >=ANY(SELECT level FROM tb2);(>内层语句结果的最小值)
SELECT id,username FROM tb1 WHERE score >=SOME(SELECT level FROM tb2);(>内层语句结果的最小值)
SELECT id,username FROM tb1 WHERE score >=ALL(SELECT level FROM tb2);(>内层语句结果的最大值)
INSERT tbl(id,num) SELECT id,score from tbl2(把后面语句结果插入到tbl表中)
CREATE TABLE IF NOT EXISTS test2(
id TINYINT KEY,
num TINYINT UNSIGNED
)SELECT id,num FROM tbl
45.正则表达式查询
SELECT * FROM tbl WHERE username REGEXP '^t'
46.运算符
x1 DIV x2
x1 % x2
MOD 取余
XOR 异或
BETWEEN 10 AND 30(是否在10,30之间)
47.数学函数库
SELECT NOW();
CEIL()进一取整
FLOOR()舍一取整
MOD
POWER()幂运算
TRUNCATE()截断
PI()
RAND()
SIGN()
48.练习题
项目描述
完成项目素材中的SQL练习,并将编写的SQL文件和运行截图保存,打包后作为作业提交。
设计一个学生成绩数据库,该库包含学生,老师,课程和成绩等信息并完成后面的练习(注意主外键关系)。
学生:学号(SNO)、姓名(SNAME)、性别(SSEX)、生日(SBIRTHDAY )、所属班级(CLASS )
课程:课程编号(CNO)、课程名(CNAME)、授课老师(TNO)
成绩:学号(SNO)、课程编号(CNO)、得分(DEGREE)
老师:教师编号(TNO)、教师姓名(TNAME)、性别(TSSEX)、生日(TBIRTHDAY)、职称(TITLE)、单位科室(DEPART)
要求:
一、每张表使用SQL语句插入至少10条数据。
二、完成以下查询题目:
1、 查询Student表中的所有记录的Sname、Ssex和Class列。
2、 查询教师所有的单位即不重复的Depart列。
3、 查询Student表的所有记录。
4、 查询Score表中成绩在60到80之间的所有记录。
5、 查询Score表中成绩为85,86或88的记录。
6、 查询Student表中“95031”班或性别为“女”的同学记录。
7、 以Class降序查询Student表的所有记录。
8、 以Cno升序、Degree降序查询Score表的所有记录。
9、 查询“95031”班的学生人数。
10、查询Score表中的最高分的学生学号和课程号。
11、查询‘3-105’号课程的平均分。
12、查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
13、查询所有学生的Sname、Cno和Degree列。
14、查询“95033”班所选课程的平均分。
15、假设使用如下命令建立了一个grade表:
create table grade(low int,upp int,rank char(1));
insert into grade values(90,100,’A’);
insert into grade values(80,89,’B’);
insert into grade values(70,79,’C’);
insert into grade values(60,69,’D’);
insert into grade values(0,59,’E’);
commit;
现查询所有同学的Sno、Cno和rank列。
16、查询"张旭"教师任课的学生成绩。
17、查询选修某课程的同学人数多于5人的教师姓名。
18、查询所有教师和同学的Name、Sex和Birthday.
19 查询所有未讲课的教师的Tname和Depart.
20、查询至少有2名男生的班号。
21、查询Student表中不姓“王”的同学记录。
22、查询所有选修“计算机导论”课程的“男”同学的成绩表。
23. MySQL5.7更改端口号
1、打开cmd;
2、输入命令:net stop +MySQL的服务名,停止MySQL服务,如果未启动MySQL服务则可跳过该步骤;
3、输入命令:mysqld --remove MySQL的服务名--defaults-file=“my-default.ini的路径”卸载MySQL服务,如果未安装MySQL服务则可跳过该步骤;
mysqld --remove mysql57 --defaults-file="C:\Program Files\MySQL\MySQL Server 5.7"
4、在MySQL的安装目录下用记事本打开my-default.ini文件,取消[mysqld]中的port注释,并将port设置成您想要更改的端口号,保存退出;
4、输入命令:mysqld --install MySQL的服务名--defaults-file=“my-default.ini的路径”,安装MySQL服务;
mysqld --install mysql57 --defaults-file="C:\Program Files\MySQL\MySQL Server 5.7"
5、提示安装成功后,输入命令:net start MySQL的服务名,启动MySQL服务。
登录mysql, 使用命令show global variables like 'port';查看端口号
28.遇见的问题:mysql 服务 既无法开启,也无法关闭,连卸载都卸载不了哦,具体原因没有找到,最后把环境变量里的MYSQL_HOME 删除掉,重启,就能卸载了