黑马程序员技术交流社区
标题: [石家庄校区]mySQL学习笔记 [打印本页]
作者: 韶华白首zy 时间: 2018-5-9 15:28
标题: [石家庄校区]mySQL学习笔记
本帖最后由 小石姐姐 于 2018-5-11 10:08 编辑
MySQL概述
A:MySQL概述
数据库就是一个文件系统,通过标准的SQL语句获取数据.是一种关系型数据库.就是存储的是实体之间的关系
B;服务器的概述
硬件:指的就是一台计算机
软件:需要在这台电脑上安装数据库服务器.
C:存储方式的描述
一台数据库服务器中会创建很多数据库(一个项目就会创建一个服务器).在数据库中会创建很多张表(一个实体就会创建一个表).在表中会创建很多记录(一个对象的实例就会添加一个新的记录).
D:SQL的分类
(1)DDL数据定义语言
Create创建 drop删除 alter
(2)DCL数据控制语言
Grant授权 if
(3)DML数据操纵语言
Insert插入 update更新 delete删除
(4)DQL数据查询语言
Select查询
SQL的使用
A:对数据库进行操作
(1)创建数据库:create database 数据库名称[character set 字符集 collate 字符集校对规则] 括号内的内容可以使用默认值
(2)查看数据库:
查看数据库服务器中所有的数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名称;
(3)修改数据库
alter database 数据库名称 character set 字符集 collate 校对规则;
(4)删除数据库
drop database 数据库名称;
(5)其他操作
切换数据库:use 数据库名称;
B:对表进行操作
(1)创建表
create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长 度) 约束…);
一个实体对应一个表,一个实体属性对应表的一个字段
Java中的类型 | |
| Tinyint/smallint/int/biging |
| |
| |
| |
| |
| Date/time/datetime/timestamp *2 |
| |
注*1:char:代表的是固定长度的字符或字符串,如果未填满规定的长度,则会用空格将其补全
Varchar:代表的是长度可变的字符或者字符串,但是不能超过定义的长度否则报错
注*2:date:只有日期
Time:只有时间
Datetime:既有时间又有日期,如果没有存入数值,则会使用null存入表单中
Timestamp:既有时间又有日期,如果没有存值,则会调用系统当前时间存入表单中
约束:作用就是保持数据的完整性
主键约束:primary key 主键约束默认就是唯一 非空的
唯一约束:unique
非空约束:not null
(2)创建表的语句
create database web_test1;//创建库
use web_test1;//切换到创建的库
create table user(
id int primary key auto_increment,//自动增长,会自动填充
username varchar(20) unique,
password varchar(20) not null,
age int,
birthday date
);
(3)查看表
查看某个数据库下的全部表:show tables;
查看某个表的结构信息:desc 表名;
(4)删除表
drop table 表名;
(5)修改表
添加列:
alter table 表名 add 列名 类型(长度) 约束;
修改列的类型,长度和约束:
alter table 表名 modify 列名 类型(长度) 约束;
删除列:
alter table 表名 drop 列名;
修改列名称:
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表名
rename table 表名 to 新的表名;
修改表的字符集
alter table 表名 character set 字符集;
C:对表记录进行操作 *********
(1)添加记录
向表中插入某些列:
insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
向表中插入所有列:
insert into 表名 values (值1,值2,值3…);
注意事项
1.值的类型与数据库中表列的类型一致。
2.值的顺序与数据库中表列的顺序一致。
3.值的最大长度不能超过列设置最大长度。如果列的约束为不能为空,则必须 添加内容.若约束为唯一,则不能相同
4.值的类型是字符串或者是日期类型,使用单引号引起来。
(2)修改记录
语法
update 表名 set 列名=值,列名=值 [where 条件];
注意事项
1.值的类型与列的类型一致。
2.值的最大长度不能超过列设置的最大长度。
3.字符串类型和日期类型添加单引号。
修改某一列的所有值(一般不用)
update user set password = 'abc';
按条件修改数据****
update user set password = 'xyz' where username = 'bbb';//xyz修改后的值 where后面跟的是条件,就是要修改的地方
按条件修改多个列
update user set password='123',age=34 where username='aaa';
(3)删除记录
语法:
delete from 表名 [where 条件];
注意事项
1.删除表的记录,指的是删除表中的一行记录。
2.删除如果没有条件,默认是删除表中的所有记录。
删除某一条记录
delete from user where id = 2;
删除表中的所有记录
delete from user;
删除表中的记录有两种做法:
delete from user;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的,可以回滚,恢复数据
t runcate table user;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的,不能回滚不能恢复数据
(4)删除记录******
基本查询
语法:
select [distinct] *|列名 from 表 [条件];
(5)查询记录*******
语法:
select [distinct] *|列名 from 表 [条件];
条件查询:
使用where子句:<,>,>=,<=,!=
Like模糊查询 %站位符 _只能占一位
In:范围查询
And,or,not关联条件
Order by 排序查询 asc/desc 升/降
Sum(),max(),min(),count(),avg()聚合函数
Group by字段名称;分组查询
(6)书写的顺序
S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
(7)执行的顺序
From..where..group by..having..select..distinct..union..order by
多表
(1)外键约束
作用:用来保证数据的完整性
分类:外键约束,非空约束,唯一约束
(2)表与表之间的关系
分类:一对一,一对多,多对多
(3)创建表之间的关系
一对多:由多的一方的某一字段创建外键,指向单一的一方相关联的主键
多对多:需要创建中间表,中间表至少有两个字段创建外键分别指向两个两个表相关联 的主键
一对一:完全可以直接写入一张表中,如果非要分开来写,则要把一方当做是多的一方,创建外键指向单一一方,不过需要将外键设置为unique防止重复
(4)多表查询
隐式内连接:
select * from 表1,表2 where 关联条件;
左式外连接
select * from 表1 left outer join 表2 on 关联条件;
右外连接
直接把左外连接两个表的位置互换即可
(5)子查询
a带in的子查询
例:select * from classes where cid in (SELECT cno FROM student WHERE birthday > '1991-01-01');
在括号中查找条件,只有满足括号中的条件,前面的内容才会执行
B带exists的子查询
例:select * from classes where exists (SELECT cno FROM student WHERE birthday > '1991-01-01');
若括号中的记录存在则前面的内容将会执行,相当于if
C带any的子查询
例:SELECT * FROM classes WHERE cid > ANY (SELECT cno FROM student )
任意一个只要满足一个就会执行前面
D:带all的子查询
例:SELECT * FROM classes WHERE cid > ALL (SELECT cno FROM student)
括号里必须全部满足才能执行前面
事务
A:概念:
指的是逻辑上的一组操作,组成这个操作的逻辑单元,要不全部成功,要不全部失败
B:基本操作
开启事务:
start transaction;
提交事务
commit;
回滚事务
rollback;
C:事务的特性:
原子性:事务不可分割,组成事务的逻辑单元不可分割
一致性:事务执行前后,数据保持一致
隔离性:事务执行不会受到其他事务干扰
持久性:事务一旦结束,数据就会持久的保存在硬盘中
D:事务中的一些安全问题
脏读:
一个事务读到了另一个事务未提交的数据,导致查询结果不一致
不可重复读:
一个事务读到了另一个事务已经提交的update的数据,导致多次查询结果不一致。
虚读/幻读:
一个事务读到了另一个事务已经提交的insert的数据,导致多次查询结果不一致。
E:事务的隔离级别
read uncommitted :脏读,不可重复读,虚读都有可能发生
read committed :避免脏读。但是不可重复读和虚读是有可能发生
repeatable read :避免脏读和不可重复读,但是虚读有可能发生。
serializable :避免脏读,不可重复读,虚读。
安全级别越高执行效率就越低
JDBC
A:概述:
是一种用于执行SQL语句的Java API,可以为多种数据库提供统一的访问,是一种基准,根据此可以创建更高级的接口与工具
B:DriverManager
驱动管理类,加载驱动Class.forname(“com.mysql.jdbc.Driver”);
获得链接:
Connecton conn =DriverManager.getConnectio(“String url,String user,Sting password”)
Url:数据库的连接地址
User:用户名
Password:数据库密码
例:jdbc:mysql://localhost:3306/web_test3
jdbc :连接数据库的协议
mysql :是jdbc的子协议
localhost :连接的MySQL数据库服务器的主机地址。(连接是本机就可以写成localhost),如果连接不是本机的,就需要写上连接主机的IP地址。
3306 :MySQL数据库服务器的端口号
web_test3 :数据库名称
url如果连接的是本机的路径,可以简化为如下格式:
jdbc:mysql:///web_test3
C:connection
与数据库连接的对象
执行SQL语句对象:
Statement :执行SQL(在开发中一般不会使用)
CallableStatement :执行数据库中存储过程
PreparedStatement :执行SQL.对SQL进行预处理。解决SQL注入漏洞。(在开发中会使用)
PreparedStatement ps = conn.prepareStatement(String sql);
D:statemnt
执行Sql
执行SQL的方法
boolean execute(String sql);
执行查询,修改,添加,删除的SQL语句。
ResultSet executeQuery(String sql);
执行查询(执行select语句)。
int executeUpate(String sql);
执行修改,添加,删除的SQL语句。(返回的int值 指的是影响了几行数据)
E,resultset
结果集
Boolean next();
例子:while(xx.next())
结果集获取可以使用结果集中的:
getXXX();方法通常都会有一个重载的方法。
getXXX(int columnIndex);
getXXX(String columnName);
F,JDBC的配置信息提取到配置文件
格式:扩展名是.properties
内容:key=value
XML文件
G:格式举例
//先将工具类设置好 工具类为JDBCUtils
public void demo3(){
//设置好需要用的变量
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs =null;
try{
//获得链接
conn = JDBCUtils.getConnection();
//编写sql
String sql = "select * from user";
//预编译sql
ps = conn.prepareStatement(sql);
//设置参数
//执行sql
rs = ps.executeQuery();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |