Java学习_mysql

一.数据库

SQL 对大小写不敏感:SELECT 与 select 相同。

1.数据库

数据库存储数据特点
	1)存储空间非常大,可以存储百万条,千万条甚至上亿条数据,用户可以对数据库中数据进行新增,查询,更新,删除等操作
	2)数据独立性高
	3)实现数据共享
	4)减少数据的冗余度
	5)通过数据库里面"事务"--->实现数据的一致性以及维护性!

2.市面上常见的数据库

数据库分为两大类:
	1.关系型数据库:Mysql,SqlServer,Oracle
		SqlServer,Oracle:收费
		Oracle:中大型公司使用居多
		Mysql:免费产品,中小型公司使用居多
	2.非关系型数据库:Redis,Memcache,MongoDb,Hbase	

3.数据库的三大范式

  1. 第一范式 1NF

    数据库表的每一列式不能再拆分的原子,每一列都是单独的,没有复合列。
    
  2. 第二范式 2NF

    1. 一张表描述一件事情
    2. 非主键字段必须依赖于主键
    
  3. 第三范式 3NF

    1. 非主键字段间不能产生传递依赖
    

二.DDL(data definition language)语句的基础语法

DDL语句:数据库定义语句 库和表的基本操作

2.1库的操作

1.查询所有库:show databases;
2.创建库的语法
	2.1 create database if not exists 库名; 如果没有这个库则创建该库
	2.2 create database 库名;
3.查看指定库的字符集格式
	show create database 库名;
4.修改库的字符集
	alter database 库名 default(可以省略) character set 字符集格式;
5.删除库
	5.1 drop database if exists 库名; 如果有该库则直接删除
	5.2 drop database 库名; 直接删除
6.使用库 
	use 库名;

2.2表的操作

1.创建表的语法
	create table 表名(
		字段名称1 字段类型1,
		字段名称2 字段类型2,
		字段名称3 字段类型3,
		.....
		字段名称n 字段类型n,
	);
2.查询表的结构
	desc 表名;
3.修改表的字段类型
	alter table 表名 modify 字段名称 修改后的字段类型; 
4.修改字段名称
	alter table 表名 change 以前的字段名称 修改后的字段名称 字段类型;
5.修改表
	5.1添加表的字段
		alter table 表名 add 字段名称 字段类型; 
	5.2删除表中某个字段
        alter table 表名 drop 字段名称; 
    5.3修改表名
        alter table 表名 rename to 新表名; 
        rename table 表名 to 新表名; 
6.查看表的字符集
	show create table 表名;
7.修改表的字符集
	alter table 表名 character set 字符集格式;
8.复制表
	8.1复制表结构
		create table 新表名 like 表名;
	8.2复制表的全数据
        CREATE TABLE 新表名 
        AS 
        SELECT * FROM 表名;
9.删除表
	drop table if exists 表名;如果存在删除表
	drop table 表名;

三.DML(Data Manipulation Language)语句:数据库操作语句

3.1操作表的记录(插入,修改,删除,查询)

  1. 插入数据,没插入的值为null

    1.插入一行
    	insert into 表名 values(值1,值2...);
    2.插入多行
    	inser into 表名 values(值1,值2...),values(值1,值2...)..;
    3.插入一行部分字段
    	insert into 表名(字段名称1,字段名称2.,等部分字段)values(值1,值2,值3...);
    4.插入多行多条数据,部分字段
    	insert into 表名(字段名称1,字段名称2.,等部分字段)values(值1,值2,值3...),(值1,值2,值3...),(...);
    
  2. 修改数据

    1.一次修改一个数据
    	updata 表名 set 字段名称= 值 where 字段名称= 值;(根据where查询)
    2.一次修改多个数据
    	updata 表名 set 字段名称= 值1,字段名称= 值2,.. where 字段名称= 值;
    
  3. 删除表的记录

    1.带条件删除
    		delete from 表名 where 字段名称 = 值;
        	delete from 表名 where 字段名称1 = 值1 and 字段名称1 = 值1 ...;
    2.删除全表数据
    		只删除数据:delete from 表名; 
    		删除数据和表结构:truncate table 表名; 
    
  4. 表的查询

    1.查询全表: 
    		使用 select * from 表名;
    		查询指定字段并给别名:select ID '编号',name '姓名' from 表名;
    		查询指定字段去重:select distinct 字段 from 表名;
    2.带条件查询
    		2.1where 比较运算符 <=,>=,<,>,!=(在mysql使用 <>)
    					and  && /or  ||
    					between 值1 and  值2
    		2.2where 模糊条件 like关键字
    			语句格式:select 字段列表 from 表名 where 字段名称 like '%xx%';
    			%:表示任意字符
    			_:表示一字符
    		2.3排序查询 order by,升序是asc,降序是desc
    			单独使用语法:select 字段列表 from 表名 order by 字段名称 排序规则;
    			与where语句使用时先满足where条件,在排序
    			语法:select 字段列表 from 表名 where 条件 order by 字段名称 排序规
    			则,字段名称2 排序规则2;
    		2.4聚合函数查询  结果是单行单列,可以sql语句嵌套
    			count():统计表的数据,如果字段为空不会统计
    			语法:select count(字段名称) from 表名;
    			max(列名称):最大值
    			语法:select max(列名称) from 表名;
    			min(列名称):最小值
    			语句:select min(列名称) from 表名;
    			avg(列名称):平均值
    			语句:select avg(列名称) from 表名;
    			sum(列名称);求和
    			语句:select sum(列名称) from 表名;
    		2.5分组查询:group by 
    			语句:select 字段列表 from 表名 group by 分组的字段名称;
    			注意:分组查询里面可以select 查询分组字段 
    	    		分组group by后面不能使用聚合函数
    	    		where条件和group by,where条件在group by前面;先满足where条件在
    	    		参与分组
    		2.6筛选查询:having
    			having后面可以跟聚合函数,having在group by后面,where在group by前面
    		2.7分页查询:limit where在limit前面
    			方式一;select 字段列表 from 表名 limit 起始行数,每页显示的条数;
    			方式二:select 字段列表 from 表名 limit 值;
    			复合查询:有where条件,还有limit,where在limit前面
    			起始行数= (当前页码数-1)*每页显示的条数;
    

四.正则表达式的使用

  1. 通配符

    \w匹配任何单词字符,包括下划线,等效于[a-zA-z0-9_]
    \d匹配数字字符
    .匹配任意单个字符,但换行符除外
    ?零次或一次匹配前面的字符
    +一次或多次匹配前面的字符
    ^匹配字符串的开始位置
    $匹配字符串的结束位置
    \b匹配一个单词边界,在匹配单词时使用
    \B非单词边界匹配,在匹配单词内部字符时使用
    \r匹配一个回车符。等价于 \x0d 和 \cM。
    \s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
    \S匹配任何非空白字符。等价于 \f\n\r\t\v。
  2. 示例

    1.使用正则表达式
    select * from users where id regexp '1+';
    SELECT * FROM student WHERE `name` REGEXP '[张\S\S]+';
    
    2.使用%,可表示以某字符开始,结束,或包含某字符
    select * from users where name like '李%';
    select * from users where name like '%李';
    select * from users where name like '%李%';
    
    3.使用_可以替换任意字符
    select * from users where name like '李_';
    

五.mysql数据类型

1. int,int(int类型的字符数)
	int:默认11位,
	int(int类型的字符数):int(3):  1---->001
2. varchar(字符长度):字符串类型
	姓名  varchar(20)---->最大取到20
	在mysql中字符串写的时候可以使用双引号也可以是单引号
3. date:日期类型--->仅仅表示日期 如'2022-2-23'
4. datetime:日期+时间
5. timestap:时间戳-->当前插入数据或者修改/删除数据的即时时间
6. double:小数类型
	double(3,2): 小数是3位数,小数点后保留2位
7. clob:大字符类型,某个表中某个字段--->使用clob来存储大文本
8. blob:大字节类型:存储大图片文件---大字节类型

六.约束

约束:约束用户操作数据库的一种行为

not null指示某列不能存储 NULL 值。
unique保证某列的每行必须有唯一的值。
primary key /not null /unique设置主键
foreign key设置外键
check保证列中的值符合指定的条件
default规定没有给列赋值时的默认值
  1. check示例

    create table persons
    (
    p_id int not null,
    check (p_id>0)
    )
    

5.1默认约束 default

1. 特点:当没有插入这个字段,默认约束起作用
2. 添加默认约束
	创建表时:字段名称 字段类型 default '默认'
	添加默认约束:alter table 表名 modify 字段名称 字段类型 default '默认';
3. 删除默认约束:修改字段的类型
	alter table 表名 modify 字段名称 修改后的字段类型;

5.2非空约束 not null

1. 特点:当前这个值不能为null,不能直接添加数据给一个null
2. 添加非空约束:
	创建表的时候在指定字段后面加入not null
	sql语句:alter table 表名 modify 字段名称 字段类型 not null;
3. 删除空约束:修改字段的类型
	alter table 表名 modify 字段名称 修改后的字段类型;

5.3唯一约束 unique

1. 特点:当前值不能为空
2. 添加唯一约束:constraint(声明) 
	创建表的时候在指定字段后面加入 unique
	sql语句:alter table 表名 add constraint 唯一约束索引名称 unique(列名);
3. 删除:
	alter table 表名 drop index 索引名(没给就是默认列的名称)

5.4主键约束 primary key

1. 特点:非空且唯一
2. 添加:
	创建表的时候在指定字段后面加入 primary key
	sql语句:alter table 表名 add primary key(列名称);
3. 删除:
	alter table 表名 drop primary key; 

5.5自增长约束 auto_increment

注意:自增只与插入的记录的条数有关,修改后的值不会自增.

1. 特点:一般自增长约束都是在主键字段上,保证唯一
	指定插入数据的值,下次在之前的值上继续自增1.
2.查找数据库表中最后一次自增主键的值(mysql自带函数)
	select last_insert_id();
3.添加:
	创建表时添加:字段名后加入auto_increment

5.6外键约束 foreign key

1. 特点:外键作用的表是从表,另一张表是主表.
2. 添加:
	2.1创建表时添加:
		constraint -- 声明
		外键名 --起名  主表名_从表名_fk
		foreign key(从表的字段名称)
		references -- 关联
		主表名(主键字段的名称)
	2.2sql语句添加:
		alter table 表名 add constraint 外键名 foreign key(从表的字段名称) 
		references 主表名(主键字段名称);
3.删除:
	有外键时直接修改或者删除主表数据,前提需要让从表的数据跟主表没有关联,才可以删除该表
	sql删除:
		alter table 表名 drop foreign key 外键名

5.7级联操作 cascade

1. 特点:当修改/删除主表的数据,从表数据随之改动
	级联删除/级联修改 on delete cascade /on update cascade
2. 添加:
	2.1创建表时添加:
		constraint -- 声明
		外键名 -- 起名  主表名_从表名_fk
		foreign key(从表的字段名称)
		references -- 关联
		主表名(主键字段的名称)
		on update cascade
		on delete cascade
	2.2sql语句添加:
		alter table 表名 add constraint 外键名 foreign key(从表的字段名称)
        references 主表名(主键字段名称) on update cascade on delete cascade;

七.多表查询

  1. 内连接

    • 隐式内连接:用where条件连接

      select 
      	字段列表
      from
      	表1,表2...
      where
      	连接条件;
      
    • 显示内连接:inner join

      select
      	字段列表
      from 
      	表名1
      (inner) join  -- inner可以省略
      	表名2
      on 
      	连接条件;
      
  2. 外连接

    • 左外连接:查询左表全部数据+两表的交集信息

      select
      	字段列表
      from
      	左表名
      left (outer) join  -- outer可以不写
      	表名2
      on
      	连接条件;
      
    • 右外连接:查询右表全部数据+两表的交集信息

      select
      	字段列表
      from
      	右表名
      right (outer) join  -- outer可以不写
      	表名2
      on
      	连接条件;
      

八.事务

  1. 概念

    在一个业务中执行多个SQL,这多个SQL,要么同时执行成功,要么同时执行失败。

  2. 使用

    1. 开启
    	start transaction;
    2. 执行业务操作(增删改)
    3. 如果出现问题,回滚
    	rollback;
    4. 提交事务(如果不提交,数据知识临时改变,无法永久更新)
    	commit; 
    
  3. 事务的隔离级别

    • 查看隔离级别
    1. mysql5
    	select @@tx_isolation;
    2. mysql8
    	select trasaction_isolation;
    
    • 设置隔离级别

      set global transaction isolation level 隔离级别;
      
    1. read uncommitted 读未提交
    会出现脏读
    脏读:是事务管理最严重的的问题:一个事务读取到另一个没有提交的事务
    
    2. read committed 读已提交
    有效防止脏读,出现新的问题:不可重复读
    事务(当前这个事务提交)多次读取另一个提交事务的前后的数据不一样
    3. repeatable read 可重复读 (mysql默认级别)
    
    4. serializable 串行化
    一个事务读取到另一个一个没提交的事务,数据是查不到的
    四个级别
    	安全性:从低到高
    	效率性:从高到低
    
  4. 事务的特点:ACID

    原子性,一致性,隔离性,持久性

    • 原子性(Atomicity):在使用事务管理的时候,执行多个SQL,要么同时成功,要么同时失败
    • 一致性(Consistency):高并发的时候,需要保证事务多次读写的数据一致性
    • 隔离性(Isolation):事务和事务间是独立的,相互不影响
    • 持久性(Durability):事务一旦提交,对数据的影响是持久性的
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值