mysql 基础知识

本文介绍了SQL的基本数据操作,包括插入、删除、更新和查询数据,以及如何修改表结构。此外,还详细讲解了数据库事务的概念,如ACID特性,事务的隔离级别,以及并发事务可能引发的问题。同时,提到了如何处理这些问题,如设置事务隔离级别。

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

//一次性添加一条数据
//语法:insert into 表名 values (全部字段的值);
insert into st2 values (6,'小明',123);

//一次性添加多条数据
//语法:insert into  表名 values (全部字段的值),全部字段的值),(全部字段的值);
insert into st2 values (7,'小明',123),(8,'小明',123),(9,'小明',123);

//删除表里一条数据
//语法:delete from 表名 where 删除的目标;
delete from st2 where id=9;

//删除hello表
//语法:drop table 表名;
drop table hello;

//删除数据库
//语法:drop database  数据库名;
drop database hellodemo;

//更新st2表将id=8修改成10数据,更新的是一个字段
//语法:update 表名 set  修改的数据  where 修改的目标;
update st2 set id=10 where id=8;

//更新多个字段
update st2 set id=11,name='hello' where id=5;

//修改表名
//将st2表修改为student2表名
//语法:alter  table  原始表名 rename (to) 修改后的表名;
alter table st2 rename to student2;// to 可以省略

alter table student2 rename st2;

//修改字段类型
//将st2表的name字段修改为char(30)
//语法:alter table 表名 modify  字段名 字段类型;
alter table st2 modify name char(30);

//添加字段;
//语法:alter  table  表名 add 字段名 字段类型;
alter table st2 add gender char(2);

//删除字段
//删除st2表gender字段
//语法:alter table 表名 drop 字段名;
alter table st2 drop gender;



//查询student表的所有字段和字段的数据
select * from  student;
//查询表的结构
describe student;//等同于 desc student;

//查询没有重复的password
select distinct password from student1;
//删除id=1的数据
delete  from student where id=1;
//在student表中添加数据
insert into student values (1,'xiao',1234567);
//查询student表按id字段排序(默认排序为升序 (asc),降序为(desc))
SELECT * FROM student t ORDER BY id ;

//创建用户hi,密码为123456;
create user 'hi'@'localhost' identified by '123456';
//修改密码为123;
alter user 'hi'@'localhost' identified with mysql_native_password by '123';
//删除用户
drop user 'hi'@'localhost';

//查询权限
show grants for 'hi'@'localhost';



//授权
grant select on hi.* to 'hi'@'localhost';

//撤销权限
revoke all on hi.* from 'hi'@'localhost';

//让id字段中的数据的左边添加2个0;
update student set id=lpad(id,3,'0');//好像只能修改一次,如果要再次修改,就要手动的修改
//修改id=1的username和id
update student set id=1,username='hello' where id=1;

//修改student表id字段的属性
alter table student modify id char(3);
//添加字段
//添加class_id字段,字段类型为int
alter table  student add class_id int ;

//添加主键;
//语法:alter table 表名 add primary key (字段名);
alter table st2 add primary key (id);

//删除主键
//语法:alter table  表名 drop primary key ;
alter table st2 drop primary key ;
//给主键起别名
//语法:alter table 表名 add constraint 别名 primary key ;


//查看表的结构或者叫查询表的所有字段
desc student;

//添加外键
//语法:alter table 表名 add (constraint 别名)  foreign key (表名的外键) reference 关联表(关联表的主键)
alter table student add constraint student_class_id foreign key (class_id) references class3(id);

// on update cascade on delete cascade;添加外键,并且父表修改时,子表也会改变;
alter table student add constraint student_class_id foreign key (class_id) references class3(id) on update cascade  on delete cascade ;

//on update  set null on delete set null; 删除父表的主键时,子表的外键为null;
alter table student add constraint student_class_id foreign key (class_id) references class3(id) on update set null on delete set null ;

//删除外键
alter table student drop foreign key student_class_id;


//多表查询
select * from student,class3 where student.class_id=class3.id;



//创建数据school
create database school;

//内连接
//隐式内连接
select s.name,c.class_name from student s ,class3 c where s.class_id=c.id;

//显示内连接
select s.name,c.class_name from student s inner join class3 c on s.class_id = c.id;//inner 可以省略;

select s.name,c.class_name from student s join class3 c on s.class_id = c.id;



//外连接
//左外连接
select s.*,c.class_name from student s  left outer join class3 c on s.class_id = c.id




//右外连接
select c.class_name,s.* from student s right outer join class3 c on s.class_id=c.id;



//查询事务的状态: 1是自动提交 , 0 是手动提交
select @@autocommit;

//设置事务为自动提交
set @@autocommit=1;
//设置事务为手动提交
set @@autocommit=0;


//开启事务
start transaction or begin ;
//提交事务
commit ;
//回滚事务:当事务执行过程中出错时,用回滚事务来保证数据不被修改。
rollback ;


//事务的四大特性:(ACID)
//1.原子性(Atomicity):事务的最小单位,要么成功,要么失败
//2.一致性(Consistency):在事务前和事务后,两个事务的数据加起来一直都是一样的
//3.隔离性(Isolation):按事务的隔离级别
//4.持久性(Durability):事务一旦提交或者回滚,数据就会永久的写入到数据库中(磁盘中)


//并发事务引发的问题
//1.脏读:一个事务读取到另一个还没提交的数据事务。 就是A事务读取到B事务的数据,但B事务的数据还没提交。
//2.不可重复读:一个事务第一次和第二次读取同一条记录,但读取到的数据不一致。
//原因是因为在事务A第一次和第二次读取之间,事务B对第一次的事务A的数据进行了更新,所以事务A第二次再次读取同一条记录时,数据就是不一样的。
//3.幻读:一个事务按照条件读取时没有读取到相对应的数据,但是当插入数据时,又发现数据已经存在。
//原因是事务A第一次按条件读取没有读取到相对应的数据,事务B就提交了一个事务A的数据。

//事务的隔离级别:
/*
1.Read uncommitted:可以解决脏读,不可重复都和幻读的问题
2.Read committed(Oracle数据库默认的):可以解决脏读,但会出现不可重复都和幻读的问题
3.Repeatable Read(mysql数据库默认的):可以解决脏读和不可重复都的问题,但会出现幻读
4.Serializable(串行化):可以解决脏读,不可重复读和幻读的问题
隔离级别的性能依次降低,安全级别依次提高。

*/
//查看事务的隔离级别
select @@transaction_isolation;

//设置事务的隔离级别为:read uncommitted;
set session transaction isolation level read uncommitted;
//设置事务的隔离级别为:repeatable read;
set session transaction isolation level repeatable read ;



alter table user add class_name varchar(30);


alter table user2 modify id INTEGER ;

select  * from user2 ;

//分页查询
语法:select  * from 表名  limit index(起始页),pageSize(当前页数) pageNum(当前页码) index=(pageNum-1)*pageSize
select  * from user2 limit 2,3;//从第3个开始到第6个结束


select * from student group by id having gender='男' ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值