一、约束
1.主键约束     2.自动增长     3.非空约束     4.唯一约束     5.默认约束     6.外键约束     7.级联删除和级联更新     8.null删除和null更新
二、多表查询
1.笛卡尔积     2.内连接     3.左(外)连接     4.右(外)连接     5.子查询
三、事务
1.概念     2.操作     3.事务的特性ACID     4.事务的并发问题     5.事务的隔离级别
四、其他操作
1.添加用户     2.删除用户     3.修改密码     4.修改root密码     5.授予权限     6.查看权限     7.撤销权限     8.数据备份     9.数据还原

一、约束

1.主键约束

主键,又称主码,是表中一列或多列的组合。主键要求主键列的数据唯一,并且不允许为空,主键能够唯一地表识表中的一条记录。一个表只能有一个主键,但是可以是多列(复合主键)。
(1)创建表时添加

-- 方式一:直接在主键字段后标识
create table t(id int primary key ,name varchar(10)
);
-- 方式二:在后面专门定义,复合主键只能用此方法
create table t(id int,name varchar(10) ,primary key(id)
);

(2)在已存在的表中添加

alter table t modify id int primary key;
alter table t add constraint id_pri primary key (id);
-- 第二种方式可以自定义主键名称。

(3)删除主键约束

alter table t drop primary key;

2.自动增长

当某列是数值时,我们可以给这列设置,让它自动增长。一般跟数值类型的主键一起使用。关键字 auto_increment

添加自动增长以后,也同样可以对字段进行主动赋值。
如果手动赋值跳跃性,则后面会直接根据最大值++。

(1)创建表时添加

create table student(s_id int primary key auto_increment,s_name varchar(10)
) auto_increment=10000 -- 设置自动增长从10000开始-- 在已存在表中设置自动增长从10000开始
alter table student  auto_increment=10000;

(2)在已存在的表中添加

alter table student s_id int auto_increment;

(3)删除自增长

alter table student modify s_id int;

3.非空约束

定义表的时候限定为非空约束后则此字段不能有null值。
(1)创建表时添加

create table t(   ...stu_name varchar(10) not null
);

(2)在已存在的表中添加

alter table t modify stu_name varchar(10) not null;

(3)删除非空约束

alter table t modify stu_name varchar(10);

4.唯一约束

限定列数据不能有重复的值,null值可以重复。
(1)创建表时添加

create table t(   ...stu_name varchar(10) unique
);

(2)在已存在的表中添加

alter table t modify stu_name varchar(10) unique;
alter table t add constraint name_unique unique(stu_name);
-- 后者可以自定义约束的名字。

(3)删除唯一约束

alter table t drop index stu_name;-- 通过列名来删除约束
alter table t drop index name_unique;-- 通过约束名来删除约束

5.默认约束

限制某列数据当没有给定值的时候使用指定的默认值,关键字是 default
(1)创建表时添加

create table t(   ...stu_age int default 18
);

(2)在已存在的表中添加

alter table t modify stu_age int DEFAULT 18;

(3)删除默认约束

alter table t modify stu_age int;

6.外键约束

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

创建完父表与字表的外键约束关系后,则子表的外键字段值如果不为null的话,则必须是主表中的存在值

建立好外键约束关系后,如果子表外键值使用了主表的一个值,则默认情况下主表的这个值不能删除或者改成别的值。如果不要这个默认操作需要在定义外键的时候设置。

(1)创建表时添加

create table score (s_id int ,s_name VARCHAR(10),s_socre int ,user_id int ,-- 指定字段user_id是外键,指向父表student表中的s_id字段,外键必须指向父表的主键-- constraint s_foreign 这里可以加上,给这个外键取个名字  FOREIGN KEY(user_id) references student(s_id));

(2)在已存在的表中添加

alter table score add constraint score_foreign foreign key (user_id) references student(s_id);

(3)删除外键约束

alter table score drop foreign key score_foreign;

score_foreign为外键约束取的名字,如果没有手动取名则改为使用默认生成的约束即可。

7.级联删除和级联更新

当删除主表的数据时,子表的行为可以设置级联删除跟级联更新。
(1)创建子表添加外键时添加

create table score (s_id int ,s_name VARCHAR(10),s_socre int ,user_id int ,-- 设置外键时,级联删除跟级联更新FOREIGN KEY(user_id) references student(s_id) on delete cascade on update cascade );

(2)在已存在的表中添加外键时添加

alter table score add constraint score_foreign foreign key (user_id) references student(s_id) on update cascade on delete cascade;

8.null删除和null更新

当删除主表的数据时,子表的行为可以设置null删除和null更新。
(1)创建子表添加外键时添加

create table score (s_id int ,s_name VARCHAR(10),s_socre int ,user_id int ,-- 设置外键时,set null删除跟set null更新FOREIGN KEY(user_id) references student(s_id) on delete set null on update set null
);

(2)在已存在的表中添加外键时添加

alter table score add constraint score_foreign foreign key (user_id) references student(s_id) on update set null on delete set null;

二、多表查询

1.笛卡尔积

select * from student,score;

查询出来的数量等于A*B,这个现象被称为笛卡尔积,即取这两个集合的所有组成情况。

2.内连接

隐式内连接

通过 where 消除无用数据:

select * from student,score where student.s_id = score.user_id;
显式内连接
select * from student INNER JOIN score on student.s_id = score.user_id;

3.左(外)连接

select * from student left join score on student.s_id = score.user_id;

4.右(外)连接

select * from student right join score on student.s_id = score.user_id;

内连接是将两表都满足联系条件的列合并成一个表
外连接是将A表完全保留,再拼上满足联系条件的B表的列

5.子查询

查询中嵌套查询,称嵌套查询为子查询。

SELECT * FROM customers WHERE cust_id IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');

三、事务

1.概念

如果一个包含多个SQL步骤的业务操作,把这些操作放入一个事务中,这些操作要么同时成功,要么同时失败。

2.操作

开启事务
start transaction;-- 方式一
begin;-- 方式二
提交事务
commit;-- 方式一
commit work;-- 方式二
回滚事务
rollback;-- 方式一
rollback work;-- 方式二
  • MySQL中默认自动提交事务。
  • 可以通过SELECT @@autocommit; 查看事务的默认提交方式, 0 为手动提交, 1 为自动提交。
  • 修改默认提交方式:set @@autocommit = 1;

3.事务的特性(ACID)

特性 说明
原子性 是不可分割的最小操作单位,要么同时成功,要么同时失败。
一致性 事务操作前后,数据总量不变。
隔离性 多个事务之间。相互独立。
持久性 当事务提交或回滚后,数据库会持久化的保存数据。

4.事务的并发问题

问题 说明
脏读 事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
不可重复读 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
幻读 事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了修改或者删除操作并提交,导致事务A多次读取同一数据时,莫名的多出了一些之前不存在数据,或者莫名的丢了一些数据。像发生了幻觉一样。
  • 不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。
  • 解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表。

5.事务的隔离级别

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)
  1. MySQL默认隔离级别为可重复读 repeatable-read
  2. Oracle默认隔离级别是不可重复读 read-committed
  3. 串行化 Serializable 强制的进行排序,在每个读读数据行上添加共享锁。会导致大量超时现象和锁竞争。
  4. 隔离级别从小到大安全性越来越高,但是效率越来越低。
  5. 查询数据库隔离级别 select @@tx_isolation;
  6. 设置数据库隔离级别 set global transaction isolation level 级别字符串;

四、其他操作

1.添加用户

CREATE USER  '用户名'@'主机名' IDENTIFIED BY  '密码';

2.删除用户

DROP USER '用户名'@'主机名';

3.修改密码

SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

4.修改root密码

(1)打开第一个cmd窗口,停止mysql服务: net stop mysql

(2)无验证方式启动mysql:mysqld --skip-grant-tables

(3)打开新的cmd窗口,直接输入mysql命令,敲回车,就可以登录成功。

(4)接着运行use mysql;update user set password = password('你的新密码') where user = 'root';

(5)关闭2个CMD窗口
(6)打开任务管理器,手动结束mysqld.exe 的进程或者重启

(7)启动mysql服务

(8)使用新密码登录

5.授予权限

grant 权限列表 on 数据库名.表名  to  '用户名'@'主机名' identified by '密码' ;
  • 权限列表代表14种权限,分别为: select,insert,update,delete,create,drop,index,alter,grant 等, ALL 代表所有的。
  • 用户地址可以是localhost,可以使ip地址、机器名字、域名。也可以用’%'表示任何地址连接。

6.查看权限

SHOW GRANTS FOR '用户名'@'主机名';

7.撤销权限

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

8.数据备份

(1)cmd窗口方式

mysqldump -u用户名 -p密码 数据库的名称 > 保存的路径

(2)图形界面方式
(以Navicat Premium为例)

如上图操作将sql文件保存至妥当位置即可。

9.数据还原

(1)cmd窗口方式
①登录数据库:

mysql -u用户名 -p密码

②创建并使用数据库:

create database student
use student

③source 文件路径,导入数据

source d://a.sql

(2)图形界面方式
(以Navicat Premium为例)
①创建数据库(注意编码格式统一)。

②双击连接,右键选择 运行SQL文件。

③在本地文件中找到sql文件进行导入,点击开始即可。

小汤学编程之MySQL(三)——约束、多表查询、事务和数据库其他操作相关推荐

  1. 小汤学编程之MySQL(二)——数据库操作、表结构操作、表数据操作、查询数据和数据类型

    一.数据库操作 1.创建数据库     2.查询数据库     3.修改数据库     4.使用数据库 二.表结构操作 1.创建表     2.查询表     3.修改表     4.删除表 三.表数 ...

  2. 小汤学编程之MySQL(一)——基本概念、使用前的准备和了解SQL

    一.基本概念 1.数据库及其特点     2.数据库管理系统     3.数据库的分类 二.使用前的准备 1.安装与卸载     2.服务的启动     3.登录与退出 三.了解SQL 1.什么是SQ ...

  3. 小汤学编程之MySQL经典例题——表的创建与查询

    题目: 会员类型表UserTypeInfo [系统管理员-管理会员 店主-卖家 普通会员-买家] 类型编号 typeId int 主键 自增长 类型名 typeName varchar(20) 不能为 ...

  4. 小汤学编程之JDBC(一)——JDBC概述和快速入门

    一.JDBC概述 1.概念     2.作用 二.JDBC快速入门 1.实现步骤     2.查询数据和操作数据     3.SQL注入     4.事务管理     5.Statement与Prep ...

  5. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

  6. 小汤学编程之JAVA基础day08——面向对象(三):抽象类与接口

    一.抽象类 1.抽象类的由来      2.几点注意     3.语法规则 二.接口 1.定义方式      2.属性和方法 三.总结 一.抽象类 1.抽象类的由来 "用进废退", ...

  7. 小汤学编程之JavaEE学习day08——Maven

    一.Maven介绍 1.什么是Maven     2.Maven的功能     3.什么是构建     4.项目的构建方式 二.Maven的安装 1.下载     2.安装     3.配置      ...

  8. 小汤学编程之JAVA经典例题——嵌套集合

    题目: 有一个记事本,能记录周一到周天,每天做的所有事情和事情的次数,周而复始.小明在这个记事本上记录了3周,内容如下: 第一周 ·周一:学java,逛街 ·周二:打台球,旅游 ·周三:溜冰,吃烧烤 ...

  9. 小汤学编程之JDBC(二)——dbutils框架和DataSource连接池

    一.dbutils框架 1.介绍     2.新增/删除/修改     3.各种查询     4.扩展:Bean中属性名与数据表列名的映射 二.DataSource连接池 1.获取DataSource ...

最新文章

  1. 如何使用php将字符从全角转为半角
  2. 李彦宏候选中国工程院院士
  3. const在函数声明中的应用(转)
  4. 关系数据库的范式和反范式
  5. 小游戏来了 游戏小程序你想知道的这有
  6. java轻松实现无锁队列
  7. msg计算机指令怎样用,WIN7里使用msg命令发送消息失败
  8. 使用CAS代替synchronized
  9. 共用数据库和上传的文件的laravel-admin 和 laravel 项目中文件保存路径的配置
  10. springcloud工作笔记098---springcloud多项目包扫描问题
  11. 数据科学之:消费者资产分析
  12. 全向移动机器人参数校准方法思路
  13. Java SE 正则表达式 API Pattern 与 Matcher.
  14. paip.重装系统需要备份的资料总结..v2.0 cad
  15. Unity-TouchScripts中使用TUIO的记录和简单的代码分析
  16. 盛大开业!三星生活家电体验馆正式入驻红星美凯龙
  17. 微信公众平台中怎么上传附件?
  18. maven的wagon-maven-plugin插件详解
  19. 编程代码:用C语言来实现下雪效果,这个冬天,雪花很美
  20. 23款精美的HTML5网站模板免费下载

热门文章

  1. MSSQL Express版本自动备份数据库
  2. 第一次在Django上编写静态网页
  3. Shell中字符串、数值的比较
  4. 多柱汉诺塔最优算法设计探究
  5. ExtJs懒人笔记(2) ExtJs页面布局
  6. MANet:盲图像超分辨率中空间变异核估计的互仿射网络(ICCV 2021)
  7. 20K~50K/月,上海随芯科技 算法 招聘:3D机器视觉、DSP、语音识别
  8. Python中的reshape()
  9. oracle 没有索引删除一行数据_Oracle数据库之索引
  10. 计算机视觉论文-2021-09-10