一、表操作
1、查看当前所在的库
> select database(): +------------+ | database() | +------------+ | oldboy | +------------+
2、use database 选择库
3、查看表
> show tables 查看有几个表
> show create table student; 查看创建表的过程
+---------+--------------------------------------------------------------------------------------+ | Table | Create Table | +---------+--------------------------------------------------------------------------------------+ | student | CREATE TABLE `student` ( | | | `id` int NOT NULL AUTO_INCREMENT, | | | `name` varchar(20) NOT NULL, | | | `sex` varchar(2) NOT NULL, | | | `hobby` varchar(50) DEFAULT NULL, | | | PRIMARY KEY (`id`) | | | ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +---------+--------------------------------------------------------------------------------------+
> desc 查看表结构
4、创建表
create table t1(id int(11), name varchar(20), age int);
5、修改表名
alter table t1 rename tt1;
6、删除表
drop table tt1;
二、表记录操作
select 查看 insert 插入 update 更新 delete 删除
1、查看
select * from t1; select id, name from t1;
2、增加数据
insert into tt1 values(1, 'kevin', 18),(2, 'tanke', 20), (3, 'json', 21); # 只增加部分字段 > insert into tt1(id, name) values(4, 'malin'), (6, 'sd');
3、修改数据
update 表名 set 字段名='子端值' where 条件;
update tt1 set age='88' where name='kevin'; update tt1 set age='89' where name='kevin' and id=1; update tt1 set name='aaa'; # 全表改,一定不能使用
4、删除数据
> delete from tt1 where id=4; >delete from t1 where id =1 and name='';
三、存储引擎
1、存储引擎
MySQL的存储引擎是指MySQL数据库系统用于管理和组织数据存储的组件或模块。存储引擎负责处理数据的存储、检索、索引和事务处理等功能。MySQL支持多个存储引擎,每个存储引擎都有自己独特的特点和适用场景。
-
InnoDB:MySQL5.6以后默认的事务性存储引擎。它提供了ACID(原子性、一致性、隔离性和持久性)事务支持和行级锁定。InnoDB适用于处理大量并发操作和保证数据完整性的应用程序。
-
MyISAM:MySQL早期的存储引擎之一。它对于读密集型应用程序具有较好的性能,但不支持事务和行级锁定。MyISAM适用于非事务性的应用程序,例如博客、新闻网站等。
-
Memory:也称为Heap存储引擎,将数据存储在内存中,提供了快速的数据访问速度。然而,数据在服务器重启后会丢失,因此适用于临时数据存储或缓存等场景。
-
Archive:这个存储引擎用于存储大量的归档数据,对于插入和查询效率很高,但不支持更新和删除操作。Archive适用于日志记录、数据归档等场景。
-
NDB Cluster:也称为MySQL Cluster存储引擎,提供了高可用性和分布式数据库功能。它适用于需要水平扩展和高可靠性的应用程序,如大规模的Web应用和实时系统。
show engines; # 在mysql8中查看支持的11种引擎:
+--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+ | ndbcluster | NO | Clustered, fault-tolerant tables | <null> | <null> | <null> | | CSV | YES | CSV storage engine | NO | NO | NO | | ARCHIVE | YES | Archive storage engine | NO | NO | NO | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO | | ndbinfo | NO | MySQL Cluster system information storage engine | <null> | <null> | <null> | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | <null> | <null> | <null> | | MyISAM | YES | MyISAM storage engine | NO | NO | NO | | PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +--------------------+---------+----------------------------------------------------------------+--------------+--------+------------+
2、验证前三种存储引擎产生的文件
create table t2(id int) engine=MyISAM;
mysql8中产生三个文件
- t2.MYD :这是MyISAM表的数据文件,包含表中的实际数据记录。
- t2.MYI :这是MyISAM表的索引文件,包含用于加快数据检索的索引结构。
- t2_381.sdi:这是MyISAM表的源数据文件,它包含了表的结构定义和其他相关信息。
在mysql5.6 中产生三个文件
- .frm: 这个文件存表结构
- .MYD:这个文件存数据 data
- .MYI: 这个文件存数据的索引 index >>> 类似于是书的目录 >>> 加快查询速度的
create table t3(id int) engine=InnoDB;
mysql8中产生一个文件
- t3.ibd :表示InnoDB表的数据文件,InnoDB将表的数据和索引存储在单独的.ibd文件中。
在mysql5.6 中产生两个文件
- .frm: 这个文件存表结构
- .ibd: 这个文件存数据的索引和数据
create table t4(id int) engine=MEMORY;
mysql8中产生一个文件
- t4_383.sdi
在mysql5.6 中产生一个文件
- .frm: 这个文件存表结构
四、数据类型
1、整型
tinyint smallint mediumint int bigint
# 不同的类型存储的范围不一样
存储范围比较:
tinyint:1个字节------>8位------>2 **8----> 256----->0-255----->-128-127
smallint: 2个字节存储----->16位---->2 ** 16 ----> 65536----->0-65535---->-32768-32767
mediumint: 3个字节存储----->24位----->2 ** 24--->16777216-----> 0-16777215 ----> -8388608 - 8388607
int: 4个字节------>32位----->2 ** 32----> 21...---->
bigint: 8个字节----->64为----->2 ** 64---->
验证:
create table t5 (id tinyint);
> insert into t5 values(999); (1264, "Out of range value for column 'id' at row 1") # 在mysql8中会直接报错
create table t5 (id smallint);
> insert into t5 values(6666666); (1264, "Out of range value for column 'id' at row 1")
结论:在mysql8中指定int的类型之后,数据超过范围会直接报错,而mysql5.6中会存储最大的范围数字
2、浮点型
float double decimal
float(255, 30); # 255表示的是存储的位数,30代表的是小数位数
double(255,30); # 255表示的是存储的位数,30代表的是小数位数
decimal(65, 30); # 65表示的是存储的位数,30代表的是小数位数。 decimal最大只能存65位
decimal(8, 2) # 表示的最大范围是:999999.99
三者的区别
create table t6(id float(255, 30));
create table t7(id double(255, 30));
create table t8(id decimal(65, 30));
插入数据
insert into t6 values(1.111111111111111111111111);
+--------------------+ | id | +--------------------+ | 1.1111111640930176 | +--------------------+
insert into t7 values(1.111111111111111111111111);
+--------------------+ | id | +--------------------+ | 1.1111111111111112 | +--------------------+
insert into t8 values(1.111111111111111111111111);
+----------------------------------+ | id | +----------------------------------+ | 1.111111111111111111111111000000 | +----------------------------------+
"""得出结论:精确度不一样, 生产环境推荐使用decimal """
decimal >>> double >>> float
3、字符串
char 和 varchar
char(4): 它是定长,那么他就存4位,如果没有超出4位,空格填充到4位,超出4位,报错或者,最大存4位
varchar(4):可变长的,不超出4位,有几位存几位,不会使用空格填充,超出4位,报错或者,最大存4位
验证
create table t9(id int, name char(4)); insert into t9 values(1, 'kevin'); create table t10(id int, name varchar(4)); insert into t10 values(1, 'kevin');
在mysql8中超出范围会直接报错
如何查看严格模式
1. select @@sql_mode;
2. show variables like '%sql_mode%' # 模糊查询,变量中带有mode的
# 设置严格模式
1. 永久修改:需要改配置文件
2. 临时修改:
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
在mysql8 中查看name字段的长度与mysql5.6有区别,看不到填充位数
> select char_length(name) from t10;
4、五种日期类型
DATE:用于存储日期值,格式为 'YYYY-MM-DD'。
TIME:用于存储时间值,格式为 'HH:MM:SS'。
DATETIME:用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS'。
TIMESTAMP:也用于存储日期和时间值,格式为 'YYYY-MM-DD HH:MM:SS'。但是,TIMESTAMP
在MySQL中有特殊的行 为,会自动转换为当前时区的时间,并在插入或更新时自动记录时间戳。
YEAR:用于存储年份值,格式为 'YYYY'。在MySQL 8中,YEAR
数据类型仅存储年份,不包含月份和日期。
创建表:
> create table t11(id int, -> reg_time datetime, -> update_time date, -> delete_time time, -> birth year, -> timetamp timestamp);
插入数据:
INSERT INTO t11 VALUES (1, '2023-07-11 10:30:00', '2023-07-11', '10:30:00', 1990, CURRENT_TIMESTAMP);
CURRENT_TIMESTAMP 换成 NOW()也行
5、枚举类型
enum:多选一
create table t15 (id int, hobby enum('tangtou', 'hejiu', 'xijio', 'chouyan'));
insert into t15 values(1, 'tangtou');
+----+---------+ | id | hobby | +----+---------+ | 1 | tangtou | +----+---------+
set:
多选多
create table t16 (id int, hobby set('tangtou', 'hejiu', 'xijio', 'chouyan'));
INSERT INTO t16 VALUES (1, 'tangtou,hejiu');
+----+---------------+ | id | hobby | +----+---------------+ | 1 | tangtou,hejiu | +----+---------------+
五、整型中的数字含义
UPDATE user SET authentication_string = PASSWORD('Zjz5740') WHERE Host = 'localhost' AND User = 'root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Zjz5740';
在上述示例中,START TRANSACTION
表示启动一个事务,COMMIT
表示提交事务。在事务中,首先执行CREATE TABLE
语句创建表,然后执行INSERT INTO
语句插入数据,最后通过COMMIT
提交事务。
如果创建表或插入数据的任何一步出现错误,您可以使用ROLLBACK
语句回滚事务,使之前的操作不会对数据库产生影响。