MySQL数据库安装
免安装
1、在官网上下载此版本
2、解压放入无中文路径下,以管理员身份在bin目录下运行命令提示符,输入mysqld --install,如下图为安装成功提示(如果出现提示缺少库,可以使用工具everything查找,尝试放入bin下,再执行)
3、输入mysqld --initialize --console,下图蓝框为初始化产生的随机密码,需要记住
4、输入net start mysql,开启MySQL服务
5、登录验证,输入mysql -u root -p,再输入刚刚产生的随机密码,如下图则表示成功
6、修改密码,输入alter user ‘root’@‘localhost’ identified by ‘root’,修改密码为root
7、再次验证
8、配置系统变量
创建系统变量:
在path中添加变量:
9.创建配置文件
[mysqld]
character-set-server=utf8mb4
bind-address=0.0.0.0
port=3306
default-storage-engine=INNODB
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
mysql数据库概念
数据类型:
数值类型 | 大小 | 范围 | 用途 |
---|---|---|---|
tinyint | 1字节 | (-128,127)或(0,255) | 小整数值 |
int | 4字节 | (-2147483648, 2147483647) 或 (0,4294967295) | 大整数值 |
float | 4字节 | 单精度浮点型 | |
double | 8字节 | 双精度浮点型 |
字符串类型 | 大小 | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 |
varchar | 0-255字节 | 变长字符串 |
text | 0-65535字节 | 长文本数据 |
longtext | 0-4294697295字节 | 极大文本数据 |
char和varchar的区别
- char执行效率高于varchar
- varchar相对于char节省空间
- varchar类型传入的值小于给定的长度 不会使用空格填充
约束条件:
- primary key 主键, 全表唯一值. 就像学号. 身份证号. 能够唯一的确定一条数据
- auto_increment 主键自增.
- not null 不可以为空.
- null 可以为空
- default 设置默认值
数据库与表的关系
MySQL数据库命令
基本命令
// 显示所有数据库
show databases;
// 创建数据库 testdatabase
create database testdatabase;
// 使用数据库testdatabase
use testdatabase;
// 显示所有表
show tables;
创建表
mysql> create table testnum(
-> ttinyint tinyint,
-> tint int,
-> tfloat float(6,2),
-> tdouble double(6,2)
-> ); # 加分号表示结束
'''
> create table if not exists 表名(
>
> 字段名称 字段类型 约束条件 字段说明,
>
> 字段名称 字段类型 约束条件 字段说明,
>
> ...
>
> )
'''
插入数据
- 指定字段添加值
insert into 表名(字段1,字段2....) values(值1,值2...)
insert into user(sex,username) values(0,'lucky');
- 不指定字段添加值
insert into 表名 values(值1,值2...)
insert into user values(null,0,'lucky','hello');
- 指定字段添加多个值
insert into 表名(字段1,字段2....) values(值1,值2...),(值1,值2...)...
insert into user(sex,username) values(1,'苍苍'),(0,'蒹葭');
- 不指定字段添加多个值
insert into 表名 values(值1,值2...),(值1,值2...)...
insert into user values(null,1,'xxx','xxx'),(null,0,'xxl','xxl');
指定字段与不指定字段在添加值的时候 按照从左至右依次对应给值
查询数据
- 不指定字段的查询(查看全部)
select * from 表名
- 指定字段的数据查询
select 字段名1,字段名2... from 表名
select username,userinfo from user;
- 对查询的字段起别名
select username as u from user;
select username u from user;
修改数据
- 修改一个字段的值
update 表名 set 字段名=值;
update user set username='lucky' where id = 3;
- 修改多个字段的值
update 表名 set 字段名1=值1,字段名2=值2...;
update user set sex=0,userinfo='xxx的个人简介' where id=7;
- 给字段的值在原有的基础上改变值
update user set sex=sex+2;
在进行数据的修改的时候 一定记得给定where条件 如果没有给定where条件 则修改的为整张表当前字段的值
删除数据
delete from 表名 [where ...]
delete from user; // 删除user表中所有的数据
truncate 表名; // 清空表数据
删除 一定注意添加 where 条件 否则会删除整张表中的数据 并且auto_increment自增所记录的值不会改变 所以需要将自增归位
where条件
比较运算符
>
// 将id大于5 的性别 更改为0 年龄改为20岁
update user set sex=0,age=20 where id>5;
<
// 将id小于3 的性别 更改为0 年龄改为23岁
update user set sex=0,age=23 where id<3;
// 查看id小于4的 性别和用户名的字段数据
select sex,username from user where id<4;
>=
// 删除 id大于等于6的数据
delete from user where id>=6;
<=
// 查询年龄小于等于23的数据
select * from user where age<=23;
- =
//查询性别为0的数据
select * from user where sex=0;
!=/<>
// 查询 用户名不等于lucky的所有数据
select * from user where username!='lucky';
select * from user where username<>'lucky';
逻辑运算符
- and 逻辑与 俩侧为真结果为真
// 查询年龄在18到23之间 不包括本身
select * from user where age>18 and age<23;
// 修改年龄为30 id大于1 小于等于2
update user set age=30 where id>1 and id<=2;
- or 逻辑或运算 俩侧条件满足一侧就可以
select * from user where age=10 or age=30;
select * from user where age>=10 or age<=30;
升序/降序
// 查询数据 按照年龄升序(默认)
select * from user order by age;
select * from user order by age asc;
// 查询数据 按照年龄降序
select * from user order by age desc;
limit 取值
// 取出3条数据
select * from user limit 3;
// 取出年龄最大/最小的一条数据
select * from user order by age desc limit 1;
select * from user order by age limit 1;
like 模糊查询
// 查询以三字为结束的username的数据
select * from user where username like '%三';
// 查询以赵字为开头的username的数据
select * from user where username like '赵%';
// 查询 userinfo中包含的数据
select * from user where userinfo like '%sea%';
聚合函数
- count 统计个数
- max 最大值
- min 最小值
- Sum 求和
- avg 求平均数
select count(*) as count,max(age),min(age),avg(age),sum(age) from user;
数据库的导入导出
// 导入
mysql -uroot -p 库名<demo.sql
// 导出
mysqldump -uroot -p 库名>demo.sql
MySQL的图形化界面工具 推荐用Navicat
python操作数据库
1、下载模块pymysql
pip3 install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
2、代码案例
import pymysql
# 连接数据库
db = pymysql.connect(host='localhost', port=3306, user='root', password=, database='test')
# 设置字符编码
db.set_charset('utf8')
#创建游标对象 用于下面的操作
cursor = db.cursor()
# sql语句执行
# 查询
sql = 'select * from user'
# 执行SQL语句
cursor.execute(sql)
# 获取所有
print(cursor.fetchall())
# 获取一条
print(cursor.fetchone())
try:
# 插入数据
sql = 'insert into user values(null, "sea", 18, 1)'
cursor.execute(sql)
print(cursor.rowcount) # 受影响的行数
db.commit() # 提交事务
except:
db.rollback() # 回滚事务
navicat的使用
1、下载navicat
2、连接MySQL数据库,如果提示错误代码为1251的提示,原因如下:
# mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
解决方案:
1、输入命令 mysql -u root -p 登录MySQL数据库
2、更改加密方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
3、由于加密规则更改,所以需要重新设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
4、刷新数据库
FLUSH PRIVILEGES;
5、navicat重新连接数据库
之后的增删改查较简单,不再赘述。