Mysql_sql语法_mysql多表_JBDC基础笔记整理
第一部分MySql
一、 一些基本的概念
DDL:数据定义语言
create,drop,alter..
DCL:数据控制语言
grant,if…
DML:数据操纵语言
insert,update,delete…
DQL:数据查询语言
select
1.MySQL 数据库存储的方式
一台电脑安装了mysql , 这台电脑就是MySql数据库服务器
2.命令行打开mysql的指令: mysql -u root -p 回车输入password
3. sql的概念:结构化查询语言
第二部分 sql单表语法
二、sql对数据库的操作
1. 创建数据库:create database 库名 [character set 字符集collect 校对规则]
2. 查看数据库:
l 查看数据库服务器中所有的数据库:show databases;
l 查看某个数据库的定义信息: show create database 库名
3. 修改数据库
l alter database 库名 character set 字符集 collect 校对规则
4. 删除数据库:
l Drop database 库名
5. 切换数据库
l Use 库名;
l 查看正在使用的数据库: select database();
三、sql对数据库表的操作
6. Create table 表名(字段名称字段类型(长度) 约束,字段名称字段类型(长度) 约束…);
l 单表约束分类:
l 主键约束:primary key
l 唯一约束:unique
l 非空约束:not null
7. Sql查看表
l 查看数据库下所有的表
Show tables;
l 查看某个表的结构信息
n Desc 表名;
8. Sql删除表
Drop table表名;
9. Sql 修改表
l 添加列:alter table 表名 add 列名 类型(长度) 约束;
l 修改列的类型 alter table 表名 modify 列名 类型(长度) 约束;
l 删除列: alter table 表名 drop 列名;
l 修该列的名称: alter table 表名 change 旧列名 新列名 类型(length) 约束;
l 修改表名 : rename table 表名 to 新名;
l 修改表的字符集 : alter table 表名 character set字符集;
四、sql对数据库表的记录修改;
10. 添加表的记录
l 添加指定列
n Insert into 表名 (列名1,列名2…) values (值1,2,……)
l 添加所有列
n Insert into 表名 values (值1, 值2 ,……最后一个列的值)
11. 添加中文记录
insert into user values(null,'张三','123',23,'1993-09-01');
直接向数据库中插入中文记录会出现错误!!!
解决方法:
Show variables like'%character%'; --**查看数据库中与字符集相关参数:**
需要将MySQL**数据库服务器中的客户端部分的字符集改为gbk。**
找到MySQL*的安装路径:my.ini文件,修改文件中[client]下的字符集
* 重新启动MySQL的服务器
services.msc
12. Sql修改表的记录
1) Update 表名 列名 = 值where 条件; 修改指定列
2) Update 表名 列名 = 值; 修改所有列
3) Update 表名 列名= 值 , 列名 = 值 where 条件; 按条件修改多个列
13. Sql删除表的记录
1) Delect from 表名 [where 条件]
i. 如果没有条件 就是删除整个列
ii. 如果有条件 按条件删除指定的列
删除表中的记录有两种做法:
delete fromuser;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML
truncatetableuser;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。
事务不能控制DDL
14. Sql查询表的记录
1) Select */查询的列 from 表名 ;
2) Select */查询的列 from 表名 where 条件;
3) Select */查询的列 from 表名 where 条件and/or /not 条件 ;
4) Select */查询的列 from 表名 where 条件> < = >= <= <>
5) Select */查询的列 from 表名 where 条件in ( ); 范围查询
6) Select */查询的列 from 表名 where name like ‘李_’/’李%’/’%李%’ / ‘%李’; 李开头的两个字/李开头的 / 包含李的 / 李结尾的
15. Sql查询表的记录
1) 排序查询:Orderby asc/desc 升序/降序
2) 分组统计查询: sum() avg() max() min() count()
3) 分组查询: group by
4) where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
16. S(select)…F(from)…W(where)…G(groupby)…H(having)…O(order by);
第三部分 多表和事务
多表
17. 外键约束
alter table employee addforeign key (dno) references dept (did);
18. 三种关系
一对多
多的一方创建外键指向一的一方的主键
多对多
创建中间表,中间表至少有两个元素分别指向两个表的主键
一对一
为表的外键设置唯一约束
或者把两个表的内容写到一个表里
19. 多表查询-连接查询
1) 内连接(inner可以省略)
Theway1:Select * from biao1inner join biao2 on 关联条件;
Theway2:select * from biao1 ,biao2 where 关联条件;
2) 外连接(outer可以省略)
左外连接: select * from biao1left outer join biao2 on 关联条件;
右外连接: select * from biao rightouter join biao2 on 关联条件
3) 交叉连接
20. 多表查询-子查询: 一个查询语句条件需要依赖另一个查询语句的结果。
in 满足什么条件
exists 如果后面的存在 前面的语句就会执行 有点像if
any 大于任意一个就ok 就是大于最小的一个
all 大于括号内所有的 就是i大于最大的一个
21. 多表查询的思想
从里面的条件往外分析.一层一层的找条件;
事务
一、 事务的概念:
事务:指的是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么全都成功,要么全都失败。
二、 事务的特性
原子性:事务的不可分割,组成事务的各个逻辑单元不可分割。
一致性:事务执行的前后,数据完整性保持一致。
隔离性:事务执行不应该受到其他事务的干扰。
持久性:事务一旦结束,数据就持久化到数据库中。
三、 事务的几个方法
1.开启事务:start transaction;
2.提交事务Commit;
3.回滚事务rollback
四、 事务的隔离级别
如果不考虑隔离性,引发一些安全问题:
隔离性:一个事务的执行,不应该受到其他事务的干扰。
如果不考虑隔离性(一个事务执行受到其他的事务的干扰),引发一些安全问题,主要体现在读取数据上:
脏读:一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
虚读/幻读:一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
五、 设置事务隔离级别
readuncommitted :脏读,不可重复读,虚读都有可能发生
readcommitted :避免脏读。但是不可重复读和虚读是有可能发生
repeatableread :避免脏读和不可重复读,但是虚读有可能发生。
serializable :避免脏读,不可重复读,虚读。
JDBC基础
JDBC的开发流程
step1: 注册驱动
com.mysql.jdbc.Driver
step2: DriverManager.getConnection(url,username,passname) .sql包下
step3: 编写SQL语句,以前的值的地方用占位符代替 ? 就是占位符
Step 4: 预编译SQL 获得可执行SQl语句的对象 PreparedStatement ps =conn.prepareStatement(String sql);
step 5: 为SQL设置值,用值代替SQL语句中的 ? ps.setXXX();
step 6: 执行sql语句
如果是查询: ResutSet rs =ps.executeQuery();
遍历结果集
while(rs.next()){
rs.getXXX(String columnName)
//columnName 默认是表地段名,如果取了别名就用别名
}
如果是增删改:
int num = ps.executeUpdate();
// num代表影响行数
step 7: 释放资源
工具类的抽取
Properties prop = new properties();
prop.load(newFileInputStream(String path))
prop.getProperty(String key)
属性文件:properties
key =value;
1.释放资源时候方法的重载.
2.db.properties 里面存的内容是以 键值对存在的
url=jdbc:mysql:///students
不需要"";
背后的思想: 程序的解耦和;