Mysql应用

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
-- SQL:Structured Query language - 结构化查询语言 - 不区分大小写 
-- 1. DDL :Data DEfinition Language - 数据定义语言- create(创建)/drop(删除)/alter(修改)
-- 2. DML: Data Manipulation Language - 数据操作语言 - insert(添加)/delete(删除)/update(改)/select(查)
-- 3. DCL: Data Control Language - grant/revokr/commit/rollback
-- 如果存在名为school的数据库就删除
drop database if exists school;
-- 创建school数据库并设置默认字符集为utf8
create database school default charset utf8;

-- 切换到school数据上下文环境
use school;

-- 如果存在名为tb_student的表就删除
drop table if exists tb_student;

-- 创建学生表tb_student
create table tb_student
(
stuid int not null comment '学号',
stuname varchar(31) not null comment '姓名',
stusex enum('男','女') default '男' comment '性别',
stubirth date comment '出生日期',
stuaddr varchar(255) comment '家庭地址',
primary key (stuid)
);

-- 修改tb_student 表的表结构
alter table tb_student add column stutel char(11) comment '联系电话';

-- 修改tb_student表结构删除一个列
alter table tb_student drop column stutel;

-- 修改tb_student 表结构修改一个列
alter table tb_student change column stuname stuname varchar(20) not null;


-- 如果存在名为tb_course的表就删除
drop table if exists tb_course;
-- 新建课程表 tb_course
create table tb_course
(
cid int unsigned not null comment '课程编号',
cname varchar(31) not null comment '课程名',
credit tinyint unsigned not null comment '学分',
cdate timestamp default now() comment '开课日期',
primary key (cid)
);
-- select now();
-- select year(now());
-- select date(now());
-- select time(now());

-- 录入数据
insert into tb_student values
(1001, '小明', '男', '19980529','四川成都');
insert into tb_student values
(1002, '小花', '女', '19980415','四川绵阳');
insert into tb_student (stuid, stuname, stusex)
values(1003, '小华', '男');
-- 多行录入
insert into tb_student (stuid, stuname, stusex) values
(1004, '李元芳', '男'),
(1005, '狄仁杰', '男'),
(1006, '武则天', '女');


-- 添加课程
insert into tb_course values
(2001, '语文',1,'2017.0527'),
(2002, '数学',2,'2017.0527'),
(2003, '英语',3,'2017.0527');



-- 删除记录 <> - 不等号
-- delete from tb_student where stuid=1005;
-- delete from tb_student where stuid>1005;
-- delete from tb_student between 1003 and 1005;


-- 删全表

-- 更新记录
update tb_student set stubirth='1995-5-5' where stuid=1004;
update tb_student set stubirth='1995-5-5', stuaddr = '河北保定' where stuid=1003;

-- 修改多个
-- update tb_course set credit='4' where cid=2001 or cid=2002;
-- update tb_course set credit='4' where cid in (2001,2003);
-- 修改单个字符
-- update tb_course set credit='4' where cid=2001;


-- 查询记录
select * from tb_student;
select * from tb_course;

-- 投影
select stuid, stuname, stusex from tb_student;

-- 别名
select stuid as 学号, stuname as 姓名, stusex as 性别 from tb_student;

-- 筛选
select stuid, stuname, stusex from tb_student where stusex='女';
select stuname, stusex, stubirth from tb_student where stubirth between '1990-1-1' and '1999-12-31';
select stuname, stusex, stubirth from tb_student where stubirth between '1990-1-1' and '1999-12-31' and stusex='男';
select stuname, stusex, stubirth from tb_student where stubirth between '1990-1-1' and '1999-12-31' or stusex='男';


select stuid, stuname from tb_student where stuid in (1001,1004);

-- 判断空值(null)不能用=或<>,需要用is或者is not
select * from tb_student where stuaddr is null;
select * from tb_student where stuaddr is not null;


insert into tb_student values (1007, '李白', default, null, null);
insert into tb_student values (1008, '李白菜', '女', null, null);
-- 模糊查询

select * from tb_student where stuname like '李%';
select * from tb_student where stuname like '小_';
select * from tb_student where stuname like '%白';
select * from tb_student where stuname like '%白%';

-- 排序 order by 排序
select * from tb_student order by stuid desc;
select * from tb_student order by stuname asc;

select * from tb_student order by stusex asc;
select * from tb_student order by stusex desc, stuid asc;

-- 分页查询
select * from tb_student order by stuid desc limit 3;
select * from tb_student order by stuid desc limit 3 offset 3;
select * from tb_student order by stuid desc limit 3,3;
select * from tb_student order by stuid desc limit 3 offset 6;
select * from tb_student order by stuid desc limit 6,3;

-- 函数
-- distinct 去重
select distinct substr(stuname, 1, 1) from tb_student;

select substr(stuname, 2, length(stuname)) from tb_student;


-- 聚合函数(统计函数)
select max(credit) from tb_course;
select min(credit) from tb_course;

select max(stubirth) from tb_student;

select sum(credit) from tb_course; -- 求和
select avg(credit) from tb_course; -- 求平均
select count(stuid) from tb_student; -- 求个数

-- 分组查询
-- group by 分组
select stusex, count(stuid) from tb_student group by stusex;



-- 创建用户
create user 'wangdachui'@'%' identified by '123456';

-- 授权操作 with grant option --> 授权给别人
-- 把权限全部赋予用户并赋予用哦过户授权给他人的权限
grant all privileges on *.* to 'wangdachui'@'%' with grant option;
-- 召回权限
revoke all privileges on *.* from 'wangdachui'@'%';
-- 给用户赋查询的权限
grant select on school.* to 'wangdachui'@'%';

grant delete, create, insert, update,drop, alter on school.* to 'wangdachui'@'%';


-- 表与表之间的关系

-- 一对一 (人和身份证,用户和购物车)
-- 一对多 / 多对一 (人和银行卡,用户和订单)要维持这种关系,需要在多的一方去添加外键关系
-- 多对多 (学生和课程,订单和商品)

-- 外键:外来的主键(其他表的主键)
-- 学生、 课程、学院、老师

-- 创建SRS数据库
drop database if exists SRS;
create database SRS default charset utf8 collate utf8_bin;

-- 切换到SRS数据库
use SRS;

-- 创建学院表
create table tb_college
(
collid int not null auto_increment comment '学院编号',
collname varchar(50) not null comment '学院名称',
collmaster varchar(20) not null comment '院长姓名',
collweb varchar(511) default '' comment '学院网站',
primary key (collid)
);

-- 添加唯一约束
alter table tb_college add constraint uni_college_collname unique (collname);

-- 创建学生表
create table tb_student
(
stuid int not null comment '学号',
sname varchar(20) not null comment '学生姓名',
gender bit default 1 comment '性别',
birth date not null comment '出生日期',
addr varchar(255) default '' comment '籍贯',
collid int not null comment '所属学院编号',
primary key (stuid)
);

-- 添加外键约束
alter table tb_student add constraint fk_student_collid foreign key (collid) references tb_college (collid);

-- 创建教师表
create table tb_teacher
(
teaid int not null comment '教师工号',
tname varchar(20) not null comment '教师姓名',
title varchar(10) default '' comment '职称',
collid int not null comment '所属学院编号'
);

-- 添加主键约束
alter table tb_teacher add constraint pk_teacher primary key (teaid);

-- 添加外键约束
alter table tb_teacher add constraint fk_teacher_collid foreign key (collid) references tb_college (collid);

-- 创建课程表
create table tb_course
(
couid int not null comment '课程编号',
cname varchar(50) not null comment '课程名称',
credit tinyint not null comment '学分',
teaid int not null comment '教师工号',
primary key (couid)
);

-- 添加外键约束
alter table tb_course add constraint fk_course_tid foreign key (teaid) references tb_teacher (teaid);

-- 创建学生选课表
create table tb_score
(
scid int not null auto_increment comment '选课编号',
sid int not null comment '学号',
cid int not null comment '课程编号',
seldate date comment '选课时间日期',
mark decimal(4,1) comment '考试成绩',
primary key (scid)
);

-- 添加外键约束
alter table tb_score add constraint fk_score_sid foreign key (sid) references tb_student (stuid);
alter table tb_score add constraint fk_score_cid foreign key (cid) references tb_course (couid);


-- 插入学院数据
insert into tb_college (collname, collmaster, collweb) values
('计算机学院', '左冷禅', 'http://www.abc.com'),
('外国语学院', '岳不群', 'http://www.xyz.com'),
('经济管理学院', '风清扬', 'http://www.foo.com');

-- 插入学生数据
insert into tb_student (stuid, sname, gender, birth, addr, collid) values
(1001, '杨逍', 1, '1990-3-4', '四川成都', 1),
(1002, '任我行', 1, '1992-2-2', '湖南长沙', 1),
(1033, '王语嫣', 0, '1989-12-3', '四川成都', 1),
(1572, '岳不群', 1, '1993-7-19', '陕西咸阳', 1),
(1378, '纪嫣然', 0, '1995-8-12', '四川绵阳', 1),
(1954, '林平之', 1, '1994-9-20', '福建莆田', 1),
(2035, '东方不败', 1, '1988-6-30', null, 2),
(3011, '林震南', 1, '1985-12-12', '福建莆田', 3),
(3755, '项少龙', 1, '1993-1-25', null, 3),
(3923, '杨不悔', 0, '1985-4-17', '四川成都', 3);

-- 插入老师数据
insert into tb_teacher (teaid, tname, title, collid) values
(1122, '张三丰', '教授', 1),
(1133, '宋远桥', '副教授', 1),
(1144, '杨逍', '副教授', 1),
(2255, '范遥', '副教授', 2),
(3366, '韦一笑', '讲师', 3);

-- 插入课程数据
insert into tb_course (couid, cname, credit, teaid) values
(1111, 'Python程序设计', 3, 1122),
(2222, 'Web前端开发', 2, 1122),
(3333, '操作系统', 4, 1122),
(4444, '计算机网络', 2, 1133),
(5555, '编译原理', 4, 1144),
(6666, '算法和数据结构', 3, 1144),
(7777, '经贸法语', 3, 2255),
(8888, '成本会计', 2, 3366),
(9999, '审计学', 3, 3366);

-- 插入选课数据
insert into tb_score (sid, cid, seldate, mark) values
(1001, 1111, '2017-09-01', 95),
(1001, 2222, '2017-09-01', 87.5),
(1001, 3333, '2017-09-01', 100),
(1001, 4444, '2018-09-03', null),
(1001, 6666, '2017-09-02', 100),
(1002, 1111, '2017-09-03', 65),
(1002, 5555, '2017-09-01', 42),
(1033, 1111, '2017-09-03', 92.5),
(1033, 4444, '2017-09-01', 78),
(1033, 5555, '2017-09-01', 82.5),
(1572, 1111, '2017-09-02', 78),
(1378, 1111, '2017-09-05', 82),
(1378, 7777, '2017-09-02', 65.5),
(2035, 7777, '2018-09-03', 88),
(2035, 9999, date(now()), null),
(3755, 1111, date(now()), null),
(3755, 8888, date(now()), null),
(3755, 9999, '2017-09-01', 92);