-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmysql8.txt
378 lines (204 loc) · 11 KB
/
mysql8.txt
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
(1)安装信息
在官网下载本地.msi安装程序(即mysql installer,下载地址:https://dev.mysql.com/downloads/installer/,选第二个离线程序),安装时,对于新手一路默认安装
安装路径: C:\Program Files
windows服务名称:mysql ------- net start/stop mysql 启动与关闭mysql
mysql服务的端口号为:3306(默认)
安装完成后,mysql默认将数据存储在: C:\ProgramData\MySQL\MySQL Server 8.0\Data(ProgramData目录有可能默认隐藏了,点击查看勾选隐藏的项目即可),这个不应该存储在c盘,需要更改到其他指定位置
使用 SHOW VARIABLES LIKE '%DATADIR%';可以查看当前数据库的存储位置
如果默认安装,my.ini文件在C:\ProgramData\MySQL\MySQL Server 8.0中,和数据库存储在一个目录
管理员: 用户名:root 密码: 123456
(2)mysql命令的使用:C:\Program Files\MySQL\MySQL Server 8.0\bin在该目录下打开命令行
mysql -u root -p -P 3306 -h 127.0.0.1 ------- 账号登录:-u:用户名,-p:密码(没有跟参数,在回车后输入),-P:mysql服务端口号,-h:mysql服务端主机
exit or quit or \q ------退出mysql命令
再次用之前的账户登录,下面的命令都要用;结尾,以表示结束,关键字函数名用大写(也可以用小写),数据库名,表名,字段名用小写
SELECT VERSION(); -------- 显示mysql版本
SELECT NOW(); ------ 显示当前日期
SELECT USER(); ------ 显示当前用户
SHOW DATABASES;------ 显示所有数据库
CREATE DATABASE db1; ------ 创建名为db1的数据库
SHOW CREATE DATABASE db1; ------ 显示名为db1的数据库在创建时的信息
CREATE DATABASE IF NOT EXISTS db2 CHARACTER SET gbk; ------ 名为db2的数据库不存在时创建,并设置编码为gbk(默认为utf8)
SHOW CREATE DATABASE db2; ------ 显示名为db2的数据库在创建或修改时的信息
ALTER DATABASE db2 CHARACTER SET utf8; ------ 将名为db2的数据库的编码修改为utf8
SHOW CREATE DATABASE db2; ------ 显示名为db2的数据库在创建或修改时的信息
SHOW WARNINGS; ------ 显示警告信息
DROP DATABASE db1; ------ 删除名为db1的数据库,如果不存在会报错
DROP DATABASE IF EXISTS db1; ------ 名为db1的数据库存在时删除
数据类型:
整形:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
浮点型: FLOAT, DOUBLE
日期类型: YEAR, TIME, DATE, DATETIME, TIMESTAMP
字符类型: CHAR(M), VARCHAR(M), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT, ENUM, SET
创建数据表
CREATE DATABASE db; ------ 创建名为db的数据库
USE db; ------ 使用名为db的数据库
SELECT DATABASE(); ------ 显示当前被使用的数据库
CREATE TABLE persion(
name VARCHAR(100),
age TINYINT UNSIGNED,
salary FLOAT(8,2) UNSIGNED
); ------ 在db的数据库中创建名为persion的数据表
SHOW CREATE TABLE persion; ------ 显示persion数据表在创建时的信息
SHOW TABLES ------ 显示当前数据库所有数据表
SHOW COLUMNS FROM persion; ------ 显示persion数据表的结构
INSERT persion (name,age,salary) VALUES ('dong',28,13000.35); ------- 在persion数据表中添加一条记录
SELECT * FROM persion; ------- 显示persion数据表中所有记录
CREATE TABLE persion2(
name VARCHAR(100) NOT NULL, //该字段不能为空
age TINYINT(3) UNSIGNED NULL //该字段可以为空
);
INSERT persion2 (name, age) VALUES ('liu',NULL); ------ 添加记录是age可以为NULL,而name不能
CREATE TABLE persion3(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, ------ 定义自增的主键, AUTO_INCREMENT只能在主键中使用
name VARCHAR(100) NOT NULL,
age TINYINT(3) UNSIGNED NULL
);
INSERT persion3 (name,age) VALUES ('zhao',32); ------ id = 1
INSERT persion3 (name,age) VALUES ('liu',22); ------ id = 2
SELECT * FROM persion3; ------- 显示persion3数据表中所有记录
CREATE TABLE persion3(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, ------ 定义自增的主键, AUTO_INCREMENT只能在主键中使用
name VARCHAR(100) NOT NULL UNIQUE KEY, ------ UNIQUE KEY用于定义独一无二的字段值,如果重复就会报错
sex ENUM('1', '2', '3') DEFULT '3' ------ DEFULT用于为字段设置默认值,当sex没有录入时使用默认值‘3’
);
外键:含有外键的表和父表的存储引擎都必须为innoDB
create table provinces (
id smallint unsigned auto_increment primary key,
province varchar(20) not null,
desc varchar(500),
);
show create table provinces ------ 可以查看刚才创建的表使用的引擎是否是innoDB
alter table provinces change province name char; ------ 将provinces表中名为province的列改为name
alter table provinces drop column desc ; ------ 将provinces表中名为desc的列删除
alter table provinces add column dc varchar(500); ------ 在名为provinces表中添加名为dc的列(在表的最后)
alter table provinces add column other varchar(300) not null after dc; ------ 在dc列后面追加名为other的列
create table users (
id smallint unsigned auto_increment primary key,
name varchar(50) not null,
pid smallint unsigned, ------外键列的数据类型要与父表中的参照列保持一致
foreign key (pid) references provinces (id)
);
向表中插入记录
create table student(
id smallint unsigned auto_increment primary key,
name varchar(20) not null,
age smallint unsigned default 18,
school varchar(20)
);
insert student (name,age,school) values ('dong',28,'hafu'); ------ 自增的主键id不需要添加值
insert student (name,age,school) values ('mao',default,'jianqiao'); ------ 此处年龄字段使用默认值
insert student values (null,'zhang',27,'daz'); ------ 省略列时必须为每个字段赋值,此时自增的主键可赋值为null or default
insert student values (null,'dong',25,'qinghua'),(null,'chai',28,'fudan'); ------ 一次添加多条记录
insert student set name='guo',age=30,school='henan'; ------ 使用insert set 语句来插入一条记录
更新记录(单表更新)
update student set age=age+5; ------ 将age列的值都加5
update student set age=age+5, school=null; ------ 多列更新
update student set age=age+5 where id % 2 = 0; ------ 指定条件更新
删除记录
delete from student where id=6; ------删除id=6的一条记录
查询记录
select * from student; ------ 查询所有列的记录
select id, name from student; ------ 只查询id和name列的记录
select id as uid, name as uname from student; ------ 别名
select id, name from student where name='dong'; -------- 查询满足条件的记录
select * from student order by id; ------ 按id升序排序
select * from student order by id desc; ------ 按id降序排序
select * from student order by name, age desc; ------ 先按name升序,然后在此基础上按age降序排序
select * from student limit 4; ------ 返回数据表中前4条记录
select * from student limit 2,2; ------ 从第3条记录开始返回2条记录
create table goods (
goods_id smallint(5) unsigned auto_increment primary key, ------ 商品id
goods_name varchar(150) not null, ------ 商品名称
goods_cate varchar(49) not null, ------ 商品分类
brand_name varchar(49) not null, ------ 商品品牌名称
goods_price decimal(15,3) unsigned not null, ------ 商品价格
is_show tinyint(1) not null, ------ 是否上架
is_saleoff tinyint(1) not null ------ 是否有货
);
show columns from goods;
select round(avg(goods_price), 2) from goods; ------计算表中所有商品价格的平均值并四舍五入保留两位小数
子查询(sql中含有sql)
select goods_id, goods_name, goods_price from goods where goods_price >=(select round(avg(goods_price), 2) from goods); ------ 查询大于等于平均价格的商品
select brand_name from goods group by brand_name; ------ 按商品品牌分组以得到所有不同的品牌来创建一个名为tbs_brand的品牌数据表
create table if not exists tbs_brand( ------创建一个商品品牌数据表,以存储所有商品品牌
id smallint unsigned primary key auto_increment,
name varchar(40) not null
);
insert tbs_brand (name) select brand_name from goods group by brand_name; ------ 将goods表中的商品名称分组后导入到tbs_brand数据表中
update goods inner join tbs_brand on brand_name=name set brand_name=id; ------ 将 goods表中的brand_name换成tbs_brand表中的id
alter table goods change brand_name brand_id smallint unsigned; ------ 将goods表中的brand_name字段改为brand_id并设置数据类型以及约束
//多表查询
//内连接,显示goods 和 tbs_brand表中都有的
select goods_id, goods_name, name as brand_name from goods inner join tbs_brand on goods.brand_id=tbs_brand.id;------ 在goods和tbs_brand表中查询goods_id, goods_name,brand_name(name的别名, 该字段在tbs_brand表中)字段
//左连接 goods中有的
select goods_id, goods_name, name as brand_name from goods left join tbs_brand on goods.brand_id=tbs_brand.id;------ 在goods和tbs_brand表中查询goods_id, goods_name,brand_name(name的别名, 该字段在tbs_brand表中)字段
//右连接 tbs_brand有的
select goods_id, goods_name, name as brand_name from goods right join tbs_brand on goods.brand_id=tbs_brand.id;------ 在goods和tbs_brand表中查询goods_id, goods_name,brand_name(name的别名, 该字段在tbs_brand表中)字段
//三个以及三个以上表的查询就是使用用逗号分隔的多个 inner/left/right join 语句
//多表删除 ------- 自己在网上查 参考视频 https://www.imooc.com/video/2411
//无限极分类表设计 ------ 自己在网上查 参考视频 https://www.imooc.com/video/2410
//字符运算符 与 函数
concat() ------ 连接字符
concat_ws() ------ 以指定的字符分隔连接的字符
format() ------ 数字格式化
lower() ------ 转化为小写
upper() ------ 转化为大写
left() ------ 从字符串的左侧取n个字符
right() ------ 从字符串的右侧取n个字符
length() ------ 求字符串长度
ltrim() ------ 删除左侧空格
rtrim() ------ 删除右侧空格
trim() ------ 删除两侧空格 trim(leading/trailing/both ' ' from ' mysql ')
substring() ------ 截取字符
[not] like ------ 模式匹配 %:匹配任意多个字符, _: 匹配任意一个字符。select * from test where first_name like '%1%%' escape '1'; 匹配first_name字段中包含%的记录;select * from test where first_name like '%q%' 匹配first_name字段中包含q的记录。
replace() ------ 字符串替换
...
数值运算符 与 函数
ceil() ------ 向上取正
floor ------ 向下取整
div ------ 整数除法,相当于向下取整floor()
mod ------ 取模
power() ------ 幂运算
round() ------ 四舍五入
truncate() ------数字截取
...
比较运算符与函数
[not] between ... and ... ------ select 5 between 1 and 10; 5在1到10之间吗
[not] in() ------ select 10 in(10, 20, 30); 10,20,30中包含10吗
is [not] null ------ select null is null; null是null吗 select * from text where first_name is not null
...
日期时间函数
now() ------ 当前日期和时间 select now(); 返回 2019-06-08 20:00:00
curdate() ------ 当前日期 select currdate(); 返回 2019-06-08
curtime() ------ 当前时间 select currtime(); 返回 20:00:00
date_add() ------ 日期变化 select date_add('2019-06-08 20:00:00', interval 1 year/month/day/hour/minute/second);
datediff() ------ 日期差值 select datediff('2019-06-08','2019-06-09'); 返回-1
date_format() ------ 日期格式化 select date_format('2019-06-08', '%m/%d/%Y'); 返回 06/08/2019; select date_format(now(), '%Y年%m月%d日 %H时:%i分:%s秒');
...
mysql信息函数
connection_id() ------ 连接id
datebase() ------ 当前数据库
last_insert_id() ------
user() ----- 当前登录用户
version() ------ mysql 版本
mysql聚合函数
avg() ------ 平均值
count() ------ 求个数
max() ------ 最大值
min() ------ 最小值
sum() ------ 求和
自定义函数
create function f1() returns varchar(50)
return date_format(now(), '%Y年%m月%d日 %H时:%i分:%s秒');
...
修改sql语句执行界定符
delimiter // ------ 将sql语句的执行界定符修改为 // 默认为 ;
创建存储过程
create procedure removeUserById(in p_id int unsigned)
begin
delete from users where id = p_id;
end
删除存储过程
delete/drop procedure removeUserById;
调用存储过程
call removeUserById;