mysql
- 数据库概念?
a) 它是一个仓库。方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上, 通过数据库管理系统,有效地组织和管理存储在数据库中的数据
- 数据库的五个基本概念:
a) 数据库服务器
b) 数据库
c) 数据表
d) 数据字段
e) 数据行
- 命令行开启关闭事物的命令
- SQL分类
a) 数据定义语言DDL data defintion Language
b) 数据操作语言 DML data Manipulation Language (delete ,update, select)
c) 数据控制语言 DCL data Control language
d) 数据查询语言
- DDL
a) 数据库操作
i. Show databases 展示数据库
ii. Use MySQL 使用数据库
iii. Show tables 展示表
iv. Drop database xxx 删除数据库
b) 数据表操作
i. Create table xx(xxx varchar(32), xxxx varchar(23)); 创建表
ii. Show create table t_student 展示表
iii. Desc t_student 展示表结构
iv. Drop table t_student 删除表
v. Alter table t_student rename tt 表的重命名
c) 数据字段操作
i. Alter table user modify username varchar(64) 修改字段类型
ii. Create table student(username varchar(32), password varchar(32) engine = innoDB default charset=utf-8 设置编码
iii. Alter table student add column name varchar(32) 添加表字段
iv. Alter table student drop column name 删除表字段
v. Alter table student change password passwd varchar(32) 修改字段名
- DML
a) 插入数据
i. Insert into t_table(x, b, x) values( );
ii. Insert into t_table value( )
b) 查询记录
i. Select * from t_table
ii. Select 字段 from t_table
iii. Select distinct 字段 from t_table
iv. Select word from t_table where 条件 and 条件
v. Select 字段 from t_table order by word asc (desc)
vi. Select word from t_table limit number
c) 多表联合查询
i. 首先掌握内外连接,内连接:将表中存在联结关系的字段形成记录集的联结
- Select t.nane, t.age, c.name from teacher t, classes c where t.id = c.teacher_id
ii. 外链接: 会选出其他不匹配的记录,分为外左联结,和外右联结
- 分为左外连接, 和右外连接
- Select t.name, t.age, c.name from teacher t right join classes c on t.id = c.teacher_id;
- Select t.name. t.age, c.name from teacher t left join classes c on t.id =c.teacher_id;
d) 更新记录
i. Update teacher set salary = salary + 1000, age = 19 where id= 1;
e) 删除记录
i. Delete from t_table where id = 1; 删除id为1的
ii. TRUNCATE TABLE 清空数据
- DCL
a) 添加权限
i. 需要知道的一点是: 关于用户的任何操作其实都是操作‘MySQL’ 这个数据库下面的user表,MySQL不是指database manager 而是真的 database
ii. Create user ‘xiaoming’@localhost identified by ‘root’
iii. grant select, insert, delete on test.*to ‘xiaoming’@’localhost’identified by ‘root
iv. revoke all on hibernate.* from ‘xiaogang’@’localhost’;
v. revoke select on *.* from ‘xiaohong’@’localhost’;
vi. drop user xiaohong;
vii. set password for xiaohong@localhost = password(‘123’)
b) 编码问题
i. Set charset default
ii. Set charset gbk
iii. Set charset utf8
c) 数据库备份和恢复
i. Mysqldump –u root –p root hibernate t_user > d:/hello.sql
ii. Mysql –u root –p < C:\backup.sql
- 数据类型
a) 数值类型
i. Tinyint
ii. Smallint
iii. Mediumint
iv. Int
v. Bigint
vi. Unsigned
vii. Float(m,d)
viii. Double(m,d)
ix. Decimal(m,d)
b) 字符串类型
i. Char
ii. Varchar
iii. TINYBLOB
iv. TINYTEXT
v. BLOB
vi. TEXT
vii. MEDIUMBLOB
viii. MEDIUMTEXT
ix. LONGBLOB
x. LONGTEXT
xi. VARBINARY
xii. BINARY
c) 日期时间类型
i. DATE
ii. TIME
iii. DATETIME
iv. TIMESTAMP
v. YEAR
d) 复合类型
e) 无定义类型
- 表引擎
a) MyISAM 不支持事物,表锁, 但是效率很高
b) InooDB 支持事物,行锁, 外键,为了巨大数据量时候最大性能设计的
- 索引
a) 普通索引
i. ALTER TABLE money ADD INDEX(username);
b) 唯一索引
i. ALTER TABLE money ADD UNIQUE(username);
c) 主键索引
i. ALTER TABLE money ADD PRIMARY KEY(id);
d) 全文索引
i. ALTER TABLE money ADD FULLTEXT(content)
ii. 为全局需要搜索的字段添加全局索引
e)
- jdbc的四大金刚
a) DriverManager 用于注册驱动
b) Connection 表示与数据库创建连接
c) Statement 操作数据库的语句
d) Result sql语句的执行结果集
- jdbc的操作步骤
a) 加载驱动
b) 创建连接对象
c) 创建statement对象
d) 通过statement对象执行sql语句
e) 获取执行结果
- jdbc实现增删改查
a)
- 资源的正确关闭
a) 关闭的顺序和开启的顺序要相反
- Sql注入问题
a) 可以编写一个text标签, 通过form表单去获取数据然后展示数据,不经过筛选的, 然后显示结果证明被sql注入了, 然后我们用根据结果进行思考过滤的方式, 也可以用框架进行筛选
- 创建工具类
a) 工具类提供的是开启连接和关闭连接的操作, 之后我们也可以进行sql语句的分类, 变成只有select和update的区别
- 分层的好处
a) 让耦合度降低。让程序独立性,功能的单一性增强, 让代码更加好维护。.
- 分页,要理解为什么要分页,分页的实现原理
a) 一次性显示的数据减少, 让用户看的舒服一点
b) 也让服务器负荷减低
- 批处理,有三个关键的方法实现
a) Statement.AddBatch
b) executeBatch
c) clearBatch
- 事务,有三种业务
a) 开启事务,回滚事务, 提交事务
b) Start transaction --connection. setAutoCommit(false)
c) Connection.Commit
d) Rollback
- 事务的特点
a) 原子性:原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生要么都不发生。
b) 一致性:一致性是指在事物开始之前和事物结束以后,数据库的完整性约束没有被破坏
c) 隔离性:多个事务并发访问时, 事务时间是隔离的,一个事物不应该影响到其他事物运行效果
d) 持久性:是指一个事务一旦提交那么对于数据库中数据的改变就将会是永久的。
- 什么是脏读,不可重复读, 虚读(幻读)
a) 脏读:一个事务读到另一个事务中未提交的数据
b) 不可重复读(强调单个,强调修改):不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同的数据,这是由于查询的时候,系统中的其他事物修改的提交所引起的
c) 幻读(虚读)(强调删除和增加,强调多个数据):是指事务不是独立执行的时候发生热一种现象, 例如第一个事务对表中的数据进行修改,这种修改设计到表中全部数据行。 同时,第二个事务也修改这个表中的数据, 这种修改是向表中插入一行心数据。那么以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行, 就好像发生了幻觉一样
- 隔离级别
a) Read UNCOMMITED 脏读 不可重复读 幻读
b) READ COOMMITED 不可重复读 幻读
c) Reapeatable READ 幻读
d) Serializable
- Mysql和oracle的默认级别
a) Mysql 是4级 也就是 readCommmited
b) ORACLE 是2级 也就是 READ COMMITED
- 数据库连接池
a) 先要存储连接资源(里面用LinkedList<Connection>)
b) 用for循环初始化连接
- 模拟实现数据库连接池
- 连接池规范
- DBCP
- C3P0
- 采用web服务器管理数据源
- Clob, Blob