本帖最后由 小石姐姐 于 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();
|