九万五千一关于mysql的续集3

本文详细介绍了MySQL中的分页查询(limit)及其用法,包括如何取结果集的一部分和通用分页方法。此外,讲解了数据表的创建、字段数据类型选择、数据插入、更新、删除操作,以及主键和唯一约束的概念。事务作为数据库的重要概念,其ACID特性、隔离级别和在实际操作中的应用也进行了阐述。最后,提到了外键约束和事务在数据库操作中的重要性。
摘要由CSDN通过智能技术生成

limit(分页查询)

是MySQL中的特有,其他数据库中没有,不通用

作用:取结果集中的部分机制

案例:取工资前五名的员工:

select ename,sal from emp by sal desc limit 0,5

select ename,sal from emp by sal desc limit 5//如果不说,默认前面是0

limit是sql语句中最后一个执行环节

select 5

。。。

from 1

。。。

where 2

。。。

group by 3

。。。

having 4

。。。

order by 6

。。。

limit 7

。。。

通用分页mysql

每页显示pagesize条记录:

第pageno页:(pageno-1)*pagesize,pagesize

pagesize:每页显示多少条记录

pageno显示第几页

创建表:

建表语句:create table 表名(

字段名1 数据类型

字段名2 数据类型

字段名3 数据类型

};

关于mysql当中字段的数据类型

int

bigint

char定长字符串

varchar 可变长字符串

BLOB(二级制大对象,存储图片 视频等信息)

CLOB字符大对象(储存较大文本)

Float

Date 日期型 年月日

DateTime 年月日 时分秒

当一个字段中的数据长度不发生改变时:是用定长的char

当一个字段的数据长度不确定,采用varchar,如简介,姓名

表明在数据库中一般建议以:t_或者tbl _开始

创建学生表:

学生信息包括:

学号:bigint

姓名:varchar

性别:char

班级编号:int

生日:char

creater table t_student(

no bigint,

name varchar(255),

sex char(1),

classno varchar(255),

brith char(10)

);

上述为建表语句

向表中插入数据

insert语句插入数据

语法格式: intsert into 表名(字段名1,字段名2,字段名3)values(值1,值2,值3)

表的复制

语法:

create table 表名 as select语句

将查询结果当做表创建出来

将查询结果插入到一张表中

insert into dept1select * from dept;

select *from dept;

修改数据:update

语法格式:

update 表名 set 字段名1=值1,字段名2=值2.。。。where 条件

update dept set loc=‘上海’,dname=‘renshibu’ where deptno=10;

删除数据

语法格式:

delete from 表名 where 条件

删除10部门数据

delete from deptl where deptno=10;

怎么删除大表

truncate table empl;//表被截断,不可回滚,永久丢失

约束:

非空约束(not null):约束的字段不能为null;

唯一约束(unique):约束的字段不能重复

主键约束(primary key)约束的字段不能重复也不能为null

检查约束(check)目前mysql不支持

唯一约束:

drop table if exists t_user; \ \如果以前有表,先删除原来的表。

create table t_user(

id int

username varchar(255) unique\ \对username进行唯一性约束

);

insert into t_user values(1,'zhangsan');

insert into t_user values(2,'zhangsan');//这种情况下就会报错,因为username有两个zhangsan

案例,给两个或者多个列添加unique

drop table if exists t_user; \ \如果以前有表,先删除原来的表。

create table t_user(

id int

username varchar(255),

usercode varchar(255),

unique(username,usercode)

);//两个字段连起来不能重合

两者之间的区别

drop table if exists t_user; \ \如果以前有表,先删除原来的表。

create table t_user(

id int

username varchar(255) unique,

usercode varchar(255)unique

);//每个都不能重合

#####

主键约束:

drop table if exists t_user;

create table t_user(

id int primary key,//这个是主键约束,带有主键约束的字段叫主键字段

username varchar(255) ,

email varchar(255)

);

insert into t_user (id,username,email)values(1,‘zs’,‘zs123@123.com’)//输入的是主键值

insert into t_user (id,username,email)values(1,‘ls’,‘ls123@123.com’)

insert into t_user (id,username,email)values(1,‘ww’,‘ww 123@123.com’)

根据以上测试得出:id是主键,因为添加了主键约束,主键中数据不能为null,也不能重复

主键的作用:

表的设计三范式,第一范式要求任何一张表都应该有主键

主键的作用:主键值是这行记录在这张表当中的唯一标识(身份证号)

主键的分类

根据主键的字段数量来划分

单一主键(最常用的)

复合主键(多个字段联合起来添加一个主键约束)

自然主键

mysql提供主键值自增

drop table if exists t_user;

create table t_user(

id int primary key auto_increment,//id字段自动维护一个自增的数字,从一开始,以1递增

username varchar(255)

);

外键约束

建立表格时 使用两张表,比如,一张班级表t_class,一张学生表t_student

t_student中的classno字段引用t_class表中的cno字段,学生表叫子表,t_class叫父表

顺序要求

删除数据,先删子表,再删父表

添加数据,添加父表,再加子表

创建表,先建父表,再子表

删除表,先子后父

drop table if exists t_student;

drop table if exists t_class;

create table t_class(

cno int ,

cname varchar(255),

primary key(cno)

);

create table t_student(

sno int,

sname varhcar(255),

classno int,

foreign fey(classno) references t_class(cno)//这就是外键约束

);

外键可以为null

事务(transaction)

什么是事物:是一个完整的业务逻辑单元,不可再分

比如:银行账户转账,从a账户向b账户转账10000,需要执行两条update语句

update t_cat set balance=balance-10000 where actno='act-001';

update t_cat set balance=balance+10000 where actno='act-002';

以上的两条dml语句必须同时成功或者同时失败,那么就需要使用数据库的事务机制。

和事务有关的语句只有:dml语句

通常,一个事务需要多条dml语句共同联合而成

开启事务机制

执行insert语句-->insert(执行成功之后,把这个执行记录到数据库的操作历史当中,并不会向文件中保存一条数据,不会真正修改硬盘上的数据)

执行update语句-->update(这个执行也是记录一下历史操作不会真正修改硬盘上的数据)

执行delete语句-->这个执行也是记录一下历史操作不会真正修改硬盘上的数据

提交事务或者回滚事务

事务两个语句:commit(提交),rollback(回滚)

事务的特性:

A原子性:事务是最小的工作单元

C一致性:事务必须保证多条dml同时成功或者失败

I:隔离性:事务a与事务b之间具有隔离

D持久性:持久性说的是最终数据必须持久化到硬盘文件中,事务才算是成功的结束

关于事务之间的隔离性

第一级别:读未提交(read uncommitted)

对方事务还没有提交,我们当前事务可以读取对方未提交的数据

读未提交存在脏读现象dirty read 表示读到了脏的数据

第二级别:读已提交(read committed)

对方事务提交之后数据我方可以读到

取消了脏读现象,但是问题在于,不可以重复读

第三级别:可重复读 (repeatable read)

这种隔离级别解决了:不可重复读问题

问题在于:读取到的数据是幻象

第四级别:序列化读

解决了所有问题

效率低 需要事务排队

mysql数据库默认的隔离级别:可重复读

演示事务

mysql事务默认情况下自动提交(只要执行任意一条dml语句则提交一次)

怎么关闭自动提交

start transaction;

演示:

drop table if exists t_user

create table t_user(

id int primary key auto_increment,

username varchar(255)

);

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值