MySQL学习笔记(二)

 

一、约束

1.概念和分类

(1)约束的概念:

        约束是作用于表中列上的规则,用于限制加入表的数据。

        约束的存在保证了数据库中数据的正确性,有效和完整性。

 

(2)约束的分类

        

约束名称描述关键字
非空约束
保证列中所有的数据不能有null值。
NOT NULL
唯一约束
保证列中所有数据各不相同。
UNIQUE
主键约束
主键是一行数据的唯一标识,要求非空且唯一。
一般我们都会给每张表添加一个主键列用来唯一标识数据。
PRIMARY KEY
检查约束
保证列中的值满足某一条件。
CHECK
默认约束
保存数据时,未指定值则采用默认值。
DEFAULT
外键约束
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
FOREIGN KEY

auto_ 

2.非空约束

1.概念:非空约束用于保证列中所有数据不能有NULL值。

 

2.语法

(1)添加约束

        

// 创建表时添加非空约束

 CREATE TABLE 表名(
列名 数据类型 NOT NULL,
.....
);


// 建完表后添加非空约束

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;

(2)删除约束

 

ALERT TABLE 表名 MODIFY 字段名 数据类型;

 

3.唯一约束

 1.概念:唯一约束用于保证列中所有数据各不相同

 

 2.语法

(1)添加约束

        

// 创建表时添加唯一约束
CREATE TABLE 表名(
列名 数据类型 UNIQUE [AUTO_INCREMENT],

// AUTO_INCREMENT: 当不指定值时自动增长
…
);
CREATE TABLE 表名(
列名 数据类型,
…
[CONSTRAINT] [约束名称] UNIQUE(列名)
);

// 建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;

(2)删除约束

ALTER TABLE 表名 DROP INDEX 字段名;

 

4.主键约束

 1.概念:主键是一行数据的唯一标识,要求非空且唯一(一张表内只能有一个主键)

 

 2.语法

(1)添加约束

        

// 创建表时添加主键约束
CREATE TABLE 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
…
);
CREATE TABLE 表名(
列名 数据类型,
[CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);

// 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

(2)删除约束

ALTER TABLE 表名 DROP PRIMARY KEY;

 

5.默认约束

1.概念:保存数据时,未指定值则采用默认值

 

2.语法

(1)添加约束

// 创建表时添加默认约束
CREATE TABLE 表名(
列名 数据类型 DEFAULT 默认值,
…
);

// 建完表后添加默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

(2)删除约束

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

 

6.外键约束

1.概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

 

2.语法

 

(1)在创建表的时候添加外键约束

CREATE TABLE 表名(
列名 数据类型,
...
CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)

);

 

(2)表建完之后添加外键约束

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名) REFERENCES 主表(主表列名);

 

(3)删除约束

ALTER TABLE 表名 DROP FOREING KEY 外键名称;

 

二、数据库设计

1.数据库设计概念:

数据库设计就是根据需求,结合我们所选用的DBMS,设计出最优的数据存储模型。建立数据库中的表结构以及表与表之间的关联关系的过程。

 

2.数据库的设计步骤

①需求分析:数据是什么?数据的属性有哪些?数据与属性之间的特点是什么

②逻辑分析:通过ER图对数据库进行逻辑建模,并不需要考虑我们所选用的数据库管理工具

③物理设计:根据数据库自身的特点把逻辑设计转换为物理设计

④维护设计:1.对新的需求进行建表;2.对表进行优化

表关系

1.一对一

比如:人 和 身份证

 

一对一关系多用于表拆分,将一个实体中经常使用的表放在一张表,不经常使用的字段放在另一张表,用于提升查询性能。

 

实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为 唯一(UNIQUE)。

2.一对多或多对一

比如:班级 和 学生

 

一个班级对用多个学生,多个学生对应一个班级

 

实现方式:在多的一方建立外键,指向一的一方的主键

 

 

3.多对多

比如:商品 和 订单

 

一个商品对应多个订单,一个订单包含多个商品

 

实现方式:建立第三张 中间表,中间表至少包含两个外键,分别关联两方主键

三、多表查询

多表查询简介

简单的来说,多表查询就是从多张表中取出我们想要的数据。

 

多表查询又分为:

 

1.连接查询:(1)内连接查询,(2)外连接查询

2.子查询

 

内连接查询

1.内连接查询语法

// (1)隐式内连接 

SELECT 字段列表 FROM 表1,表2.... WHERE 条件;


//  (2)显示内连接

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 条件;

内连接相当于查询不同表中有交集的数据

 

外连接查询

1.外连接查询语法

// 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

// 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

左外连接:相当于查询A表所有数据和交集部分数据

右外连接:相当于查询B表所有数据和交集部分数据

 

子查询

1.概念:在查询语句中嵌套使用查询语句,而嵌套查询就是子查询。

 

2.子查询根据查询结果不同,作用不同,又分为:

  • 子查询语句结果是单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断

  • 子查询语句结果是多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断

  • 子查询语句结果是多行多列,子查询语句作为虚拟表

3.子查询语法

// 单行单列,子查询语句作为条件值,使用 = != > < 等进行条件判断

SELECT 字段列表 FROM 表 WHERE 字段名 =(子查询);


// 多行单列,子查询语句作为条件值,使用 in 等关键字进行条件判断

SELECT 字段列表 FROM 表 WHERE 字段名 in (子查询);


// 多行多列,子查询语句作为虚拟表

SELECT 字段列表 FROM (子查询) WHERE 条件;

 

四、事务

事务简介

数据库的事务是一种机制、一个操作序列,包含了一组数据库操作指令。

 

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。

 

事务是一个不可分割的工作逻辑单元。

事务语法

// 1.开启事务

START TRANSACTION;
// 或者  
BEGIN;


// 2.提交事务

commit;


// 3.回滚事务

rollback;

事务四大特征 

  • 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

  • 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态

  • 隔离性(Isolation) :多个事务之间,操作的可见性

  • 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

补充:

 mysql中事务是自动提交的。

 

也就是说我们不添加事务执行sql语句,语句执行完毕会自动的提交事务。

 

可以通过下面语句查询默认提交方式:

SELECT @@autocommit;
// 查询到的结果是1 则表示自动提交,结果是0表示手动提交。当然也可以通过下面语句修改提交方式

set @@autocommit = 0;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值