数据库

1.基本操作

1.1命令行操作
mysql -u username -p+password; --连接数据库
flush privileges; --刷新权限
show databases; --查看所有的数据库
use databasename; --切换数据库
show tables; --显示当前数据库所有表信息
describe databasename; --显示该数据库中所有表信息
create database name; --创建数据库
exit; --退出链接
DESC tablename;--显示表的基本结构
1.2四大数据库语言

DDL (database definition language数据库定义语言)

DML (database manipulation language数据库操作语言)

DQL (database query language数据库查询语言)

DCL (database control language数据库控制语言)

1.3数据库操作语句

创建数据库

create database [if not exists] name

删除数据库

drop database [if exists] name
1.4列的数据类型

数值型:

tinyint 1个字节

smallint 2个字节

mediumint 3个字节

int 4个字节

float 4个字节

double 8个字节

decimal 字符串形式的浮点数

字符型:

char 字符串0~255

varchar 可变长字符串0~65535

tinytext 微型文本

text 文本串

日期型:

date Year-Mouth-Day 日期格式

time Hour-Minute-Second 时间格式

datetime 日期+时间

timestamp 时间戳1970.1.1~now 的毫秒数

null型:

未知类型、无值类型

1.5数据库的字段属性

Unsigned:无符号整数,不能为负数

zerofill:0填充

comment:注释

default:默认值

auto_increment:每执行语句一次 ,该值加一

version : 乐观锁

is_delete 伪删除

gmt_create 创建时间

gmt_update 修改时间

1.6建表操作
create table [if not exists]`name`(
`列名`+类型+字段属性+注释
)engine='' default charset=''
1.7数据库引擎

INNODB 默认引擎,安全性高,支持事务处理,多表操作

MYISAM 早期引擎,节约空间,速度较快

MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 比较小 较大,约为2倍
1.8修改和删除表字段
--修改表名
alter table oldname rename as newname
--增加表字段
alter table tablename add 新的列名+类型
--修改表字段
alter table tablename modify 列名 + 新加的字段属性 --不能重命名
alter table tablename change 新列名 + 字段属性 --重命名
--删除表字段
alter table tablename drop 列名
--删除表(如果存在则删除)
drop table if exists tablename

2.MySQL数据管理

2.1外键
--创建表时加入外键
foreign key(关联字段) references 主表(关联字段) key `约束名` `约束字段`
constraint `约束名` foreign key (`约束字段`) references `主表``关联字段`
--添加外键约束
ALTER TABLE 从表
ADD CONSTRAINT 约束名 FOREIGN KEY (关联字段) references 主表(关联字段);
2.2DML数据库操作语言

insert

insert into 表名 ([列名1....]) values ('值'...),('值'...)--多行插入括号隔开

update

update 表名 set 列名=新值 [选择条件 where ...]

delete

delete from 表名 [选择删除列条件]--删除条件对应的列
truncate 表名 --清空表,索引、键值等不会变,自增回归零
2.3DQL数据库查询语言

select语句顺序

基本查询

select [distinct去重] 字段或* [as 别名] from 表名
--字符串追加函数concat(a,b) eg:
select concat('姓名:',name) from student

where条件子句

--逻辑查询
where 列名 (=,>=,<=,!=,<>..)
--模糊(范围)查询
where 列名 between .. and ..
--模糊匹配
where 列名 like '%'
--列表查找
where 列名 in ('',''...)

联表查询

inner join --求交集-(where、on)
left join --交集+左集-(on)
right join --交集+右集 -(on) eg:
select studentname,subjectResult
from student as s
inner join result as r
on s.num = r.num

自连接

--将一张表当做两张表内部联表查询,eg:
select a.name,b.name
from student as a,student as b
where a.childId = b.fatherId
--查询先行课或者父子类

分页和排序

--排序:升序ASC 降序DESC eg:
select name
from student
order by id ASC
--分页: limit 起始行 每页行数
select name
from student
limit 0,5 --从0行开始,每五行一页

子查询

--可以在where条件语句中嵌入另一个查询
where id = (
select id ...
)

MySQL函数

ABS(-8)         --绝对值
ceiling() --向上取整
floor() --向下取整
rand() --获取一个0~1的随机数
sign() --判断该数符号
char_length() --返回该字符串的长度
concat('',''..) --字符串拼接
instr('','a') --返回a在字符串中的索引
reverse() --字符串反转
current_date()
curdate --返回当前日期
now()
localtime() --返回当前时间
sysdate() --系统时间

聚合函数

函数名称 功能
count() 计数count(字段)会忽略null,count(*)和count(1)
sum() 求和
avg() 平均值
max() 最大值
min() 最小值

在聚合函数下,可以用某个字段进行分组求聚合,关键字为group by 列字段

如果要在分组过滤的基础上在进行条件筛选,此时不能使用where,需要使用having

select AVG(grade) as 平均分 from result
group by subjectId
having 平均分>80

数据库级别的MD5加密

update 表名 set 列名 = MD5(列名)       --加密
insert into 表名 values(MD5(123456)) --插入的同时加密

3.事务

3.1 事务ACID原则

ACID

Atomicity原子性:统一成功、统一失败

Consistency一致性:事务前后整个系统系统逻辑运算结果不变

Durability持久性:事务一旦提交永久性更改

Lsolation隔离性 :多个事务之间相互隔离,事务隔离容易产生以下几种问题

  • 脏读(读入未提交事务的数据)、不可重复度(读入其他事务修改的数据)、虚读(读入其他事务插入的数据)....

为此在标准SQL规范中,定义了4个事务隔离级别,不同的隔离级别对事务的处理不同,分别是:

1、读未提交(Read Uncommited),该隔离级别允许脏读取(一个事务读取到了另一个事务未提交的数据),其隔离级别最低

2、授权读取也称为已提交读(Read Commited),授权读取只允许获取已经提交的数据。授权读取允许不可重复读取。

3、可重复读(Repeatable Read)

就是保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻是一致的,因此该事务级别禁止不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影数据,是指在一个事务中读取到了其他事务插入的数据、一般是行影响

4、串行化

是最严格的事务隔离级别,它要求所有事务被串行执行,即事务只能一个接一个的进行处理,不能并发执行。

3.2转账事务实例
--mysql默认开启事务自动提交
set autocommit = 0 --关闭自动提交
start transaction --标记事务开始
... --sql语句
--执行成功,事务提交
commit
--执行失败,事务回滚(默认到最开始的地方)
rollback
--事务结束,开启自动提交
set autocommit = 1

4.索引

4.1索引的分类

帮助MySQL高效获取数据的数据结构,show index from 表名(显示该表的所有索引信息)

  • 主键索引(primary key)
  • 唯一索引(unique key)
  • 常规索引(key/index)
  • 全文索引(fulltext index)
4.2添加索引
alter table 表名 add fulltext index 索引名(字段名)
4.3索引底层

CodingLabs - MySQL索引背后的数据结构及算法原理

5.数据库用户管理

6.规范数据库设计

6.1三大范式

第一范式:保证列信息不可再分

第二范式:具备第一范式,每列都只与主键相关

第三范式:具备第一、二范式,每列都与主键直接相关

7.JDBC

7.2JDBC程序
public class JDBCtest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1.加载驱动(JDBC5.0后不需要加载)
Class.forName("com.mysql.jdbc.Driver");
//2.用户信息和url
//协议+主机名+端口号+数据库名+?+参数
//?+参数(支持中文编码、设置编码utf8、设置安全连接)
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&charactorEncoding=utf8&useSSL=false";
String userName = "root";
String password ="123456";
//3.链接数据库,获取数据库对象(可以进行事务提交、回滚)
Connection connection = DriverManager.getConnection(url,userName,password);
//4.获取数据库执行对象
Statement statement = connection.createStatement();
//5.数据库操作
String sql = "Select * from student";
ResultSet set = statement.executeQuery(sql);//获取查询结果链表
while(set.next()){
System.out.print(set.getObject("id")+" == ");
System.out.println(set.getObject("name"));
}
//6.释放连接
set.close();
statement.close();
connection.close();
}
}

最新文章

  1. Leetcode 75. Sort Colors
  2. javascript 百度地图API - demo
  3. PHP遍历、删除文件夹中的所有文件
  4. GLM in SPM
  5. React 点击按钮显示div与隐藏div,并给div传children
  6. Libfilth(一个滤波器C库)使用
  7. 14.Android之Layout布局学习
  8. linux2.6内核compat_ioctl函数
  9. reader,字符流
  10. ListView为什么用setOnItemClick这个方法和onTouch这个方法有冲突
  11. 数据结构(主席树):HDU 4729 An Easy Problem for Elfness
  12. poj2027简单题
  13. Android模拟器启动异常
  14. hadoop tez 结合搭建以及测试异常解决
  15. 洛谷P3205 [HNOI2011]合唱队 DP
  16. C#延时函数
  17. 分布式监控系统Zabbix--完整安装记录 -添加apache监控
  18. 使用Struts,前台提交给后台的汉字为乱码
  19. JNI编程实现(Linux)
  20. 多媒体指令(AVX加速数组求和)

热门文章

  1. 不允许还有Java程序员不了解BlockingQueue阻塞队列的实现原理
  2. do-while循环的使用
  3. LOJ2325「清华集训 2017」小Y和恐怖的奴隶主
  4. Java函数式编程:一、函数式接口,lambda表达式和方法引用
  5. golang中的一些实用功能
  6. 靶机: easy_cloudantivirus
  7. 前后端分离项目(九):实现&quot;添加&quot;功能(后端接口)
  8. Python 学习思路 思维导图 Xmind
  9. Jenkinsfile 同时检出多个 Git 仓库
  10. XTDrone和PX4学习期间问题记录(一)