MYSQLDAY2
数据加密MD5
INSERT INTO testmd VALUES (1,'ZHANGSAN','123456'),(2,'LISI','123456') -- 123456是密码
UPDATE testmd5 SET pwd = MD5(pwd) WHERE ID =1 -- 使用md5将pwd进行加密
-- 插入时加密
INSERT INTO testmd5 VALUES(4,'XIAOMING',MD5('123456'))
-- 校验
SELECT * FROM testmd5 WHERE `NAME` = 'XIAOMING' AND PWD = MD5('123456')
脏读: 一个事务读了另一个事务未提交的数据。
不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不一致。
幻读:在一个事务内读取到了别的事务插入的数据导致前后读取不一致。
CREATE DATABASE SHOP CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI
USE shop
CREATE TABLE `account`(
`id`INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money`DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET = UTF8
`account`INSERT INTO `account`('')
INSERT INTO `ACCOUNT` (`NAME`,`MONEY`)
VALUES ('A',2000.00),('B',10000.00)
-- 模拟事务
SET autocommit =0 ; -- 关闭自动提交
START TRANSACTION -- 开启一个新事务
UPDATE `account` SET money=money-500 WHERE `name` = 'A'-- A-500
UPDATE `account` SET money=money+500 WHERE `name` = 'B' -- B+500
COMMIT; -- 提交事务
ROLLBACK; -- 回滚
SET autocommit =1; -- 开启自动提交
用户权限
create user xxx identified by '******' -- 创建用户密码
set password = PASSWORD ('******') -- 修改当前密码
set password for xxx = PASSWORD ('*****') -- 修改指定用户密码
rename user xxx to xxx -- 修改用户名
grant all privileges on *.* to xxx -- 给用户除授权以外的所有权限
SHOW GRANT FOR XXX -- 查看用户权限
revoke all privileges on *.* from xxx -- 撤销用户权限
drop user xxx -- 删除用户
数据库备份
-
拷贝date 文件
-
使用sqlyog手动导出 右键备份
-
使用命令行导出mysqldump
mysqldump -hlocalhost -uroot -p123456 school >D:/a.sql
source >D:/a.sql
比较好看的前端
ANT design
范式
第一范式
保证每一列不可再分
第二范式
每张表只描述一件事情, 且满足第一范式
第三范式
确保数据表中的每一列数据都和主键直接相关,而不能间接相关,且满足第二范式
规范性和性能的问题
(阿里)关联查询的表不得超过三张
在商业化中,用户的体验要求数据库的性能更加重要
在规范性能的问题上,能考虑范式规范就尽量考虑
故意给表加一些冗余字段 (可以将多表查询变为单表查询)
故意增加一些计算列 将大数据量降低为小数据量的查询:索引
JDBC
package com.company;
import javax.print.DocFlavor;
import java.sql.*;
public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//用户名url
String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
String username = "root";
String passwword = "123456";
//连接成功,数据库对象,Connection代表数据库
Connection connection = DriverManager.getConnection(url,username,passwword);
//执行Sql的对象Statement 执行sql的对象
Statement statement = connection.createStatement();
//执行sql语言命令
String sql = "SELECT * FROM users";
ResultSet resultSet = statement.executeQuery(sql);
while(resultSet.next()){
System.out.println("id=" + resultSet.getObject("id"));
System.out.println("name=" + resultSet.getObject("NAME"));
System.out.println("password=" + resultSet.getObject("PASSWORD"));
System.out.println("email=" + resultSet.getObject("email"));
System.out.println("birth=" + resultSet.getObject("birthday"));
}
resultSet.close();
statement.close();
connection.close();
}
}
注意要将jdbc的包导入lib文件夹
并点击add as library
步骤:
-
加载驱动
-
连接数据库 DriverManager
-
获得执行sql的对象 Statement
-
-
浙公网安备 33010602011771号