MYSQL(约束,视图)

目录

数据类型

数值型

整数

小数

字符型

较短的文本

较长的文本

其他

日期型

约束

六大约束

not null

default

primary key

unique

check

foreign key 

列级约束

表级约束

标识列

事物控制语言

事物

事物的属性

事物的创建

隔离机制

事物回滚的保存点

视图

创建

修改

删除

查看

更新


数据类型

数值型

整数

如何设置无符号和有符号

create table tab_int(
t1 int,#有符号
t2 int unsigned #无符号
)

 特点

1.如果不设置无符号有符号,默认是有符号

2.如果插入的数值超出了整型的范围,会报异常,并且插入临界值

3.如果不设置长度,会有默认长度

4.长度代表了显示的最大宽度,如果不够,会用0在左边填充(搭配zerofill使用)

小数

特点:

1.M:整数部位加小数部位的大小

   D:小数部位

如果超过范围,则插入临界值

2.M和D都可以省略

      如果是decimal,则M默认为10,D默认为0

      如果是float和double,则会根据插入的数值的精度来决定 

字符型

较短的文本

特点:

1.char是固定长度的字符,比较耗费空间,效率高

2.verchar是可变长度的字符,比较节省空间,效率低 

较长的文本

text,blob

其他

1.binary和verbinary用于保存较短的二进制

2.enum用于保存枚举

3.set用于保存集合

日期型

特点:

1.timestamp和实际时区有关,更能反应实际的日期,而datetime只能反映出插入时的当地地区

约束

六大约束

not null

非空,用于保证该字段的值不能为空

default

默认,用于保证该字段有默认值

primary key

主键,用于保证该字段的值具有唯一性,并且非空

一个表中最多有一个

unique

唯一,用于保证该字段的值具有唯一性,可以为空

一个表中可以有多个

check

检查约束

foreign key 

外键,用于限制两个表的关系

在从表添加外键约束,用于引用主表中某列的值

1.从表的外键列的类型和主表的关联列的类型要求一致或兼容

2.主表的关联列必须是一个key(一般是主键或唯一)

3.插入数据时,先插入主表再插入从表

  删除数据时,先删除从表再删除主表

列级约束

六大约束语法上都支持,但外键约束没有效果

create table tab(
id int primary key,#主键
name verchar(20) not null,#非空
gender char(1) check(gender='男'or gender='女'),#检查
seat int unique,#唯一
age int default 18,  #默认
majorid int foreign key references major(id)#外键
)

表级约束

除了非空、默认其他都支持

create table stu_tab(
id int,
gender char(1),
seat int,
age int,
majorid int,
constraint pk primary key(id),#主键
constraint uq unique(seat),#唯一
constraint ck check(gender='男'or gender='女'),#检查
constraint fk foreign key(majorid) references major(id)#外键
)

标识列

又称为自增长列,可以不动手插入值,系统提供默认的序列值

#创建表时设置标识列
CREATE TABLE a_test(
  id INT PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(20)
);

特点:

1.标识列必须和key搭配

2.一个表最多只有一个标识列

2.标识列的类型只能是数值型

4.标识列可以通过 set auto_increment_increment=3;设置步长。

5.可以通过手动插入值设置起始值。

事物控制语言

事物

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

事物的属性

原子性、一致性、隔离性、持久性

事物的创建

隐式事物:事物没有明显的开始和结束的标记

比如:insert、update、delete语句

显式事物:事物具有明显的开始和结束的标记

前提:必须先设置自动提交功能为禁用

步骤一:开启事务
set autocommit=0;
start transaction;可选的

步骤二:编写事物中的sql语句
语句

步骤3:结束事物
commit;提交事物
rollback;回滚事物

隔离机制

对于同时运行的多个事物,当这些事物访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。

数据库提供的4种事物隔离级别:

1.READ UNCOMMITTED:允许事物读取未被其他事务提交的变更,脏读、不可重复度、幻读的问题都会出现。

2.READ COMMITED:可避免脏读。但不可重复度和幻读可以出现。

3.REPEATABLE READ:可以避免脏读和不可重复度,不可避免幻读。

4.SERIALIZABLE(串行化):所有问题都可避免,但性能十分低下。

mysql默认的隔离级别为第三种。

#查看当前的隔离级别
SELECT @@tx_isolation;

#设置当前mysql连接的隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

#设置数据库系统全局的隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

事物回滚的保存点

#保存点
SET autocommit=0;
START TRANSACTION;
DELETE FROM a_test
WHERE id=4;
SAVEPOINT a;#设置保存点
DELETE FROM a_test
FROM id=3;
ROLLBACK TO a;#回滚到保存点

SELECT * FROM a_test;

视图

创建

一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存的sql逻辑,不能保存查询结果

#案例:查询平均工资最低的部门信息
#1.创建视图
CREATE VIEW a 
AS 
SELECT department_id,AVG(salary)
FROM employees
GROUP BY department_id
ORDER BY AVG(salary)
LIMIT 1;

#2.查看视图
SELECT * FROM a;

#使用
SELECT d.*
FROM `departments` d
JOIN a
ON d.`department_id`=a.`department_id`;

好处:

1.重用sql语句

2.简化复杂的sql操作,不必知道它的查询细节

3.保护数据,提高安全性

修改

#修改
CREATE OR REPLACE VIEW a
AS
SELECT last_name 
FROM employees

方式二
ALTER VIEW a
AS
SELECT *
FROM employees;

删除

#删除
DROP VIEW a;

查看

#查看
SHOW CREATE VIEW a;

更新

#更新
1.插入
INSERT INTO a VALUES('a');
2.修改
UPDATE a SET last_name='b' 
WHERE last_name='a';
3.删除
DELETE FROM a
WHERE last_name='b';

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值