MySQL

本文详细介绍了在Windows上安装MySQL的步骤,包括下载、解压、配置环境变量、创建配置文件my.ini、初始化数据库、设置与修改密码,以及解决安装过程中可能遇到的问题。此外,还提供了启动和停止MySQL服务的命令,以及数据库和表的操作,如创建、查询、修改和删除。内容涵盖了MySQL的基础安装和基本操作。
摘要由CSDN通过智能技术生成

首先进入mysql安装

1.去MySQL官网下载压缩包,下载地址为:MySQL :: Download MySQL Community Server(官方网站下载地址)。

链接:https://pan.baidu.com/s/14R7sddsE_xLkUF2An5cVHw
提取码:0e0s

2.解压

3.配置环境变量

        1.找到mysql下的bin目录,复制进来

        2、打开电脑的环境变量:此电脑(右键)–>属性–>高级系统设置–>环境变量–>系统变量–>path–>点击编辑–>新建,直接把刚才复制的地址粘贴上去:D:\My-sql\mysql-5.7.33-winx64\mysql-5.7.33-winx64\bin,然后点击确定

4.在mysql文件夹下新建一个my.ini的配置文件,配置详情如下        

#设置mysql客户端默认字符集
[mysqld]
character-set-server=utf8			#设置统一字符编码
collation-server=utf8_general_ci
#设置mysql的安装目录
basedir=D:\My-sql\mysql-5.7.33-winx64\mysql-5.7.33-winx64
#设置mysql数据库的数据的存放目录			
datadir=D:\My-sql\mysql-5.7.33-winx64\mysql-5.7.33-winx64\data
#设置3306端口
port=3306
#允许最大连接数
max_connections=200
#skip-grant-tables	#直接跳过登录认证,不过需要重启服务才会生效
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8		

 5.配置完成后,以管理员运行cmd,然后cd命令到bin目录下

        1.输入:mysqld -install

如果遇到上面这个报错可以试试安装一下我下面发的这个vc运行库

                链接:https://pan.baidu.com/s/1oyoNpEfoHU3KHYa-VzUbPQ
                提取码:j89g        

2.初始数据库文件:mysqld --initialize-insecure --user=mysql

        3.试试启动MySQL吧:net start mysql

        4.然后进入:mysql -uroot -p

        5.没有密码,这个时候修改密码(下面操作有两个版本修改密码的操作)

如果遇到下面的错误,先不要急,往下看

 首先cd到MySQL的bin目录下

 然后执行以下指令

mysqld –initialize

如何mysql服务可以启动了,那就皆大欢喜,如果 还是报错的话,那就下一步

1.删除mysql服务
mysqld --remove mysql
2.检查下my.ini配置是否正确
3.重新安装mysql服务
mysqld --install mysql
4.初始化data
mysqld --initialize-insecure
5最后启动即可
net start mysql

 如果在第四步报了以下错误的话,意思是data下有文件,如果刚入门的话没有什么重要文件删除即可,再重新初始化data就可以

 然后这样是没有密码的,设置密码

mysql5.7版本password这个字段被改成 authentication_string

mysql5.7:

update mysql.user set authentication_string=password("您要修改的密码") where user="root" and host="localhost";

mysql5.6版本:

update mysql.user set password=password("您要修改的密码") where user="root" and host="localhost";

哦,对啦,记得刷新一下MySQL权限

flush privileges;

下面是MySQL5.6版本

安装mysql

#启动/关闭MySQL服务

net start/stop mysql

#登录

mysql -u用户名 -p密码

#修改密码

update mysql.user set password=password("541366") where user="root" and host="localhost";

#新建用户并授予权限:

grant all on . to 'fei'@'%' identified by '010124';
flush privileges;

刷新下权限

flush privileges;

#找寻mysql的残余进程

tasklist |findstr "mysql"

#杀死进程

taskkill /F /PID

#当指令输入错误的时候输入\c,意思终止的意思

\c

#出现在select字段后面的只能是group by后面的分组字段,或使用聚合函数包裹着的字段

set global sql_mode="ONLY_FULL_GROUP_BY";

操作文件夹(库)

create database db1 charset utf8;

show create databse 库名;
show databases;  # 展示所有库

alter database db1 charset gbk;  # 修改db1的字符集为gbk
     

drop database db1;

操作文件(表)

切换文件夹 use db1

查看当前所在文件夹 select database();

create table t1(id int,name char)engine=innodb;  # 设置存储引擎为innodb
create table t4(id int unsigned zerofill);  # unsigned为约束条件代表无符号|zerofill为约束条件代表用0填充
create table t5(score float(255,30));  # 创建一个浮点数的表
create table t7(score decimal(65,30));  # decimal(65,30)这个精确度很高

show create table t1;
show tables;  # 展示所有表      用行表示:\G     
 desc t1;  # 查看表

 

alter table t1 modify name char(6);  # 修改表t1中name的char宽度改为6

alter table t1 change name char(7);  # 修改字段类型
​
alter table 表名 add 字段名 数据类型[完整性约束条件],add字段名 数据类型[完整性约束条件.]  first/after 字段名;  # 添加字段并指定位置
​
alter table 表名 drop 字段名  # 删除字段
​
alter table 表名 modify 字段 新类型;  # 修改字段的类型
​
alter table 表名 change 旧字段 新字段 新类型;  # 修改字段名字和类型

drop table t1;

create table 表名 select * from db1.t1;  # 复制表结构

create table 表名 select * from db1.t1 where 1=2;  # 只复制表结构不要记录,就添加一个限定语句不成立就可以

操作文件内容(记录)

insert into t1(id,Name) values(1,'zhangsan'),(2,'lisi'),(3,'wangwu');

insert into 表名(字段1,字段2) select (字段1,字段2) from 表名 where 限定条件;  # 插入查询结果

select id,Name from db1.t1;  # 直接输入t1是从当前表中查询
select * from db1.t1;  # 查询表中所有内容


单表查询格式:
select distinct 字段1,字段2 from 库.表
where 条件 group by 分组条件 having 过滤 order by 排序字段 limit n;  # where不能使用聚合函数,且在分组之前,having在分组之后,order by默认是升序


select distinct 字段 from 表名;  # 避免重复distinct
select 字段,字段*12 as 新名称 from 表名;  # 假设求年薪,就是将月薪*12然后as的意思就是给改一个新名称显示


concat用于连接字符串:
	select concat('姓名:',name,'年薪:',字段*12 as 新名称 from 表名;
concat_as用于设置第一个参数为分割符:
	select concat_ws(':'name,salary*12) as 新名称 from 表名;


select name,salary from employee where salary>=2000 and salary <=3000;		
select name,salary from employee where salary between 2000 and 3000;		
select name,salary from employee where salary not between 2000 and 3000;  # 与上面相反
select name,salary from employee where age=78 or age=89 or age=23;
select name,salary from employee where age in (78,89,23);
select name,salary from employee where post is null;  # 限定post字段为空
select name,salary from employee where post is not null;  # 限定post字段不为空
select name,salary from employee where name like 'wupe%';  # 模糊语句,%可以作为多个字符
select name,salary from employee where name like 'wupe___'; 	# 一个下划线代表一个字符


正则查询regexp
select * from employee where name regexp '^wu.*(i|q)$';	 # 以wu开头,以i或者结尾


分组group by
select post,group_concat(salary) from employee where age>50 group by post;


聚合函数
max()
min()
count()
avg()
sum()
select * from employee order by age asc,id desc  # 先按照age升序asc如果相同再按照id降序desc:降序,order语句默认升序


select * from employee limit 5; # 取五条数据
select * from employee limit 0,5;  # 0:从第一个开始	5:取五个


多表查询
select sname from student where sid=(select student_id from score where course_id in (select cid from course where teacher_id =(select tid from teacher where tname='李平老师'))
group by student_id
order by avg(num) desc 
limit 1);


内连接:只取两张表的共同地方
select * from employee inner join department on employee.dep_id=department.id;
左连接:在内连接的基础上保留左表的记录
select * from employee left join department on employee.dep_id=department.id;
右连接:在内连接的基础上保留右表的记录
select * from employee right join department on employee.dep_id=department.id;
外连接:在内连接的基础上保留左右两表没有对应关系的记录
select * from employee left join department on employee.dep_id=department.id;
union
select * from employee right join department on employee.dep_id=department.id;

update db1.t1 set id=9 where Name='lisi';  # where限定语句,将Name='lisi'的id改为9



 

delete from t1 where id=3;  # 将id=3的一行删除
truncate 表名;  # 删除表并且将自增长下次添加记录的时候改为1

创建视图

create view 视图名称 as select * from teacher inner join student on teacher.id=student.tid;

drop view 视图名称;

char:定长

varchar:变长

create table t8(name char(6));
insert into t8 values('粥粥   ');
select char_length(name) from t8;  # 查询长度
select name from t8 where name='粥粥';
select name from t8 where name like '粥粥';
set sql_mode='pad_char_to_full_length'  # 取记录的时候不会去掉空格
约束条件 
create table t9(id int,
name char(6),
sex enum('male','female') not null default 'male');  # 约束条件not null代表不能传入空值|default 'male'代表默认值为‘male’

unique  # 约束条件里面代表这个是唯一的

key的单列唯一

方法一 #unique放在字段的约束条件里面代表这个是唯一的
create table t10(
id int unique,
name char(6) unique
);

方法二 #要将什么字段唯一就在后面unique(字段)就可以
create table t11(
id int,
name char(6),
unique(id),
unique(name)
);


key的联合唯一
create table services(
id int,
ip char(15),
port int,
unique(id),
unique(ip,port) #IP和port联合在一起要唯一
);
insert into services values
(1,'192.168.11.11',100),(2,'192.168.11.11',101),(3,'192.168.11.10',101);

primary key 约束条件:not null unique

单列主键
create table t12(
id int primary key,
name char(6)
);

create table t13(
id int not null unique,
name char(6)
);



联合主键
create table t14(
id int,
ip char(15),
port int,
primary key(ip,port)
);

auto_increment  #  自动增长

create table t15(
id int primary key auto_increment, #自动增长一般需要设置在key里,如果自己添加了记录的话,它会默认按照你的记录继续自增长
name char(6)
);

insert into t15(name) values
('Bob'),('Mary');

truncate 表名; #删除表并且将自增长下次添加记录的时候改为1

#了解

show variables like 'auto_inc%'; #查看步长和起始偏移量的配置
#步长:
auto_increment_increment默认为1
#起始偏移量
auto_increment_offset默认1
#设置步长
set session auto_increment_increment=5; #sssion 是设置本次,下次就变回了
set global auto_increment_increment=5; #global是设置全局,不过需要先exit退出一下重新加载
#设置起始偏移量
set global auto_increment_offset=3;
强调:起始偏移量<=步长

foreign key:建立表之间的关系 #但是了解即可,一般考虑到拓展性,建议使用逻辑来达到关系

# 1、建立表关系:
# 先建被关联的表,并且保证被关联的字段唯一
create table dep(
id int primary key,
name char(16),
comment char(50));
#再建立关联的表
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dep_id int,
foreign key(dep_id) references dep(id) on delete cascade on update cascade); #on delete casecade代表删除同步, on update cascade代表更新同步

#2、插入数据
#先往被关联表插入记录
insert into dep values(1,"IT","技术能力有限部门"),(2,"销售","销售能力不足部门"),(3,"财务","花钱特别多部门");
#再往关联表插入记录
insert into emp values(1,'egon','male', 1);insert into emp values(2,'alex','male', 1),(3,'wupeiqi', 'female',2), (4,'yuanhao', 'male',3),(5,'jinximn','male',2);

触发器

delimiter //  # 将结束符改为//
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
    if new.success = 'no' then #等值判断只有一个等号
            insert into errlog(err_cmd, err_time) values(new.cmd, new.sub_time) ; #必须加分号
      end if ; #必须加分号
end//
delimiter ;     #将结束符改为;

存储过程

1、无参存储过程
delimiter //
create procedure p1()
begin
    select * from db1.t1;
end //
delimiter ;
# MySQL中调用
call p1();
​
# python中调用
cursor.callproc('p1')
print(cursor.fetchall())
​
2、有参存储过程
delimiter //
create procedure p2(in n1 int,in n2 int,out res int)
begin
    select * from db1.t1 where id>n1 and id<n2;
    set res = 1;  # 返回值
end //
delimiter ;
# MySQL中调用
set @x=0
call p2(1,3,@x);
select @x;
​
# python中调用
cursor.callproc('p2',(1,3,0))  # @_p2_0=1,@_p2_1=3,@_p2_2=0
cursor.execute('select @_p2_2')
print(cursor.fetchall())

事务

start transaction;
rollback;  # 出错就返回刚才的操作
commit;  # 保存刚才的操作 

while循环语句

delimiter //
drop procedure if exist 'youhua';  # 如果存在youhua存储过程则删除
create procedure youhua()  # 创建无参存储过程,名称为youhua
begin
    declare i int;  # 申明变量

​	set i = 1;

​	while (i<300000) do  # 结束循环的条件: 当i大于300000时跳出while循环

​		insert into s1 values(i,'粥粥','male',concat('粥粥',i,'boy'));  # 往youhua表添加数据

​		set i = i+1;    # 循环一次,i加1

​	end while;  # 结束while循环

end //  # 结束定义语句
delimiter ;  # 重新将分隔符设置为;

建立索引

create index 索引名称 on 表(字段);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值