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 最高隔离级别
最高隔离级别,效率最低。解决了所有问题
这种隔离级别表示事务排队,不能并发
读取到的数据都是最真实的,并且效率最低。