MySQL
2021-10-14 14:37:19 24 举报
AI智能生成
登录查看完整内容
MySQL
作者其他创作
大纲/内容
创建数据库: * create database 数据库名称
创建数据库,判断不存在,再创建: * create database if not exists 数据库名称
创建数据库,并指定字符集 * create database 数据库名称 character set 字符集名
创建数据库,判断是否存在,并制定字符集为gbk * create database if not exists 数据库名称 character set gbk;
C(Create):创建
查询所有数据库的名称: * show databases
查询某个数据库的字符集:查询某个数据库的创建语句 * show create database 数据库名称
R(Retrieve):查询
修改数据库的字符集 * alter database 数据库名称 character set 字符集名称
U(Update):修改
删除数据库 * drop database 数据库名称
判断数据库存在,存在再删除 * drop database if exists 数据库名称
D(Delete):删除
查询当前正在使用的数据库名称 * select database()
使用数据库 * use 数据库名称
使用数据库
操作数据库
数据库数据类型
2、复制表create table 表名 like 被复制的表名
查询某个数据库中所有的表名称 * show tables
查询表结构 * desc 表名
1、修改表名 alter table 表名 rename to 新的表名
2、修改表的字符集 alter table 表名 character set 字符集名称
3、添加一列 alter table 表名 add 列名 数据类型
4、修改列名称 类型 alter table 表名 change 列名 新列名 新数据类型; alter table 表名 modify 列名 新数据类型
5、删除列 alter table 表名 drop 列名
drop table 表名
drop table if exists 表名
操作表
DDL(Data Definition Language)数据定义语言用来定义数据库对象:数据库,表,列等
添加数据
delete from 表名 [where 条件]
注意: 1. 如果不加条件,则删除表中所有记录。 2. 如果要删除所有记录 1. delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作 2. TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表
删除数据
注意: 1. 如果不加任何条件,则会将表中所有记录全部修改
修改数据
DML(Data Manipulation Language)数据操作语言用来对数据库中表的数据进行增删改
多字段查询
select distinct 字段名 from 表名
去除重复
可以做数值类型的四则运算null参与的运算结果都为null
计算列
字段 as 别名
起别名
基础查询
[where 条件]
占位符:_:单个任意字符%:多个任意字符
-- 查询姓马的有哪些 SELECT * FROM student WHERE NAME LIKE '马%'
-- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE \"_化%\"
-- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___' (三个占位符)
-- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%'
like 模糊查询
<>、!= 都为不等于
SELECT * FROM student WHERE age BETWEEN 20 AND 30
between ... and ... 在两者之间
> 、< 、<= 、>= 、= and 或 &&or 或 || not 或 !
SELECT * FROM student WHERE english IS NOT NULL
is null / is not null注意null值要用is判断 不能用=
运算符
条件查询
select * from 表名 order by 列名默认升序
升序:select * from 表名 order by 列名 asc
降序:select * from 表名 order by 列名 desc
排序查询
计算个数:select count(列名) from 表名
select max(列名) from 表名
select min(列名) from 表名
select sum(列名) from 表名
select avg(列名) from 表名
将一列数据作为一个整体,进行纵向的计算
选择不包含非空列进行计算例如id在实际中不会为空
count(*) 获取所有列(即只要一列数据有一个不为null就算为一条记录)
注意:聚合函数的计算,排除null值解决方案:
聚合函数
group by 分组字段分组之后查询的字段:分组字段、聚合函数
分组查询
注意: limit 只有MySQL才能用其他数据库有特有的分页方式
公式:开始的索引=(当前的页码-1)*每页显示的条数
分页查询
DQL(Data Query Language)数据查询语言用来查询数据库中表的记录(数据)
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'
添加用户
DROP USER '用户名'@'主机名'
删除用户
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'
修改用户密码
SELECT * FROM USER
通配符: % 表示可以在任意主机使用用户登录数据库
查询用户
管理用户
SHOW GRANTS FOR '用户名'@'主机名'
查询权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'
授予权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'
撤销权限
权限管理
DCL(Data Control Language)数据控制语言(了解)用来定义数据库的访问权限和安全级别,及创建用户
SQL分类
start transaction
1. 开启事务
rollback
2. 回滚
commit
* mysql就是自动提交的 * 一条DML(增删改)语句会自动提交一次事务
自动提交
* Oracle 数据库默认是手动提交事务 * 需要先开启事务,再提交
手动提交
查看事务的默认提交方式:SELECT @@autocommit; -- 1 代表自动提交 0 代表手动提交
修改默认提交方式: set @@autocommit = 0
修改事务的默认提交方式
事务提交的两种方式
3. 提交
操作
1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据
3. 隔离性:多个事务之间。相互独立
4. 一致性:事务操作前后,数据总量不变
四大特征:笔试题中经常见到
1. read uncommitted:读未提交 * 产生的问题:脏读、不可重复读、幻读
2. read committed:读已提交 (Oracle) * 产生的问题:不可重复读、幻读
3. repeatable read:可重复读 (MySQL默认) * 产生的问题:幻读
4. serializable:串行化 * 可以解决所有的问题
* 数据库查询隔离级别: * select @@tx_isolation; * 数据库设置隔离级别: * set global transaction isolation level 级别字符串;
事务隔离级别(了解)
事务
实质
mysql-connector-java-5.1.37-bin.jar 1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下 2.右键-->Add As Library
1、导入驱动jar包
Class.forName(\"com.mysql.jdbc.Driver\")
2、注册驱动
Connection conn = DriverManager.getConnection(\"jdbc:mysql://localhost:3306/db3\
3、获取数据库连接对象
4、定义sql
Statement stmt = conn.createStatement()
5、获取执行sql语句的对象Statement
stmt.executeUpdate(sql)stmt.executeQuery(sql)
6、执行sql(可以接收返回结果并处理)
stmt.close()conn.close()
7、释放资源
使用步骤
注册驱动:告诉程序该使用哪一个数据库驱动jar
获取数据库连接
DriverManager类:驱动管理对象
Statement createStatement()
PreparedStatement prepareStatement(String sql)
获取执行sql 的对象
开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
提交事务:commit()
回滚事务:rollback()
管理事务
Connection接口:数据库连接对象
boolean execute(String sql) : 可以执行任意的sql 了解
int executeUpdate(String sql) : 执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功, 反之,则失败。
ResultSet executeQuery(String sql) : 执行DQL(select)语句
执行sql
Statement接口:执行sql的对象
解决sql注入问题,效率更高
预编译的SQL:参数使用?作为占位符
PreparedStatement接口:执行sql的对象
boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据), 如果是,则返回false,如果不是则返回true,常搭配while循环进行读取操作
各个对象
1、抽取注册驱动
2、抽取一个方法获取连接对象
3、抽取一个方法释放资源
封装JDBC的使用步骤
抽取JDBC工具类:JDBCUtils
setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
commit() * 当所有sql都执行完提交事务
2. 提交事务
rollback() * 在catch中回滚事务
3. 回滚事务
JDBC控制事务
JDBC
概念:其实就是一个容器(集合),存放数据库连接的容器。当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器好处: 1. 节约资源 2. 用户访问高效
概念及优点
c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
1、导入C3P0jar包和数据库驱动jar包
名称: c3p0.properties 或者 c3p0-config.xml路径:直接将文件放在src目录下即可。
2、定义配置文件
DataSource ds = new ComboPooledDataSource();
3、创建数据库连接池对象ComboPooledDataSource
Connection conn = ds.getConnection();
4、获取连接getConnection()
步骤
C3P0
druid-1.0.9.jar
1、导入druid jar包和数据库驱动jar包
是properties形式的可以叫任意名称,可以放在任意目录下
Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream(\"druid.properties\");pro.load(is);
3、加载配置文件
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
4、获取数据库连接池对象,通过工厂来获取DruidDataSourceFactory
5、获取连接getConnection()
Druid
定义JDBCUtils工具类(使用数据库连接池技术)
常见数据库连接池技术
数据库连接池
概念 Structured Query Language:结构化查询语言定义了操作所有关系型数据库的规则
通用语法
SQL概念
创建表时添加约束
ALTER TABLE 表名 MODIFY 列名 数据类型
删除
ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL
创建表之后添加非空约束
非空约束:not null
注意mysql中,唯一约束限定的列的值可以有多个null
创建时添加约束
ALTER TABLE 表名 DROP INDEX 列名
ALTER TABLE 表名 MODIFY 列名 数据类型 UNIQUE
创建表之后添加唯一约束
唯一约束:unique
注意: 1. 含义:非空且唯一 2. 一张表只能有一个字段为主键 3. 主键就是表中记录的唯一标识
ALTER TABLE 表名 DROP PRIMARY KEY (列名可以省略,因为一张表中只有一个主键)
ALTER TABLE stu MODIFY id INT PRIMARY KEY
创建表之后添加主键约束
概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值得自动增长(一般用于主键,也可以用于其他数值类型列)
创建表时,添加主键约束并且完成主键自增长
ALTER TABLE 表名 MODIFY 列名 数据类型
删除自动增长
ALTER TABLE 表名 MODIFY 列名 数据类型 AUTO_INCREMENT
添加自动增长
自动增长
在创建多对多中使用,中间表的每一行不能重复
主键约束:primary key 非空且唯一
create table 表名( .... 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) )
constraint 外键名称 可以省略 让系统自动分配一个名称
创建表时添加外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称
删除外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)
创建表后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE
添加级联操作
级联更新:ON UPDATE CASCADE
级联删除:ON DELETE CASCADE
分类
级联操作
外键约束:foreign key
约束
范式(没整理)
从哪些表中查询数据条件是什么查询哪些字段
查询步骤
笛卡尔积
使用where条件
隐式内连接
select 字段列表 from 表名1 [inner] join 表名2 on 条件
inner 可以省略SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id
显示内连接
内连接查询
select 字段列表 from 表1 left [outer] join 表2 on 条件
查询的是左表所有数据以及其交集部分
左外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件
例子: SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id = t2.id
查询的是右表所有数据以及其交集部分
右外连接
外连接查询
概念:查询中嵌套查询,称嵌套查询为子查询
查询可以作为条件,使用运算符去判断。 运算符: > >= < <= =-- 查询员工工资小于平均工资的人 SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp)
子查询的结果是单行单列的
子查询可以作为条件,使用运算符in来判断 -- 查询'财务部'和'市场部'所有的员工信息 SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部' SELECT * FROM emp WHERE dept_id = 3 OR dept_id = 2-- 子查询 SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE NAME = '财务部' OR NAME = '市场部')
子查询的结果是多行单列的
子查询的结果是多行多列的
子查询
多表查询
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
1、导入jar包
依赖于数据源DataSourceJdbcTemplate template = new JdbcTemplate(ds)
2、创建JdbcTemplate对象
update():执行DML语句。增、删、改语句
将列名作为key,将值作为value 将这条记录封装为一个map集合 * 注意:这个方法查询的结果集长度只能是1
String sql = \"select * from emp where id = ? or id = ?\
queryForMap():查询结果将结果集封装为map集合,
String sql = \"select * from emp\
queryForList():查询结果将结果集封装为list集合
query的参数:RowMapper * 一般我们使用BeanPropertyRowMapper实现类。可以完成数据到JavaBean的自动封装 * new BeanPropertyRowMapper<类型>(类型.class)
用户信息查询
query():查询结果,将结果封装为JavaBean对象
一般用于聚合函数的查询用户登陆验证
String sql = \"select count(id) from emp\
queryForObject:查询结果,将结果封装为对象
3、调用JdbcTemplate的方法来完成CRUD的操作
Spring JDBC
MySQL
0 条评论
回复 删除
下一页