mysql在终端的登录
先用管理员权限打开命令行,若发现不能登录mysql时在管理中查看mysql是否启动
若未启动可在管理员权限中输入
mysqld --install
再输入
net start mysql
在管理中查看mysql已经启动,也可以手动在此点击启动。】
然后登录mysql
mysql -u root -p
对mysql库的操作
查看所有的库
show databases;
注意:mysql中的库即对应一个个文件夹、
表即对应文件夹中的文件
记录即对应文件里面的一条条数据
要对数据进行修改,首先要进入到库中,再进到表中,然后在表中对数据进行修改。
# 语法:SQL语句必须以分号结尾
1. 增加库
create database db1; #增加一个叫db1的库
2. 查看所有的库
show databases;
3. 删除库
drop database db1;
4. 查看当前在哪个库
select database();
5. 如何选择数据库
use db1;
6. 看一下库的结构信息
show create database db1;
此时已经显示进入到库db1中了。
对mysql表格的操作
1.show tables; 查看库中的表格
2. create table t1 (id int,name varchar(20),age int) #创建一个t1表,里面的字段有id,name,age
1.show create table t1; #查看t1的表结构(混乱)
2. describe t1; #可以简称为desc t1; 用来查看结构化后的表结构
1.alter table t1 rename tt1; #将t1的表名修改为tt1
2. drop table tt1; #删除表
在表中对记录进行修改
1.增加表中的数据
#全字段加入,在表中增加这条数据 括号内依次按照id,name,age的顺序进行添加
insert into t1 values(1,'qq',18);
isert into t1 values(2,'ww',19),(3,'ee',20); #增加多个记录
insert into t1(id,name) values(4,'rr') #只增加单条记录
2.删除表中的数据
delete from t1 where id=4;
delete from t1 where name='ee' and age=20;
3.修改表中的数据
update t1 set name='aaa' where id=1; #修改t1表中id为1 的这行数据的name为aa,符合where后面条件的都会修改。
update t1 set name=‘sss’ , age=11 where id=2; #修改一行的多个数据值
updata t1 set name='ddd' where id=3 and age=20; #where后面可以增加多个限定条件
update t1 set name='aaa'; # 没有限定条件修改的是全表的数据,使用时要特别注意!
4.查看表中的数据
select * from t1; #查看表中的全部数据信息
select id from t1; #查看表中的id信息
select id,name from t1; #查看t1表中的id和name信息
总结:对记录的增加 insert into 表名 values(对应的记录);
删除 delete from 表名 where 对应条件;
修改 update 表名 set xxx= xx where 对应条件;
查找 select 数据 from 表名;
存储引擎
存储引擎即数据的存储方式。是负责处理数据存储和检索的组件。MySQL 提供了多种存储引擎,每个存储引擎都有其特定的特点和用途。
可以通过show engines;来查看mysql中存在的搜索引擎。
-
InnoDB:InnoDB 是 MySQL 5.6的默认存储引擎,它支持事务和行级锁定。相对于MyISAM来说更慢了,但是数据会更安全。它通过实现 ACID(原子性、一致性、隔离性和持久性)特性来提供高度的数据完整性和并发处理能力。InnoDB 还支持外键约束和崩溃恢复功能,并具有较好的性能。
-
MyISAM:MyISAM 是较早版本5.5及之前默认的 MySQL 中常用的存储引擎,相对于InooDB来说不够安全,它不支持事务和行级锁定。MyISAM 在处理大量插入和查询操作时执行得很好,但在并发写操作和高度并发读写场景下性能可能有限。MyISAM 适合于非事务性应用或只读应用,如日志记录和报表生成。
-
MEMORY/HEAP:MEMORY 存储引擎将数据存储在内存中,提供了非常快速的数据访问。断电及重启服务端都会丢失数据。对丢失它适合于需要快速读取和写入数据的临时表和缓存表。然而,由于数据存储在内存中,系统重启后数据将丢失。
-
NDB Cluster:NDB Cluster 存储引擎(也称为 MySQL Cluster)是一个分布式、高可用的存储引擎,适用于需要高性能和高可靠性的应用。它使用多个节点来存储和处理数据,并具有自动分区和故障恢复功能。
-
ARCHIVE:ARCHIVE 存储引擎专注于数据归档和压缩。它适用于需要长期保存、不频繁访问和占用较少磁盘空间的存档数据。
-
CSV:CSV 存储引擎以逗号分隔值的形式存储数据,类似于 CSV 文件格式。它适用于在 MySQL 中导入和导出 CSV 数据。
等其他引擎,着重需要掌握前三个。
可以看出t1表中用的引擎是默认的InnoDB的。
create table t2(id int) engine=MyISAM; #建立不同引擎的表格
create table t3(id int) engine=InnoDB;
create table t4(id int) engine=MEMORY; #里面的数据重启或断电会消失。
可以在文件中看到t2表产生了三个文件,t3表产生了两个文件,t1表产生了一个文件。是因为所使用的引擎不同。
MyISAM:产生了三个文件
.frm:这个文件用来存储表结构
.MYD:用来存放数据data
.MYI:存放数据的索引
InnoDB:产生了两个文件
.frm:这个文件用来存储表结构
.ibd:存放数据的索引和数据
MEMORY:产生了一个文件
.frm:这个文件用来存储表结构
数据类型
1.整型
不同类型存储的范围不同
tinyint: 1个字节------>8位------>2 **8----> 256-----> 0-255-----> -128-127
smallint: 2个字节----->16位---->2 ** 16 ----> 65536-----> 0-65535----> -32768-32767
int: 4个字节------>32位----->2 ** 32----> 21...---->
bigint: 8个字节----->64位----->2 ** 64---->
整型是带符号的,如果超过了最大范围,只会显示最大范围内的数字
2.浮点型
不同类型的浮点数精确度不同
float(255, 30); # 255表示的是存储的位数,30代表的是小数位数 最低
double(255,30); # 255表示的是存储的位数,30代表的是小数位数 其次
decimal(65, 30); # 65表示的是存储的位数,30代表的是小数位数 最高
create table t8(id float(255, 30));
create table t6(id double(255,30));
create table t7(id decimal(65, 30));
insert into t8 values(1.111111111111111111111111111);
insert into t6 values(1.111111111111111111111111111);
insert into t7 values(1.111111111111111111111111111);
3.字符串类型
char(n): 它是定长,那么他就存n位,如果没有超出n位,空格填充到n位,超出n位,报错或有只存n位。
varchar(n):可变长的,不超出n位,有几位存几位,超出n位,报错或只存n位。
create table t9(name char(3)) ;
create table t10(name varchar(3));
insert into t9 values('qwer');
insert into t10 values('qwer');
select * from t9;
select * from t10;
可以看到当规定了长度为3时,如果存的长度超过3则剩余部分不能被存放进去。
但是也不会报错,如果想要超出长度报错则要设置严格模式
如何查看严格模式
1. select @@sql_mode;
2. show variables like '%mode%' # 模糊查询,变量中带有mode的
可以看出此时的模式为非严格模式
设置严格模式
1.临时修改
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
PAD_CHAR_TO_FULL_LENGTH设置可以看到char 和vachar的存储长度
可以看到已经修改为严格模式,此时如果再超出规定的长度则会报错。
2.永久修改
需要修改配置文件
将这句话放到my.ini文件中,然后重启服务。
insert into t9 values('k');
insert into t10 values('k');
select char_length(name) from t9;
select char_length(name) from t10;
若没有设置模式,则这两个‘k’的长度是一样的,设置了模式后可以看到char类型时会在前面填充的,而vachar则不会填充长度,有多长就是多长。
ps: 整型中括号中的数字代表的是数据展示的位数
对于 INT(3) 数据类型,括号中指定的显示宽度并不会影响值的存储范围或对存储的限制。
INT 类型仍可以存储超过三位数的整数。
这里的 (3) 仅仅表示当将 INT 类型的值转换为字符串进行显示时,MySQL 将补充前导零或空格,以确保显示宽度为 3。
例如,对于值为 12 的 INT(3),MySQL 在显示时会将其作为 " 12"(前面有一个空格)。
但需要注意的是,无论括号中的显示宽度是多少,都不会对存储的实际数值有任何影响。INT 类型始终占用 4 个字节的存储空间,并且可以存储的数值范围是固定的(-2147483648 到 2147483647)。
显示宽度只是在将整数值转换为字符串表示时的表现形式,并不会限制实际存储的数值范围。
因此,如果存储的整数超过了指定的显示宽度,MySQL 仍会将其存储为 INT 类型,不会截断或引发错误。而要控制存储范围或限制具体数值的长度,需要使用其他方式,例如检查输入值或定义适当的约束条件。
4. 日期类型
datetime: 年月日时分秒
date: 年月日
time: 时分秒
year: 年份
create table t11(id int, nyrsfm datetime ,nyr date,sfm time,nianfen year);
insert into t11 values(1,'2023-7-11 11:11:11','2023=7-11','11:11:11','2023');
5.枚举类型
多选一枚举类型enum:
create table t12(id int,name enum('qq','ww','ee'));
insert into t12 values(1,'qq'); #只能选择enum这个里面的,不能选择其他的,否则会报错
多选多集合类型set:
create table t13(id int,name set('qq','ww','ee'));
insert into t13 values(1,'qq,ww'); #在enum类型中选择多个则会报错,而在set类型中不会报错。