一、TCL事务控制语言
###<1>事务的概念
事务是访问并可能更新数据库中各种数据项的执行单元。
事务是一条SQL语句,一组SQL语句,或者整个程序。
事务是恢复和并发控制的基本单位。
事务四个特性:ACID特性,原子性,一致性,隔离性,持续性。

###<2>为什么要使用事务
转账操作:用户A给用户B转账1000元
隐含的条件:扣钱和加钱,要么同时成功,或者同时失败。

事务就是对数据库中的数据的多步操作,并且可以控制数据操作的一致性。对数据的多步操作要么同时成功,或者同时失败。

###<3>事务的特点
1. A(Atomicity)原子性
一个事务的执行被视为不可分割的最小单元。
要么同时成功,或者同时失败。
2. C(consistency)一致性
一个事务的执行不应该破坏数据库的完整性约束。
非法数据的录入,事务会进行撤销操作。
3. I(Isolation)隔离性
通常来说,事务和事务之间不会相互影响。
4. D(Durability)持久性
软硬件崩溃,事务会去自动恢复。(Innodb存储引擎会自动恢复)

###<4>事务的使用
准备:
create table account(
name varchar(20),
money float(6,2)
);

insert account value('张三',22.22);

语法:
set autocommit = true|false; -- 设置事务的提交方式(自动提交和手动提交)
rollback; -- 事务的回滚
commit; -- 事务的提交
savepoint 还原点名称; -- 保存还原点
rollback to 还原点名称; -- 回滚到某个还原点

例如:
set autocommit = false;//设置手动提交
delete from account ;
commit;

insert account value('张三',22.22);
update account set money = money-0.22;
savepoint p1;
update account set money = money-10;
savepoint p2;
update account set money = money-10;
savepoint p3;
delete from account ;
rollback to p2;

###<5>存储引擎
5.1 概念
存储数据用的技术(存储机制,索引技术,锁定水平等等)

5.2 查看存储引擎
show engines;

5.3 常用的存储引擎
MyISAM
相对简单的存储引擎,不支持事务,不支持外键,访问速度快
以查询为主,对数据的完整性要求不严格,推荐使用MyISAM

InnoDB
支持事务,支持外键,行级别锁机制
多重并发更新的操作比较多,推荐使用Innodb
支持auto_increment属性
自动灾难恢复机制,软硬件崩溃

# 二、MySQL中的约束
###<1>约束
约束就是一种限制,通过对表的行和列的数据进行限制,确保数据的完整性和唯一性。

###<2>使用场景
在创建表的时候,创建约束

###<3>分类
1. default,默认约束,指定某列的默认值, 限制此列数据的正确性。(保证数据的域完整性)
2. not null,非空约束,指定某列的值不为空,限制此列数据的正确性。(保证数据的域完整性)
3. unique ,唯一约束,指定某列或者列组合的数据不能重复,保证数据的实体完整性。
4. primary ,主键约束,指定某列或者列组合的数据不能重复并且不能为空,保证数据的实体完整性。
5. foreign key ,外键约束,子表中的一条数据参照主表中的数据,保证数据的参照完整性。
6. check ,检查约束(保证数据的域完整性),MySQL不支持检查约束。
7. unsigned,无符号约束,指定某列的数值为正数,保证数据的域完整性。

### 3.1 default约束
添加约束:
<1>创建表的时候添加
create table t1(
id int default 1,
name varchar(20) default '小明'
);

<2>通过alter...modify/change添加
alter table t1 modify id int default 2;
alter table t1 change name name int default '小李';

删除约束:
通过alter...modify/change
alter table t1 modify id int ;

###3.2 not null 非空约束
添加约束:
<1>创建表的时候添加
create table t1(
id int ,
name varchar(20) not null
);

<2>通过alter...modify/change添加
alter table t1 modify id int not null;

删除约束:
通过alter...modify/change
alter table t1 modify id int ;

###3.3 唯一约束
添加约束:
<1>创建表时添加
create table t2(
id int unique,
name varchar(20)

);
insert t2 value(1,'小明');
insert t2 value(1,'小张');

create table t2(
id int unique,
name varchar(20)
[constraint unique_name] unique(字段1,字段2,...)
);

<2>通过alter...modify/change
alter table t2 modify/change name unique;
alter table t2 ADD [constraint unique_name] unique(字段1,字段2,...);

<3>删除约束
alter table t2 drop index unique_name;
drop index unique_name on table_name;

注意:删除唯一约束时,如果没有给唯一约束起名称,可以使用删除建立了唯一约束的第一个列名。

###3.4 主键约束
<1>创建约束
create table t6(
id int primary key,
name varchar(20)
);

<2>通过alter...modify/change
alter table t6 modify/change id primary key;
alter table t6 add [constraint pk_name] primary key(id,name);

<3>删除约束
alter table t6 drop primary key;

注意:
show create table 表名;查看当前表的约束设置

一张表只能有一个主键
删除主键后,当前列还保存非空约束
删除主键前,保证当前主键列没有设置成自增长。
create table t7(
id int primary key auto_increment,
name varchar(20)
);

###3.5 自增长约束
约束列的数量自动增加,设置到整数类型的列上
通常在主键上设置自增长约束

删除约束:alter...modify/change

create table xxx() auto_increment=初始值;

###3.6 外键约束
#####问题一:为什么要创建多张表?
减少数据的冗余,避免资源的过度浪费

用户订单表:user_order
用户名 密码 地址 联系方式 ..... 订单编号 状态 日期 商品信息...
小明 123 北京 15555225 0001 0 20180101 ...
小明 123 北京 15555225 0002 1 20180108 ...
小明 123 北京 15555225 0003 2 20180104 ...
小明 123 北京 15555225 0004 3 20180101 ...
小明 123 北京 15555225 0005 4 20180104 ...
小明 123 北京 15555225 0006 5 20180101 ...

######解决:拆表
用户表 user (主表)
用户名 密码 地址 联系方式
小明 123 北京 15555225

订单表 order (从表)
订单编号 状态 日期 商品信息... 用户名
0001 0 20180101 ... 小明
0002 1 20180108 ... 小明
0003 2 20180104 ... 小明
0004 3 20180101 ... 小明
0005 4 20180104 ... 小明
0006 5 20180101 ... 小明

######建立关系
建立关系:将主表中能够唯一的字段,添加到从表中。

######添加约束
添加外键约束

<0>准备
create table users(
uid int primary key auto_increment,
uname varchar(20) not null unique,
upwd varchar(20) not null
);

create table orders(
oid int primary key auto_increment,
stat tinyint not null,
date datetime not null,
uid int
);

<1>添加约束
create table orders(
oid int primary key auto_increment,
stat tinyint not null,
date datetime not null,
uid int,
[constraint fk_name] foreign key(uid) references users(uid)
);

通过:alter table orders add [constraint fk_name] foreign key(uid) references users(uid);

<2>删除外键约束
alter table orders drop foreign key fk_name;
如果不知道当前删除的外键的名称,show create table 表名;

#####问题二:表于表之间的关系?
一对一:
一对多:
多对多: 订单表 ---------- 商品表
学生表 ---------- 课程表
关系表
sid cid

需求分析:分析数据表(属性),分析表和表之间的关系
逻辑设计:将需求转换成关系模型ER图
表的设计:
物理设计:

### 外键中的级联关系
1. on delete cascade 删除主表中的数据时,从表中的数据会随之一起删除;
2. on update cascade 更新主表中的数据时,从表中的数据会随之更新
3. on delete set null 删除主表中的数据时,从表中的数据会置空

设置级联删除:
create table orders(
oid int primary key auto_increment,
stat tinyint not null,
date datetime not null,
uid int,
constraint fk_name foreign key(uid) references users(uid) on delete cascade
);

### 3.7 无符号和零填充约束
添加约束:
<1>创建表的时候添加
create table t1(
id int default 1 unsigned , -- 添加无符号约束
name varchar(20) default '小明',
age int(3) zerofill -- 添加零填充约束
);

<2>通过alter...modify/change添加

删除约束:
通过alter...modify/change

# 三、多表查询(重点)
### 1. 分类
<1>联合查询、合并查询 : union /union all
<2>连接查询:
内连接:inner join on
外连接:
左外连接:
右外连接:
交叉连接:
全外连接:
自然连接:natural join on
自连接:

<3>子查询:SQL语句的嵌套

### 2. 合并查询
将两个select语句查询的结果合并在一起。

合并的方式一:union ,去除重复的数据
create table t9(
id int primary key auto_increment,
name varchar(20)
);

create table t10(
num int primary key auto_increment,
name2 varchar(20)
);

insert t9 value(null,'a1');
insert t9 value(null,'a2');
insert t9 value(null,'a3');

insert t10 value(default,'a1');
insert t10 value(default,'a2');
insert t10 value(default,'a4');

select * from t9 union select * from t10;

合并的方式二:union all
select * from t9 union all select * from t10;

注意:被合并的两个结果集中的属性和属性的类型必须一致。

### 3. 连接查询
多个表的数据的乘积。
产生笛卡尔积现象。
给两张表建立关联关系,过滤错误的数据

insert users value(1,'xiaozhang','123');
insert users value(2,'xiaoli','456');
insert users value(3,'xiaowang','789');

insert orders value(1001,1,now(),1);
insert orders value(1002,1,now(),1);

insert orders value(1003,1,now(),3);
insert orders value(1004,1,now(),3);

select * from users,orders; -- 笛卡尔积现象
select * from users,orders where users.uid=orders.uid;

#####3.1 内连接
语法格式:
select u.uid from users u inner join orders o on u.uid=o.uid;

#####3.2 外连接
左外连接:
select u.uid,u.uname,o.oid, o.date from users u left outer join orders as o on u.uid=o.uid;
先查左表,然后查询右表。右表中满足条件的数据项显示,不满足条件的则显示null。

select u.uid,u.uname,o.oid, o.date from orders o left outer join user as u on u.uid=o.uid;
先查左表,然后查询右表。右表中满足条件的数据项显示,不满足条件的则显示null。

右外连接:
select u.uid,u.uname,o.oid, o.date from users u right outer join orders as o on u.uid=o.uid;
先查右表,然后查询左表。左表中满足条件的数据项显示,不满足条件的则显示null;

自然连接:natural ,自动寻找主外键连接等式
select * from users natural join orders ;
select * from users natural left join orders ;
select * from users natural right join orders ;

自连接:自己连接自己
create table employee(
num int primary key ,
name varchar(20) not null,
leadnum int
) ;

insert employee value(1001,'蒙奇D龙');
insert employee value(1003,'伊万科娃',1001);
insert employee value(1004,'暴君熊',1001);

insert employee value(1002,'五老星');
insert employee value(1005,'七武海',1002);
insert employee value(1006,'黄猿',1002);
insert employee value(1007,'赤犬',1002);
insert employee value(1008,'青稚',1002);

需求:打印伊万科娃和其领导的信息
select * from employee e1 ,employee e2 where e1.num=e2.leadnum and e2.name='伊万科娃';

select * from employee e1 ,employee e2 where e1.num=e2.leadnum and e1.name='伊万科娃';
查找伊万科娃的下属

###4. 子查询
select查询语句的嵌套

子查询中的查询语句的位置:
where后面:作为条件
from后面:作为查询的数据表

例如:
查询订单表中价格大于平均订单价格的订单信息
select * from orders where price>avg(price); -- 不可行

第一步:求订单的平均价格
select avg(price) from orders;
第二步:查询
select * from orders where price>(select avg(price) from orders) ;

练习:
1. 查询密码和用户小刘一样的用户信息
2. 查询订单数量大于1的用户信息

# 四、用户的创建和授权
授权语法格式:
GRANT 权限 ON 数据库.数据表 TO 用户名@ip地址 IDENTIFIED BY 密码;

例如:
0. 使用root账号登陆数据库
1. create database testDB;

2. grant all privileges on testDB.* to xiaoming@localhost identified by '123';
flush privileges;

3. grant select ,update on testDB.* to laowang@localhost identified by '123';

4. grant select ,update ,delete ,create ,drop ,alter on *.* to wangayi@'%' identified by '123';

注意:'%'对非本地的主机授权,赋予所有权限可以使用:all privileges

删除用户:
drop user 用户名@"%"

转载于:https://www.cnblogs.com/sumboy/p/9058626.html

一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...相关推荐

  1. Mysql(软件安装、Mysql基本语法、Mysql数据操作、Mysql关键字、约束、多表查询、Mysql多表查询、数据备份、数据导入、视图)

    1.MySQL介绍 1.1数据库介绍 数据库概念 数据库就是用于存储数据的一个空间 数据存储方式的发展史 甲骨文(材料太昂贵) 竹简(太沉了,运输不方便) 纸(易损坏) 计算机(办公软件,传输不方便) ...

  2. HTML(一、语法规范,二、结构标签,三、开发工具,四、HTML常用标签,五、注释和特殊字符)

    文章目录 前言 一.html语法规范 1. html基本语法规范 2. 标签关系 二.基本结构标签 1. 第一个 HTML 网页 2. 基本结构标签总结: 三.开发工具 1. vscode工具的创建工 ...

  3. MySQL-7 DDL约束 标识列 TCL事务控制语言 视图view

    文章目录 DDL语言 常见约束 约束分类 添加约束的时机 创建表时添加约束 通用写法 修改表时添加约束 修改表时删除约束 主键和唯一的对比 外键约束 案例讲解常见约束 标识列 TCL事务控制语言 事务 ...

  4. DCL(数据控制语言)和TCL(事务控制语言)

    文章目录 1.DCL(数据控制语言) 2.TCL(事务控制语言) 3. 其他常用sql语句 1.DCL(数据控制语言) DCL主要用来管理数据库用户以及用户涉及的权限 1.1 创建数据库中的新用户 语 ...

  5. MySQL学习思维导图(MySQL简介、SQL基础命令、约束、单表查询、多表查询、内置函数、存储过程、视图、事务、索引)

    MySQL学习思维导图 内容包括:MySQL简介.SQL基础命令.约束.单表查询.多表查询.内置函数.存储过程.视图.事务.索引 文章目录 MySQL学习思维导图 一.MySQL简介 二.SQL基础命 ...

  6. MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物

    MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...

  7. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  8. MySQL字段约束及多表查询---讲解三

    MySQL环境配置(mysql有下载包) MySQL数据库表的基础操作(增删改查)-讲解一 MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解-讲解二 MySQL字段约 ...

  9. Mysql进阶学习(三)排序查询与常见函数

    Mysql进阶学习(三)排序查询与常见函数 一.进阶3:排序查询 1.语法: 2.特点: 3.排序方式 3.1.按单个字段排序 3.2.添加筛选条件再排序 案例:查询部门编号>=90的员工信息, ...

最新文章

  1. 你真的了解Grid布局吗?
  2. 曝iOS存在缺陷 黑客可强制iPhone拨打收费电话
  3. Caused by:java.lang.IllegalStateException at android.media.MediaPlayer._setDataSource(Native Method)
  4. css3 制作平滑过度动画
  5. matlab plot 多种颜色_Matlab画图,只需要这几步
  6. Sequelize-nodejs-8-Transactions
  7. WSL2安装GUI界面与音视频
  8. .net vue漂亮登录界面_一文弄懂前端框架Vue 的核心——数据绑定,为升职涨薪加分
  9. pb5.0-pb10.0各版本高速下载
  10. 2011年中国程序员薪水,蛋疼。
  11. ubuntu18设置屏幕旋转_[Android6.0][MTK6737] 设置屏幕旋转 270 度
  12. 鼠标 hover时盒子阴影效果,凸起效果_ box-shadow的应用
  13. Python基础入门:(一)从变量到异常处理 --阿里云天池
  14. 求最大公约数c语言实验心得,C语言编程实训报告(合集)
  15. 20年广西赛题技能要求(服务器)
  16. 初入python世界——python基础语法
  17. “知识共享”(CC)与开放教育资源(OER)之间的紧密关系
  18. SQL 中的注释语句
  19. 干净简便的HTML5文档查看器——GroupDocs.Viewer
  20. 回头看看自己这半年走过的路-2012

热门文章

  1. linux瘦身软件下载,瘦身相机APP全新安卓版下载-瘦身相机APPV1.3.0-Linux公社
  2. java实现rabbitmq任务模型(work queues), 生产者 消费者 消息队列 能者多劳
  3. mysql运用实例_mysql应用实例
  4. http传输字符编码与转义(深度好文)
  5. Java——JVM基本原理
  6. Python自省(反射)指南 1
  7. Go语言中Tcp协议粘包问题处理
  8. android timepicker分割线颜色,Android修改DatePicker字体颜色及分割线颜色详细介绍
  9. Spring boot yml文件的书写格式
  10. 大数据之hive分区表和分桶表的区别