MySQL数据库基础知识(非常全面总结笔记)

MySQL数据库基础知识(非常全面总结笔记)-mikechen

数据库操作

1.创建和删除数据库

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

2.MySQL表插入数据

insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]

先创建表:

CREATE TABLE study(
    ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
    NAME VARCHAR(20) NOT NULL,
    AGE INT(10)
);

插入数据:

INSERT INTO study VALUES(1 , 'a' , 10);
INSERT INTO study VALUES(2 , 'b' , 11);
INSERT INTO study VALUES(3 , 'c' , 12);

 

3.MySQL表删除数据

语法:

delete from 表名 [where  条件]

示例:

DELETE  FROM student WHERE id=7;

删除整表:

drop table  表名

 

4.MySQL表修改数据

语法:

update 表名 set 字段名1=值1,字段名2=值2,....[where条件]

示例:

UPDATE student SET name=‘cao’,grade=50 WHERE id=1;

 

5.MySQL查询表数据

语法:

select <字段1,字段2,...> from < 表名 > where < 表达式 >

示例:

select * from user;

 

数值类型

数值类型,包含:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT。

类型

大小

范围(有符号)

范围(无符号)

用途

tinyint

1 字节

(-128,127)

(0,255)

小整数值

smallint

2 字节

(-32 768,32 767)

(0,65 535)

大整数值

mediumint

3 字节

(-8 388 608,8 388 607)

(0,16 777 215)

大整数值

int或integer

4 字节

(-2 147 483 648,2 147 483 647)

(0,4 294 967 295)

大整数值

bigint

8 字节

(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)

(0,18 446 744 073 709 551 615)

极大整数值

float

4 字节

(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

0,(1.175 494 351 E-38,3.402 823 466 E+38)

单精度 浮点数值

double

8 字节

(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

双精度 浮点数值

decimal

DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

依赖于M和D的值

依赖于M和D的值

小数值

 

MySQL查询语句

1.直接查询

语法:

select 字段 from 表名

 

2.条件查询

语法:

select 字段 from 表名 where 条件

 

3.排序查询

语法:

select 字段 from 表名 order by 字段 排序方式

示例:

select * from user order by age desc;

 

4.范围查询

关键字为between…and…,通常位于条件字段后面。

select * from userwhere age >=21 and age<=23;

 

5.模糊查询

SELECT uid, name FROM staffs WHERE name LIKE 'a%';

 

6.集合查询

SELECT uid, name FROM staffs WHERE uid IN(1, 3, 5);

查询uid为1、3、5的用户信息。

 

7.分页查询

当我们查询出来的数据量太大的时候,一页展示得又太多,一般情况下都会将其分成N页,那么这时候就需要用到分页查询。

SELECT * FROM staffs LIMIT 5, 10;

 

数据库设计三大范式

在数据库表设计上有个很重要的设计准则,在关系数据库中这种规则 就是范式,范式来自英文Normal Form,简称NF。

在实际开发中最为常见的设计范式有三个:三大范式。

​ 1.第一范式:确保每列保持原子性,所有字段值都是不可分解的原子值;

2.第二范式:确保表中的每列都和主键相关,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;

​ 3.第三范式:确保每列都和主键列直接相关,而不是间接相关;

满足最 低要求的范式是第一范式(1NF),在第一范式的基础上进一步满足更多规范要求的称为 第二范式(2NF),其余范式以此类推。

一般来说,数据库只需满足第三范式(3NF)就行 了。

MySQL索引

MySQL索引类型主要分为:​​主键索引​​​、​​唯一索引​​​、​​普通索引​​​和​、全文索引。​

1.MySQL主键索引

主键索引,英文全称Primary Key,简称为主键,主键是一种唯一性索引,每个表只能有一个主键。

alert table tablename add primary key(`字段名`)

 

2.MySQL普通索引

普通索引(index)顾名思义:就是各类索引中最为普通的索引。

alter table table_name add index(`字段名`);

 

3.MySQL唯一索引

mysql中唯一索引的关键字是unique index,唯一索引可以有多个,但索引列的值必须唯一,索引列的值允许有空值。

alter table 表名 add unique(列名)

业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。

 

4.MySQL全文索引

全文索引指的是:将存储在数据库中的整本书或整篇文章中的任意内容信息查找出来的技术。

alter table 表名 add fulltext (列名)

全文索引只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。

 

MySQL事务用法

MySQL事务有两种方式,分别为 显式事务 和 隐式事务 。

1.显式事务

开启事务,先执行begin,结束事务,成功执行commit,失败执行rollback。

# 开启事务
mysql> BEGIN; 

# 提交事务。当提交事务后,对数据库的修改是永久性的。 
mysql> COMMIT;
 
# 回滚事务。即撤销正在进行的所有没有提交的修改 
mysql> ROLLBACK; 
 
# 将事务回滚到某个保存点。 
mysql> ROLLBACK TO [SAVEPOINT]

示例:

mysql> use mikechen;

# 创建数据表
mysql> CREATE TABLE user_id( id int(5)) engine=innodb;  
 
mysql> select * from user_id;
 
# 开始事务
mysql> begin;  
 
mysql> insert into user_id value(1);
 
mysql> insert into user_id value(2);

mysql> insert into user_id value(3);
 
# 提交事务
mysql> commit;

 

2.隐式事务

mysql默认开启了自动提交,在执行insert,update,delete语句时候每一条sql语句就是一个事务。

MySQL中有一个系统变量 autocommit,如下所示:

mysql> SHOW VARIABLES LIKE 'autocommit'; 
+---------------+-------+
| Variable_name | Value | 
+---------------+-------+
| autocommit    | ON    | 
+---------------+-------+
1 row in set (0.01 sec)

当我们设置 autocommit=1 时,每条 SQL 语句都会自动进行提交,设置 autocommit=0 时都需要用 COMMIT 进行提交,让事务生效。

设置如下:

# 查看自动提交
show global variables like 'autocommit';

关闭自动提交:
set global autocommit=0;

开启:
set global autocommit=1;

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法