数据库xxx语言:
DDL:定义
DML:操作
DQL:查询
DCL:控制
show tables; -- 查看数据库中的所有表
describe student(数据库名); -- 显示数据库中的所有的表的信息
create database westos(数据库名); -- 创建数据库
exit; -- 退出连接
-- 单行注释
/* 多行注释
*/
delete和truncate的区别
create table `text`(
`id` int(5) not null auto_increment,
`coll` varchar(20) not null,
primary key(`id`)
)enging = innodb default charset = utf8 -- innodb 为表引擎
insert int `test`(`coll`) values (`1`),(`2`),(`3`)
delete form `test` -- 不会影响自增,即下次id为4开始
truncate table `test` -- 自增会归零
- InnoDB 自增列会从1开始(存在内存当中的,断电即失)
- MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)
where条件子句
作用:检索数据中 符合条件 的值
搜索的条件由一个或者多个表达式组成
运算符 | 语法 | 描述 |
and && | a and b a && b | 逻辑与 两者为真,结果为真 |
or || | a or b a || b | 逻辑或 只要其一为真,结果为真 |
Not ! | not a ! a | 逻辑非 a为真,结果为假 |
select studentNo,studentResult form result
-- 查询成绩在95~100之间
select studentNo,studentResult form
where studentResult >= 95 and studentresult <= 100
-- 模糊查询(区间查询)
select studentNo,studentResult form result
where studentResult between 95 and 100
-- 除了1000号学生之外的同学的成绩
select studentNo,studentResult form result
where studentResult != 1000
-- != not
select studentNo,studentResult form result
where not studentResult = 1000
模糊查询(比较运算符)
运算符 | 语法 | 描述 |
is null | a is null | 如果操作符为null,结果为真 |
is not null | a is not null | 如果操作符不为null,结果为真 |
between | a between b and c | 若a在b和c之间,结果为真 |
like | a like b | SQL匹配,如果a匹配b,结果为真 |
in | a in(a1,a2,a3) | 假设a在a1,或者a2...其中的某一个值中,结果为真 |
事务
ACID原则
- 原子性():要么都成功,要么都失败
- 一致性():事务前后的事务完整性要保持一致
- 持久性():事务一旦提交则不可逆,被持久化到数据库中
- 隔离性():事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离。
隔离导致的一些问题
- 脏读:指一个事务读取了另外一个事务未提交的数据。
- 不可重复读:在一个事务内读取表中的某一行数据,多次读取的结果不同。(这个不一定是错误,只是某些场合不对)
- 虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
数据库的规约,三大范式
- 第一范式(1NF)
原子性:保证每一列不可再分
- 第二范式(2NF)
前提:满足第一范式
每张表只描述一件事情
- 大三范式(3NF)
前提:满足第一范式和第二范式
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
规范性和性能的问题
关联查询的表不得超过三张表
考虑商业化的需求和目标,(成本和用户体验等)数据库的性能更加重要
再规范性能的问题的时候,需要适当的考虑一下规范性
故意给某些表增加一些冗余的字段。(从多表查询中变为单表查询)
故意增加一些计算列(从大数据量降为小数据量的查询:索引)
JDBC程序
import java.sql.*;
public class JDBCDemo {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//用户信息和url
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
String name = "root";
String password = "";
//连接成功,数据库对象connection代表数据库
Connection connection = DriverManager.getConnection(url,name,password);
//执行SQL的对象statement 执行SQL对象
Statement statement = connection.createStatement();
//执行SQL的对象去执行SQL,可能存在结果,查看返回结果
String sql = "SELECT * FROM users";
//返回的结果集
ResultSet resultSet = statement.executeQuery(sql);
//释放连接
resultSet.close();
statement.close();
connection.close();
}
}
步骤总结:
- 加载驱动
- 连接数据库DriverManager
- 获得执行SQL的对象Statement
- 获得返回的结果集
- 释放连接