mysql默认提交方式_mysql基础

Mysql

一、SQL的基本概念和通用语法

1.1 什么是SQL?

structured query language:结构化查询语言

就是定义操作所有关系型数据库的规则;每一种数据库的操作方式存在不一样的地方,我们就叫做方言;

1.2 SQL的通用语法

可以单行或者多行书写,以分号结尾;

不区分大小写,建议关键字大写;

1.3 SQL的分类

DDL:数据定义语言

用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter等;

DML:数据库操作语言

用来对数据库中表的数据进行增删改。关键字:insert,delete,update等;

DQL:数据查询语言

用来查询数据库中表的记录数据。关键字:select,where等;

DCL:数据控制语言(了解)

用来定义数据库的访问权限和安全级别,以及创建用户。关键字:GRANT,REVOKE等;

二、操作数据库、表(DDL)

2.1 操作数据库

2.1.1 C:Create

创建一个db2的数据库,并且先判断是否存在,且指定字符集为GBK;

create database if not exists db2 character set gbk;

2.1.2 R:Retrieve

查询所有数据库:show databases;

查询某个数据库的创建语句:show create database xxxxx;

2.1.3 U:Update

修改数据库的字符集:alter database 数据库名称 character set 指定的字符集;

2.1.4 D:Delete

删除数据库:drop database 数据库名称;

2.1.5 使用数据库

查询当前正在使用的数据库名称:select database();

使用数据库:use 数据库名称;

2.2 操作表

2.2.1 C:Create

创建表

create table 表名(

列名1 数据类型1,

列名2 数据类型2,

.

.

.

列名n 数据类型n

);

数据类型

int 整数类型:name int;

double 小数类型:score double(4,2) 表示一共四位,小数点后面保留两位;

date 日期:birthday date 只包含年月日,格式为 yyyy-MM-dd;

datetime 日期:insert_time datetime 包含年月日时分秒,格式为yyyy-MM-dd HH:mm:ss;

timestamp 时间戳类型:如果不给它赋值或者赋值为 null 的话,则默认使用系统的时间自动赋值;

varchar 字符串类型:name varchar(20) 最多包含 20 个字符的字符串;

2.2.2 R:Retrieve

查询一个数据库中所有的表:show tables;;

查询表结构:desc 表名;;

2.2.3 U:Update

修改表名

alter table 表名 rename to 新表名;

修改表的字符集

alter table 表名 character set 字符集名称;

添加一列

alter table 表名 add 列名 数据类型;

修改列名,类型

alter table 表名 change 旧列名 新列名 新列的数据类型;

alter table 表名 modify 列名 新的数据类型;

删除列

alter table 表名 drop 列名;

2.2.4 D:Delete

删除表

drop table 表名;

drop table if exists 表名;

三、操作数据库表中的数据(DML)

3.1 添加数据

格式:

insert into 表名(列名1,列名2...) values(值1,值2...);

注意事项:

列名和值要一一对应;

如果表名后面不指定列名的话,默认给所有的列添加值;

除了数字,其他的都要用引号包起来;

3.2 删除数据

格式:

delete from 表名 [where 条件];

注意事项:

如果不写条件,就删除表中的所有数据;

如果要删除所有的数据有两种方式:

第一种 delete from 表名 ,不推荐,有多少条数据就执行第三次 delete 命令;

第二种 truncate table 表名 ,推荐,原理是把这个表删除,然后再创建一个和原来一模一样的;

3.3 修改数据

格式:

update 表名 set 列名1=值1,列名2=值2... [where 条件];

注意事项:

如果不加条件,就会修改所有的数据;

四、数据库的查询操作(DQL)

select * from 表名;

4.1 查询的语法

select

字段列表

from

表名列表

where

条件列表

group by

分组列表

having

分组之后的条件

order by

排序

limit

分页限定

4.2 基础查询

去除重复的结果集;

select distinct addr from stu;

# 关键字distinct;

计算列与列

select math,english,math+ IFNULL(english,0) from stu;

# 也可以直接通过运算符计算列与列;

# 如果有值为NULL,可以使用IFNULL函数来判断;

# IFNULL(english,0);意思就是如果英语成绩为空,就算成0分;

起别名

select math,english,math+ IFNULL(english,0) as 总分 from stu;

4.3 条件查询

where子句后面接条件;

运算符:

基本的都有 ,还有一个特殊的 <> 就是相当于 !=;

between...and...;

in(集合);

like:模糊查询;

占位符:

_ : 单个任意字符;

% : 多个任意字符;

is null / is not null;

and 或者 && ;

or 或者 ||;

not 或者 !;

4.4 排序查询

格式

select * from 表名 order by 参考项 asc/desc;

参数

ASC:表示升序;

DESC:表示降序;

4.5 聚合查询

定义:将一列数据当成一个整体,进行纵向的计算;

种类:

count:SELECT COUNT(id) FROM mysheet01;

max:SELECT MAX(score) FROM mysheet01;

min:SELECT MIN(score) FROM mysheet01;

sum:SELECT SUM(score) FROM mysheet01;

avg:SELECT AVG(score) FROM mysheet01;

注意:聚合函数会排除 null 的值;

选择不包含null的进行计算;

用IFNULL函数;

4.6 分组查询

格式

select 参与分组的列 from 表名 order by 分组字段;

注意事项:

分组查询的字段只能是分组字段或者是聚合函数;

select sex,avg(score) from mysheet01 order by sex; 表示对性别分组,并且计算各组的平均;

where和having的区别;

位置不同,where在分组之前,having在之后;

where之后不可以跟聚合函数;having可以;

4.7 分页查询

语法:limit 开始的索引,每一页的条数;

公式:开始的索引 = (页码 - 1)* 每页的记录条数;

是方言;

4.8 约束

概念:对表中的数据进行限定,保证数据的正确性、有效性、完整性。

分类:

主键约束:primary key

注意

非空且唯一;

一张表只能有一个字段作为主键;

在创建表时添加主键

在表创建之后添加主键

删除主键

alter table student drop primary key;

- 自动增长

```mysql

id int primary key auto_increment;

```

非空约束:not null

在创建表的时候添加约束;

create tabel student(

id int,

name varchar(20) not null

)

- 创建表之后添加;

```mysql

alter table student name varchar(20) not null;

```

唯一约束:unique

创建表时添加

create tabel student(

id int,

phone_number varchar(20) unique

)

- 删除唯一约束

```mysql

alter table student drop index phone_number;

```

- 在创建表之后添加唯一约束

```mysql

alter table student phone_number varchar(20) unique;

```

外键约束:foreign key

让表与表产生关系,从而保证数据的正确性;

在创建表时添加外键约束

create table 表名(

...

外键列,

constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)

)

//外键名称是可以自定义的;

- 删除外键

```mysql

alter table 表名 drop foreign key 外键名称;

```

- 创建表之后添加外键

```mysql

alter table 表名 add constraint 外键名称 foreign key (外键列) references 主表(外键列);

```

级联操作

级联更新:on update cascade

级联删除:on delete cascade

五、数据库的设计

5.1 多表之间的关系

5.1.1 一对一的关系

案例:人和身份证的关系;

实现方式:从任意一方添加唯一外键指向另一方的主键

5.1.2 一对多的关系

案例:员工和部门的关系;

实现方式:从多的一方添加外键指向一的一方的主键;

5.1.3 多对多的关系

案例:学生和课程的关系;

实现方式:借助第三方中间表;

5.2 数据库设计的范式

设计数据库时,要遵循的的一些规范。要遵循后面的范式要求,就必须先满足前面的范式要求;

范式呈递次规范,越高的范式数据库的冗余越小;

现在有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯·科德范式(BCNF)、第四范式(4NF)、第五范式(5NF);

5.2.1 第一范式

每一列都是不可分割的原子数据项;

5.2.2 第二范式

在第一范式的基础上,非码属性必须完全依赖于候选码(在1NF的基础上消除非主属性对主码的部分函数依赖);

函数依赖:A ---> B ,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于属性A;

完全函数依赖:A ---> B ,如果A是一个属性组,则B属性值的确定需要依赖于A属性组中所有的属性;

部分函数依赖:A ---> B ,如果A是一个属性组,则B属性值的确定只需要依赖于A属性组中的部分属性;

传递函数依赖:A ---> B ,B ---> C ,如果通过A属性(属性组)的值,可以确定唯一B属性(属性组)的值,通过B属性(属性组)的值,可以确定唯一的C属性的值,则称C传递函数依赖A;

码:如果在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性(属性组)为该表的码;

主属性:码属性组中的所有属性;

非主属性:其他;

5.2.3 第三范式

在第二范式的基础上,任何非主属性不依赖于其他非主属性(在2NF的基础上消除传递依赖);

六、多表查询

6.1 内连接查询

6.1.1 隐式内连接

select

t1.name,t1.gender,t2.name

from

emp t1,

dept t2

where

t1.dept_id = t2.id;

6.1.2 显式内连接

select 字段列表 from 表1 [inner] join 表2 on 条件;

6.1.3 注意事项:

从哪些表中查;

条件是什么;

查询什么字段;

查询的是两表的交集部分;

6.2 外连接查询

6.2.1 左外连接

select 字段列表 from 表1 left [outer] join 表2 on 条件;

查询的是左表所有的数据以及两表的交集部分;

6.2.1 右外连接

select 字段列表 from 表1 right [outer] join 表2 on 条件;

查询的是右表的所有数据以及两表的交集部分;

6.3 子查询

6.3.1 概念

查询中嵌套查询,称嵌套的查询为子查询;

格式示例:

select * from emp where salary = (select max(salary) from emp);

6.3.2 子查询的三种情况

子查询的结果是单行单列的;

子查询可以作为条件,使用运算符去判断。> < = 。。。

子查询的结果是多行单列的;

子查询可以作为条件,使用运算符 in 来判断;

子查询的结果是多行多列的;

子查询可以作为一张虚拟表参与查询;

七、事务

7.1 事务的基本介绍

7.1.1 概念:

如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败

7.1.2 操作:

​ ① 开启事务:start transaction

​ ② 回滚:rollback

​ ③ 提交:commit

7.1.3 mysql数据库中事务默认提交

事务提交的两种方式:

自动提交,mysql 就是自动提交的,一条 DML 语句会自动提交一次事务;

手动提交:需要先开启事务,再提交;

修改事务的提交方式:

查看事务的默认提交方式:

select @@autocommit;

# 1 代表自动提交;

# 0 代表手动提交;

- 修改默认提交方式:

```mysql

set @@autocommit = 0 / 1;

```

7.2 事务的四大特征

原子性:是不可分割的最小单位,要么同时成功,要么同时失败;

持久性:当事务提交或者回滚后,数据库会持久化的保存数据;

隔离性:多个事务之间相互独立;

一致性:事务操作前后,事务总量不变;

7.3 事务的隔离级别(了解)

7.3.1 概念

事务之间是相互独立的,隔离的。但是多个事务同时操作同一批数据,则会引发一些问题,设置不同的隔离级别可以解决这个问题;

7.3.2 存在的问题

脏读:一个事务读取到另外一个事务中没有提交的数据;

不可重复读(虚读):在一个事务中,两次读到的数据不一样;

幻读:一个事务操作(DML)了数据表中的所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改;

7.3.3 隔离级别

级别:

read uncommitted:读未提交;产生的问题:三个都有;

read committed:读已提交;产生的问题:不可重复读,幻读;(Oracle默认)

repeatable read:可重复读;产生的问题:幻读;(mysql默认)

serializable:串行化;解决了所有问题;

注意:

隔离级别从小到大,安全级别越高,但是效率越来越低;

数据库查询隔离级别:

select @@tx_isolation;

数据库设置隔离级别:

set global transaction isolation level 级别字符串;

八、用户管理和权限管理(DCL)

8.1 管理用户

8.1.1 添加用户

create user '用户名'@'主机名' identified by '密码';

8.1.2 删除用户

drop user '用户名'@'主机名';

8.1.3 修改用户密码

第一种

update user set password = password(新密码) where user = '用户名';

第二种

set password for '用户名'@'主机名' = password(新密码);

忘记了root密码怎么办?

通过管理员权限打开 cmd 关闭mysql服务:net stop mysql;

使用无验证方式启动mysql:mysqld --skip-grant-tables;

打开新的cmd窗口,直接输入mysql敲回车;

修改密码;

关闭 mysqld 进程;

8.1.4 查询用户

切换到mysql数据库;

查询此库中的user表;

8.2 权限管理

8.2.1 查询权限

show grants for '用户名'@'主机名';

8.2.2 授予权限

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

8.2.3 撤销权限

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值