关于约束 和事务、DDL与 DML语句

这篇博客详细介绍了MySQL数据库的基本操作,包括表的创建、数据类型选择、数据的插入、更新和删除。重点讨论了约束的重要性,如非空约束、唯一性约束和主键、外键约束。此外,还深入探讨了事务的概念及其四大特性,特别是事务的隔离性,对于数据库管理和维护具有重要指导意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、表的创建

建表的语法格式 
	oreate table 表名(字段1 数据类型,字段2,数据类型);
	
	表名:建议以t_ 或者 tbl_开始,可读性强。见名知意。
	字段名:见名知意。
	表名和字段名都属于标识符。

2、mysql中的数据类型

varchar(最长255)
		可变长度的字符串
		比较智能,节省空间。
		会根据实际的数据长度动态分配空间。

		优点:节省空间
		缺点:需要动态分配空间,速度慢。

	char(最长255)
		定长字符串
		不管实际的数据长度是多少。
		分配固定长度的空间去存储数据。
		使用不恰当的时候,可能会导致空间的浪费。

		优点:不需要动态分配空间,速度快。
		缺点:使用不当可能会导致空间的浪费。

	int(最长11)
		数字中的整数型。等同于java的int。

	bigint
		数字中的长整型。等同于java中的long。

	float	
		单精度浮点型数据

	double
		双精度浮点型数据

	date
		短日期类型

	datetime
		长日期类型

	clob
		字符大对象
		最多可以存储4G的字符串。			
		超过255个字符的都要采用CLOB字符大对象来存储。
	blob
		二进制大对象
		Binary Large OBject
		专门用来存储图片、声音、视频等流媒体数据。
		往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
		需要使用IO流才行。

7、插入数据insert

	语法格式
		insert into 表名(字段名1,字段名2) values(值1,值2);
	* 没有给其它字段指定值的话,默认值是NULL。	
	* inset 语中的字段名可以省略	

8、insert 插入日期

	数字格式化:format
	format(数字,‘格式’)
	
	str_to_date 将字符串varchar类型转换成date类型
		str_to_date('字符串日期', '日期格式')
		str_to_date('01-10-1990','%d-%m-%Y')
		
	date_format 将date类型转换为具有一定格式的varchar类型
		date_format(日期类型数据, '日期格式')

9、修改update

update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;		
	*** 没有条件限制会导致所有数据全部更新。	
	例子:update t_user set name = 'jack', birth = '2000-10-11' where id = 2;	
		
更新所有
	update t_user set name='ab';

10、删除数据 delete

	delete from 表名 where 条件;
	例子:delete from t_user where id = 2;

11、insert 插入多条数据

	语法:insert into 表名(字段名1,字段名2) values(),(),(),();

12、表的复制

	create table 表名 as select * from 被复制的表名;

13、快速删除数据 truncate

delete语句删除数据的原理
	表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
	这种删除缺点是:删除效率比较低。
	这种删除优点是:支持回滚,后悔了可以再恢复数据!!!
		
truncate语句删除数据原理
	这种删除效率比较高,表被一次截断,物理删除。
	这种删除缺点:不支持回滚。
	这种删除优点:快速。
	
用法:truncate table 表名;
删除的是数据表还在

drop table 表名;
删除表

14、对表的结构进行增删改

	alter
	create
	drop

15、约束

约束包括
	非空约束 not null
	唯一性约束 unique
	主键约束 primary key  (PK)
	外键约束 foreign key	(FK)
字段名 数据类型	 约束条件;

16、非空约束 not null

  not null只有列级约束,没有表级约束

17、唯一性约束 unique

唯一性约束的字段不能重复,但可以为null

17、主键约束

任何一张表都应该有主键,没有主键,表无效
	id int primary key,  //列级约束
	primary key(id)  // 表级约束	
	primary key(id,name)//复合主健	
	一张表,主键约束只能添加1个。(主键只能有1个。)	
	id int primary key auto_increment, //auto_increment表示自增,从1开始,以1递增!	

18、 外键约束(foreign key,简称FK)*****

19、事务

一个事务其实就是一个完整的业务逻辑。
就是批量的DML语句同时成功,或者同时失败!
只有DML语句才会有事务这一说,其它语句和事务无关		

在事务的执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中。
在事务的执行过程中,我们可以提交事务,也可以回滚事务。	

提交事务
	清空事务性活动的日志文件,将数据全部彻底的持久化到数据库表中
	提交事务标志着,事务的结束。并且是一种全部成功的结束
	
回滚事务		
	将之前的所有DML语句操作全部撤销,并且清空事务性活动的日志文件
	事务回滚标志着,事务的结束。并且是一种全部失败的结束。
	
提交事务:commit;
回滚事务:rollback;
		
mysql当中默认自动提交事务		
关闭自动提交机制 start transaction 	

20、事务包括四个特性

A:原子性
	说明事务是最小的工作单元。不可再分

c:一致性
	所有的事务要求,在同一个事务 当中,所有操作必须同时成功
	以保证数据的一致性。
I:隔离性
	A事务和B事务之间具有一定的隔离
D:持久性
	事务最终结束的一个保障。事务提交,就相当于将没保存的数据保存到硬盘上

21、事务的隔离性

	读未提交:read uncommitted(最低的隔离级别)
		事务A可以读取到事务B未提交的数据
		存在问题
			脏读现象:读到了脏数据
			
	读已提交:read committed (提交之后才能读到)
		事务A只能读到事务B提交之后的数据
			解决了脏读现象
		存在的问题
			不可重复读取数据
	
	可重复读:repeatable read (提交之后也读不到,永远读到的是刚开启事务时的数据)
		事务A开启之后,不管多久,每一次在事务A中读取到的
		数据都是一致性的。即使事务B将数据已经修改,并且提交可,
		事务A读到的数据还是没有发生变化,这就是可以重复读
		
		解决了不可重复读数据的问题			

		存在的问题
			出现幻影读
			每一次读取到的数据都是幻象,不够真实
		
	串行化/序列化:serializable 最高隔离级别
		最高隔离级别,效率最低。解决了所有问题
		这种隔离级别表示事务排队,不能并发
		读取到的数据都是最真实的,并且效率最低。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值