JAVA mysql

创建数据库:

  • 语法:create database 数据库名称 (后面的可省略) character set 字符集 collate 字符集校对规则;
    在这里插入图片描述

查看数据库:

  • 语法:查看数据库服务器中所有的数据库:show databases;
    在这里插入图片描述
  • 查看某个数据库的定义信息:show create database 数据库名称;

修改数据库:

  • alter database数据库名称character set字符集collate校对规则;

删除数据库:

  • drop database 数据库名称;

其他数据库操作:

  • 切换数据库:use 数据库名称;
  • 查看当前正在使用的数据库名称:select database();

sql创建表:

  • create table 表名称(字段名称 字段类型(长度) 约束, 字段名称 字段类型(长度) 约束…);
    字段类型:
    一个实体对应一个表,一个实体属性对应表的一个字段。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 约束:保证数据的完整性
  •  单表约束分类:
      			主键约束   primary key  默认唯一非空的
                  唯一约束  unique	
                  非空约束   not null
    

建表:

create database db1;
use db1;
create tab1e user(
id int primary key auto_increment,
username varchar (20) unique,
password varchar (20) not nu11,
age int,
birthday date
);

查看表:

  • 查看某个数据库下的所有表:show tables;
  • 查看某个表的结构信息:desc 表名;

删除表:

  • drop table 表名;

修改表:

  • 修改表:添加列

     alter table 表名 add 列名 类型(长度) 约束;
    
  • 修改表:修改列类型,长度和约束

  •  alter table 表名 modify 列名 类型(长度) 约束;
    
  • 修改表:删除列

  •  	alter table 表名 drop 列名;
    
  • 修改表:修改列名称

  •  	alter table 表名 change 旧列名 新列名 类型(长度) 约束;
    
  • 修改表:修改表名

  •  rename table 表名 to 新表名;
    
  • 修改表:修改表的字符集

  •  alter table 表名 character set 字符集;
    

对数据库表的记录进行操作:

添加表的记录

  • 向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
  • 向表中插入所有列:insert into 表名 values (值1,值2,值3…);

值的类型是字符串或者是日期类型,使用单引号引起来。

在这里插入图片描述
修改表的记录:

  • update 表名 set 列名=值,列名=值 [where 条件];
  • 在这里插入图片描述

删除表的记录:

  • delete from 表名 [where 条件];
    在这里插入图片描述
    在这里插入图片描述

查看表的记录:

  • 基本查询:
  •  select [distinct]*|列名 from 表 [条件];
    
 select * from exam;//查询所有
 select English,math from eaxm;//查询两列
 select distinct English,math from eaxm;//不显示重复的值

在这里插入图片描述
在这里插入图片描述

条件查询:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查询成绩在60~80之间的记录。

SELECT  *  FROM  SC 

WHERE  GRADE  BETWEEN  60  AND  80

排序查询:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分组统计查询:

  • sum()
    在这里插入图片描述
  • count()
    在这里插入图片描述
  • max()/min()
    在这里插入图片描述
  • avg()
    在这里插入图片描述
  • group by
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

数据库备份与还原:

备份:
cmd中打开

mysqldump -u -p 要备份的数据库 > 备份的地址

还原:
需要重新创建一个数据库,

  • 第一种再重开一个cmd输入以下命令
mysql -u root -p 要还原的数据库 < 备份的地址
  • 第二种切换到该数据库 输入:
 source 备份的地址

多表查询 外键约束

外键需要删除主表的关联记录才能删除从表的对应记录。

create table dept(
	did int primary key auto_increment,
	dname varchar(20)
);

insert into dept values (null,'市场部');

insert into dept values (null,'人事部');

insert into dept values (null,'教研部');

create table employee(
	eid int primary key auto_increment,
	ename varchar(20),
	salary double,
	birthday date,
	sex varchar(20),
	dno int
);

insert into employee values (null,'张三',8000,'1999-09-01','男',3);
insert into employee values (null,'李四',5000,'1999-09-01','男',1);
insert into employee values (null,'王五',6000,'1999-09-01','男',2);
insert into employee values (null,'赵六',9000,'1999-09-01','男',3);

//员工表上添加外键约束
alter table employee add foreign key (dno) references dept(did);
//设置外键为非空
alter table employee modify dno int not null;

表与表之间的关系

在这里插入图片描述
一对多的关系
在这里插入图片描述
多对多的关系
需要创建中间表,中间表中至少两个字段,分别作为外键指向多对多双方的主键
在这里插入图片描述
一对一的关系

唯一处键对应:
假设是一对多,在多的一方创建外键指向.的一方的主键,将外键设置为unique。
主键对应:
将两个表的主键建立对应关系即可。

在这里插入图片描述

多表查询

连接查询
交叉连接 cross join

  • 查询到的是两个表的笛卡尔积
    • 语法:
    •  select  * from 表1 cross join 表2;
       或者
       selcet * from 表1,表2;
      

外连接outer join(outer 可以省略)

  • 左外连接

    •    会得到左表的全部信息,就算右表没有也会显示
      
    •  select * from 表1 left outer join 表2 on 关联条件;
      
  • 右外链接

    •   与左相反		 
      
    •  select * from 表1 right outer join 表2 on 关联条件;
      

内连接 inner join(inner 可以省略)
两个表交集的部分

 - 显示内连接:在sql中显示调用inner join关键字
 - select from * 表1 inner join 表2 on 关联条件;
 - 隐式内连接:在sql中没有调用inner join关键字
 - select from * 表1 ,表2 where 关联条件;

子查询
子查询:一个查询语句条件需要依赖另一个查询语句的结果。

 带in的子查询
 从classes里面找符合条件的记录
 SELECT * FROM classes WHERE cid IN(SELECT cno FROM student WHERE birthday > '1991-01-01');

 带exists的子查询
 如果条件成立就执行where前面的语句
 SELECT* FROM classes WHERE EXISTS (SELECT cno FROM student WHERE birthday > '1991-01-01');

 带any的子查询
 取括号里面最小的,即大于最小的
 SELECT * FROM classes WHERE cid > ANY (SELECT cno FROM student);

 带all的子查询
 大于最大的
 SELECT * FROM classes WHERE cid > ALL (SELECT cno FROM student);

事务

事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
在这里插入图片描述

  • 事务特性:
    •  原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。
      
    •  一致性:事务执行的前后,数据完整性保持一致。
      
    •  隔离性:事务执行不应该受到其他事务的干扰。
      
    •  持久性:事务一旦结束,数据就持久化到数据库中。
      

隔离级别
如果不考虑隔离性〈一个事务执行受到其他的事务的干扰),引发一些安全问题,主要体现在读取数据上:
脏读: 一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读: 一个事务读到了另一个事务已经提交的update 的数据,导致多次查询结果不一致。
虚读/幻读: 一个事务读到了另一个事务已经提交的insert 的数据,导致多次查询结果不一致。

  • 设置事务的隔离级别: 安全性从低到高,效率从高到低

    •   read uncommitted :脏读,不可重复读,虚读都有可能发生
      
    •   read committed:避免脏读。但是不可重复读和虚读是有可能发生
      
    •  repeatable read:避免脏读和不可重复读,但是虚读有可能发生。
      
    •   serializable:避免脏读,不可重复读,虚读。(串行,只有当另一事务结束,当前事务才能获取结果)
      
  •  设置事务的隔离级别SETSESSION TRANSACTION ISOLATION LEVEL隔离级别;		
    
  •  查看当前的隔离级别 SELECT @@tx_isolation;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值