MySQL 的数据类型有大概可以分为 5 种,分别是整数类型、浮点数类型和定点数类型、日期和时间类型、字符串类型、二进制类型等
数值类型:
日期/时间类型:
字符串类型:
二进制类型:
整数类型
整数类型又称数值型数据,数值型数据类型主要用来存储数字
MySQL 提供了多种数值型数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大
小数类型
MySQL使用浮点数和定点数来表示小数
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL
浮点类型和定点类型都可以用(M, D)
来表示,其中M
称为精度,表示总共的位数;D
称为标度,表示小数的位数。
浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。DECIMAL 的默认 D 值为 0、M 值为 10。
日期和时间类型
==字符串类型==
create database 数据库名称
create database if not exists 数据库名称
create database 数据库名称 character set 字符集名
show databases
show create database 数据库名称
alter database 数据库名称 character set 字符集名称
dorp database 数据库名称
drop database if exists 数据库名称
select database()
use 数据层名称
C(Create):创建
创建表
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
复制表
create table 表名 like 被复制的表名
R(Retrieve):查询
show tables
desc 表名
U(Update):修改
alter table 表名 rename to 新的表名
alter table 表名 character set 字符集名称
alter table 表名 add 列名 数据类型
alter table 表名 change 列名 新列别 新数据类型
alter table 表名 drop 列名
D(Delete):删除
drop table if exists 表名
insert into 表名(列名1,列名2..) values(值1,值2...)
delete from 表名 [where 条件]
update 表名 set 列名1=值1,列名2=值2,... [where 条件]
去重复:distinct
条件查询:where子句后跟条件
模糊查询:like '%字符%'
排序查询(order by )
order by 排序字段1 排序方式1
聚合函数
分组查询
分页查询
管理用户
create user '用户名'@'主机名' identified by '密码'
drop user '用户名'@'主机名'
set password for '用户名'@'主机名' =password('新密码')
use mysql
select * from user
权限管理
show grants for '用户名'@'主机名'
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'
grant all on *.* to '用户名'@'主机名'
撤销权限
revoke 权限列表 on 数据库.表名 from '用户名'@'主机名'
net stop mysql
mysqld --skip-grant-table
use mysql
update user set password = password('你的新密码') where user = 'root';
使用 SHOW CREATE TABLE <数据库表名>语句来查看表中的约束
非空约束:not null,值不能为null
创建表时添加约束
create table 表名(
字段 类型 not null
);
创建表完后,添加非空约束
alter table 表名 modify 字段 类型 not null
删除字段的非空约束
alter table 表名 modify 字段类型
唯一约束:unique,值不能重复
注意
在创建表时,条件唯一约束
create table 表名(
字段 类型 unique
);
删除唯一约束
alter table 表名 drop index 字段
在表创建完后,添加唯一约束
alter table 表名 modify 字段 类型 unique
主键约束:primary key
注意
在创建表时,添加主键约束
create table 表名(
字段 类型 primary key
);
删除主键
alter table 表名 drop primary key
创建完表后,添加主键
alter table 表名 add primary key(字段)
自动增长
在创建表时,添加主键约束,使用auto_increment可以来完成值的自动增长
在创建表时,添加主键约束
create table 表名(
字段 类型 primary key auto_increment
);
删除自动增长
alter table 表名 modify 字段 类型
添加自动增长
alter table 表名 modify 字段 类型 auto_increment
外键约束:foreign key
在创建表时,添加外键
create table 表名(
外键列名 类型
constraint 外键名称 foreign key (从表列名称) references 主键名称(主表列名称)
)
删除外键
alter table 表名 drop foreign key 外键名称
创建表之后,添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称)
级联操作
添加级联操作
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade
级联更新:on update cascade
级联删除:on delete cascade
第一范式(1NF):每一列都是不可分割的原子数据项
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其他非主属性(在2NF基础上消除传递依赖)
存在问题:
url=jdbc:mysql:///数据库名
user=root
password=root
driver=com.mysql.jdbc.Driver
public class JdbcUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
//使用静态代码块,随着类的加载而执行,而且只执行一次
static {
try {
//创建Properties集合类
Properties pro = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader loader = JdbcUtils.class.getClassLoader();
URL res = loader.getResource("jdbc.properties");
String path = res.getPath();
pro.load(new FileReader(path));
//pro.load(new FileReader("src/jdbc.properties"));
url = pro.getProperty("url");
user = pro.getProperty("user");
password = pro.getProperty("password");
driver = pro.getProperty("driver");
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
//释放资源
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
概念:一个容器,存放数据库连接的容器。当系统初始化后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器
标准接口:DataSource
步骤:
获取连接:getConnection
Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
步骤:
导入jar包
创建JdbcTemplate对象。依赖于数据源DataSource
调用JdbcTemplate的方法来完成CRUD的操作