数据库MySQL学习第二天—插入修改删除语句的介绍、DDL(数据定义语言),TCL(事物控制语言)、变量,存储过程和函数

标题:数据库MySQL学习第二天—DDL、TCL、增删改语句、以及存储过程和函数

学习内容:

1、插入修改删除语句的介绍
2、DDL(数据定义语言)
3,TCL(事物控制语言)
4,变量,存储过程和函数


内容详情:

1、插入修改删除语句的介绍
插入语法:

方式一
insert into 表名(列名1,列名2,…)
values(值1,值2,…) ;
方式二
insert into 表名
set列名=值,列名=值,…

一般用方式一较多,方式一支持插入多行并且支持子查询,而方式二不支持。

修改语法:

修改单表
update 表名
set 列=新值,列=新值,…
where筛选条件;
修改多表
sq192语法:
update表1别名,表2别名
set列=值,…
where连接条件
and筛选条件;
sql99语法:
update表1别名
inner / left right join表2别名
on连接条件
set列=值,…
where筛选条件;

删除语法:

方式一
delete from 表名
where筛选条件
方式二
truncate table表名
delete 可以加where条件, truncate不能加
truncate效率高一丢丢
假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
truncate删除没有返回值,delete删除有返回值
truncate删除不能回滚,delete删除可以回滚

2、 DDL(数据定义语言)

库的管理

库的创建

CREATE DATABASE IF NOT EXISTS 库名称;

库的删除

DROP DATABASE IF EXISTS 库名称;

表的管理
表的创建

Create table 表名(
列名 列的类型(长度) 约束,
列名 列的类型(长度) 约束,

表的修改

修改列名
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 列的类型;
修改列的类型或者约束
ALTER TABLE 表名 MODIFY COLUMN 列名 列的类型 约束;
添加新列
ALTER TABLE 表名 ADD COLUMN 新列名 列的类型;
删除列
AALTER TABLE 表名 DROP COLUMN 列名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;

表的删除

DROP TABLE IF EXISTS 表名;

表的复制

复制表的结构
CREATE TABLE copy like 表名
复制表的结构和数据
CREATE TABLE copy
SELECT *FROM 表名;
只复制部分数据
CREATE TABLE copy
SELECT 部分结构
FROM 表名
WHERE 条件
仅仅复制某些字段
CREATE TABLE copy
SELECT 某些字段
FROM 表名
WHERE 0;

数据类型简要介绍

整形

一般都是int/integer,如果插入超过最大值的话,插入的就是最大值

浮点型

float (M, D) double(M, D)

定点型

dec (M,D)或者decimal(M,D)

M代表小数部分+整数部分,D代表小数部分
M和D都可以省略
dacimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度

定点型的精确度较高,如果要求插入数值的精度较高如货币运算等则考虑使用

字符型
在这里插入图片描述
日期型
在这里插入图片描述
常见约束

六大约束
NOT NULL:非空,用于保证该字段的值不能为空比如姓名、学号等
DEFAULT:默认,用于保证该字段有默认值比如性别
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空比如学号、员工编号等
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空比如座位号
CHECK:检查约束【mysql中不支持】比如年龄、性别
FOREIGN KEY :外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值

约束的添加分类:

列级约束:六大约束语法上都支持,但外键约束没有效果
表级约束:除了非空、默认,其他的都支持

列级约束

在后面加上约束
create table idcard(
id int PRIMARY KEY,
name varchar(20)NOT NULL,
列名 类型 长度 约束
)

表级约束

constraint 约束名 约束类型(字段名) 约束名可加可不加
create table idcard(
id int ,
name varchar(20),
CONSTRA工NT idpk PRIMARY KEY(id) ,
CONSTRA工NT namenl NOT NULL(id) ,
)

添加外键

表级约束添加外键
CONSTRA工NT fk_从表名_主表名 FOREIGN KEY(从表的外段)REFERENCES 主表名 (主表的字段)
CONSTRA工NT fk_stuinfo_major FOREIGN KEY(majorid)REFERENCES major (id)
修改表时添加外键
ALTER TABLE stuinfo ADD CONSTRA工NT fk_stuinfo_major FOREIGN KEY(majorid)REFERENCES major (id)
多了一个ALTER TABLE 从表名 ADD
要求在从表设置外键关系
从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
主表的关联列必须是一个key(一般是主键或唯—)
插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表

删除约束

删除非空约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 NULL;
删除默认约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 类型 ;
删除主键
ALTER TABLE 表名 DROP PRIMARY KEY;
删除唯—
ALTER TABLE 表名 DROP INDEX 字段名;
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY fk_stuinfo_major(添加时的名);

主键和唯一的区别

都保证了唯一性,但主键一个表至多有一个,唯一可以有多个,主键不允许为空,唯一可以为空。

标识列

又称为自增长列 含义:可以不用手动的插入值,系统提供默认的序列值
特点:
标识列必须和主键搭配吗?不一定,但要求是一个key
一个表可以有几个标识列?至多一个
标识列的类型只能是数值型
标识列可以通过SET auto_increment_increment=3;设置步长可以通过手动插入值,设置起始值

3,TCL(事物控制语言)
事务:

一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行.

事务的特性

原子性:一个事务不可再分割,要么都执行要么都不执行
一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态
隔离性:—个事务的执行不受其他事务的干扰
持久性:一个事务一旦提交,则会永久的改变数据库的数据.

事务的使用

步骤1:开启事务
set autocommit=0;
start transaction;可选的,不写也行
步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
步骤3:结束事务
comnit;提交事务
rollback;回滚事务

数据库事务的隔离

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段之后,若T2回滚,T1读取的内容就是临时且无效的.
不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段.之后,T1再次读取同一个字段,值就不同了.
幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行之后,如果T1再次读取同一个表,就会多出几行.
数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,使它们不会相互影响,避免各种并发问题.
一个事务与其他事务隔离的程度称为隔离级别.数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱.

MySQL支持4种事务隔离级别.MySQL默认的事务隔离级别为: REPEATABLE READ
在这里插入图片描述
视图

视图:MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果
应用场景:
多个地方用到同样的查询结果
该查询结果使用的sql语句较复杂

创建视图

create view 视图名
as
查询语句;

优点

重用sql语句
简化复杂的sql操作,不必知道它的查询细节
保护数据,提高安全性

视图和表的区别

视图没有占有内存,视图一般不被修改。

4,变量,存储过程和函数

变量

系统变量

变量由系统提供,不是用户定义,属于服务器层面
分为全局变量和会话变量

自定义变量

用户自定义的变量
分为用户变量和局部变量

用户变量

针对于当前会话(连接)有效,同于会话变量的作用域
声明并初始化
SET @用户变量名=值;
或SET @用户变量名:=值;
或SELECT e用户变量名:=值;
赋值(更新用户变量的值>
方式一:
SET@用户变量名=值;
或SET @用户变量名:=值;
或SELECT @用户变量名:=值;
方式二:
SELECT 字段 INTO @变量名
FROM 表;

局部变量

仅仅在定义它的begin end中有效,其它同用户变量一样

存储过程

含义:一组预先编译好的SQL语句的集合,理解成批处理语句提高代码的重用性

优点

提高代码的重用性
简化操作
减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

创建语法

DELIMITER $
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的sQL语句)
END $
注意:
参数列表包含三部分
参教模式 参数名 参数类型
举例:
IN stuname VARCHAR(20)
参数模式:
IN:该参数可以作为输入,也就是该参数需要调用方传入值
OUT:该参数可以作为输出:也就是该参数可以作为返回值
INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值
如果存储过程体仅仅只有一句话,BEGIN END可以省略
存储过程体中的每条SQL语句的结尾要求必须加分号,
存储过程的结尾可以使用DELIMITER重新设置
语法:
DELIMITER 结束标记
DELIMITER $

调用语法

CALL 存储过程名(实参列表);

删除语法

drop procedure 存储过程名

函数

含义:一组预先编译好的SQL语句的集合,理解成批处理语句提高代码的重用性

优点

提高代码的重用性
简化操作
减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率
存储过程:可以有个返回,也可以有多个返回,适合做批量插入、批量更新函数:有且仅有1个返回,适合做处理数据后返回—个结果

函数和存储过程区别:

存储过程;可以有0个返回,也可以有多个返回,适合做批量插入、批量更新
函数:有且仅有1个返回,适合做处理数据后返回一个结果

创建语法

DELIMITER $
CREATE FUNCTION 函数名(参数列表)RETURNS 返回类型
BEGIN
函数体
END $
注意:
参数列表包含两都分:参数名 参数类型
函数体:肯定会有return语句,如果没有会报错
如果return语句没有放在函数体的最后也不报错,但不建议

调用语法

SELECT 函数名(参教列表)

删除语法

drop FUNCTION 函数名


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值