MySQL
SQL是结构化查询语言,定义了操作所有关系型数据库的规则.
DDL
用于操作数据库,表.
操作数据库
创建数据库的语句
create database if not exists 数据库名 character set gbk;
查询数据库的语句
show databases; -- 展示所有数据库
show create database 某个数据库名字;-- 展示单个数据库名称
修改数据库字符集的语句
alter database 数据库名称 character set 字符集名称;
删除数据库的语句
drop database 数据库名称;
操作表
常用语法
[ ]表示可有可无
CREATE TABLE table_name(-- 创建表
属性名 数据类型,
属性名 数据类型,
属性名 数据类型
);
ALTER TABLE old_table_name RENAME [TO] new_table_name;-- 修改表名
DROP TABLE table_name;-- 删除表
ALTER TABLE table_name ADD 属性名 属性类型;-- 在表的最后一个位置增加字段
ALTER TABLE table_name ADD 属性名 属性类型 FIRST;-- 在表的第一个位置增加字段
ALTER TABLE table_name ADD 属性名 属性类型 AFTER 属性名;-- 在表的指定字段之后增加字段
ALTER TABLE table_name DROP 属性名;-- 删除字段
ALTER TABLE table_name CHANGE 旧属性名 新属性名 新数据类型;-- 同时修改字段的属性和类型
约束关键词
NOT NULL -- 约束字段的值不能为空
DEFAULT -- 设置字段的默认值
UNIQUE KEY -- 约束字段的值唯一
PRIMARY KEY -- 约束字段为表的主键,可以作为该表记录的唯一标识
AUTO_INCREMENT -- 约束字段的值为自动增加
FOREIGN KEY -- 约束字段为表的外键
DML
增删改表中的数据.
添加数据语法
insert into 表名 (列名1,列名2,...) values(值1,值2,...);-- 列名和值应一一对应,且注意根据数据类型添加引号
删除数据
delete from 表名[where 条件];
truncate table 表名;-- 删除表中所有记录,效率高
delete from 表名;-- 删除表中所有记录,效率低
修改数据
update 表名 set 列名1=值1,列名2=值2,... where 条件;-- 若不加条件则修改表中所有数据
DQL
查询表中的记录
语法
查询所有字段 :select * from 表名;
select 字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
基础查询
select 字段名1,2,... from 表名;-- 多字段查询
select distict 字段名 from 表名;-- 去重查询
select 字段名1+if null(字段名2,0) from 表名;-- 计算列
select 字段名1+if null(字段名2,0) [as] 别名 from 表名;-- 给计算结果的列起别名
多表关系:
- 一对多,多的一方的外键只想另一方的主键
- 多对多,借助第三张中间表
- 一对一,在任意一方添加唯一外键指向另一方主键
多表查询:要注意消除无用数据
隐式内连接查询:使用where条件消除无用数据
显示内连接查询:select 字段列表 from 表1 left [inner] join 表2 on 条件;
左外连接查询:select 字段列表 from 表1 left [outer] join 表2 on 条件;(查询左表所有数据以及交集部分)
子查询:可以嵌套在主查询中所有位置,包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY,但不是所有子查询都有实际意义.
DCL
定义数据库的访问权限和安全级别,及创建用户
DCL的常用操作
JDBC:即java数据库连接,本质是官方定义的一套操作所有关系型数据库的规则,即接口.各个数据库厂商去实现这套接口,提供数据库驱动jar包.
jar包的使用
1.导入驱动jar包
2.注册驱动
3.获取数据库连接对象Connection
4.定义sql
5.获取执行sql语句的对象,Statement
6.执行sql,接受返回结果
7.处理结果
8.释放资源
案例:给stu表添加一条记录 insert语句
将jar包存到src的子目录.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class Jdbc1 {
public static void main(String[] args) {
Statement stmt = null;
Connection conn = null;
try {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.定义sql,且添加了一条记录
String sql = "insert into stu values(null,'王五','girl',20,90,85)";
//3.获取Connection对象
conn = DriverManager.getConnection("jdbc:mysql:///jdbc", "user", "password");
//4.获取执行SQL的对象Statement
stmt = conn.createStatement();
//5.执行SQL
int count = stmt.executeUpdate(sql);//得到影响的行数
//6.处理结果
System.out.println(count);
if (count > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//释放资源
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}