JAVA 数据库技术 MySQL CODE

DML		增删改
DQL		查

cmd 管理者身份

net start mysql57
net stop mysql57

cmd


mysql -uroot -p****					--login
mysql -h127.0.0.1 -uroot -p****		--login
mysql -uroot -p						--login
****

quit								--logout
exit								--logout

select @@datadir;					-- my.ini文件存在目录查找

快捷键

tab		自动写全

l

DDL 数据库

CREATE DATABASE db1;						-- 创建数据库
CREATE DATABASE db1_1 CHARACTER SET utf8;	-- 创建数据库
USE db1;									-- 切换数据库
SELECT DATABASE();							-- 查询正在使用的数据库
SHOW DATABASES;								-- 查询MySQL中有哪些数据库

ALTER DATABASE db1 CHARACTER SET utf8;		-- 修改数据库的字符集
SHOW CREATE DATABASE db1; 					-- 查找当前数据库的基本信息

DROP DATABASE db1_1;						-- 删除数据库
											
CREATE DATABASE db1;						-- 创建数据库			create
CREATE DATABASE db1_1 CHARACTER SET utf8;	-- 创建数据库			create
											-- update				create
ALTER DATABASE db1 CHARACTER SET utf8;		-- 修改数据库的字符集		create
											
USE db1;									-- 切换数据库			retrieve (show)
SELECT DATABASE();							-- 查询正在使用的数据库	retrieve (show)
SHOW DATABASES;								-- 查询MySQL中有哪些数据库 retrieve (show)
SHOW CREATE DATABASE db1; 					-- 查找当前数据库的基本信息 retrieve (show)

DROP DATABASE db1_1;						-- 删除数据库			drop

DDL 数据表

-- create
CREATE TABLE test2 LIKE test1;	-- 创建一个与test1表结构相同的 test2表
CREATE TABLE category (			-- 创建分类表
    cid   INT,
    cname VARCHAR(20),
    tdate DATE
);

-- retrieve(show)
DESC test1;					-- 查看表结构
SHOW TABLES;				-- 查看当前数据库中所有的数据表名
SHOW CREATE TABLE category;	-- 查看创建表的 sql

-- drop
DROP TABLE test1;			-- 删除 test1表
DROP TABLE IF EXISTS test1;	-- 使用先判断后再删除方式

-- update
RENAME TABLE category TO category1;							-- 修改变名称 -> rename table 旧表名 to 新表名;
ALTER TABLE category1 CHARACTER SET gbk;					-- 修改表的字符集为 gbk -> alter table 表名 character set 字符集;
ALTER TABLE category1 ADD cdesc VARCHAR(20);				-- 向表中添加一个字段 关键字:add -> 语法格式:alter table 表名 add 字段名 字段类型(长度)
ALTER TABLE category1 MODIFY cdesc VARCHAR(50);				-- 修改表中列的类型或者长度 关键字:modify -> alter table 表名 modify 字段名称 字段类型(长度)
ALTER TABLE category1 MODIFY cdesc CHAR(20);				-- 修改表中列的类型或者长度 关键字:modify -> alter table 表名 modify 字段名称 字段类型(长度)
ALTER TABLE category1 CHANGE cdesc description VARCHAR(30);	-- 修改列的名称 关键字:change -> alter table 表名 change 旧列名 新列名 类型(长度)
ALTER TABLE category1 DROP description;						-- 删除列 关键字:drop -> alter table 表名 drop 列名

DML/DQL 表中数据

DML
-- insert 添加
INSERT INTO student (sid,sname,age,sex,address) VALUES(1,'孙悟空',18,'男','花果山'); -- 方式一 插入全部字段 将所有字段名都写出来
INSERT INTO student VALUES(2,'孙悟饭',5,'男','地球');	-- 方式二 插入全部字段 不写字段名
INSERT INTO student (sid,sname) VALUES(3,'蜘蛛侠');		-- 方式三 插入指定字段

-- update 修改
UPDATE student SET sex = '女';							-- 修改表中的所有的学生姓别为女
UPDATE student SET sex = '男' WHERE sid =1;				-- 带条件的修改 
UPDATE student SET age=20, address='大唐' WHERE sid=3;	-- 一次性修改多个列

-- delete 删除
DELETE FROM student WHERE sid =3;	-- 删除 sid为 3的数据
DELETE FROM student;				-- 删除所有数据 
TRUNCATE TABLE student;				-- 删除所有数据 

DQL
-- retrieve 查找
SELECT * FROM emp;  -- 查询 emp表中所有数据
SELECT eid,ename FROM emp; -- 查询所有数据,只显示ID和name
# as
SELECT  eid AS '编号',
	ename AS '姓名',
	sex AS '性别',
	salary AS '薪资',
	hire_date AS '入职时间',
	dept_name '部门名称'
FROM emp;-- 查询所有的数据,然后给列名改为中文. 即别名查询 使用关键字 as
# distinct
SELECT DISTINCT dept_name FROM emp; -- 查询一共有几个部门 去重操作 关键字 distinct
# +
SELECT ename, salary, salary+1000 salary FROM emp; -- 将我们的员工薪资工资 +1000

排序

SELECT * FROM emp ORDER BY salary DESC;
SELECT * FROM emp ORDER BY salary DESC, eid DESC;

聚合函数

SELECT COUNT(*) FROM emp;
SELECT COUNT(1) FROM emp;
SELECT COUNT(eid) FROM emp;
SELECT COUNT(dept_name) FROM emp; -- 忽略空值
SELECT 
	SUM(salary) AS '总薪水',
	MAX(salary) AS '最高薪水',
	MIN(salary) AS '最小薪水',
	AVG(salary) AS '平均薪水'
FROM emp;
SELECT COUNT(*) FROM emp WHERE salary > 4000;
SELECT COUNT(*) FROM emp WHERE dept_name = '教学部';
SELECT AVG(salary) FROM emp WHERE dept_name = '市场部';

分组

SELECT * FROM emp GROUP BY sex;	-- 无意义的 eid ename
SELECT sex,AVG(salary) FROM emp GROUP BY sex;
SELECT dept_name,AVG(salary) FROM emp GROUP BY dept_name;
SELECT dept_name,AVG(salary) FROM emp GROUP BY dept_name HAVING AVG(salary)>6000;
SELECT dept_name,AVG(salary) FROM emp WHERE dept_name IS NOT NULL GROUP BY dept_name;

limit

SELECT * FROM emp LIMIT 0,5;
SELECT * FROM emp LIMIT 5;
SELECT * FROM emp LIMIT 3,6;
SELECT * FROM emp LIMIT 0,3;  -- 第一页
SELECT * FROM emp LIMIT 3,3;  -- 第二页  分页公式:
SELECT * FROM emp LIMIT 6,3;  -- 第三页 (当前页-1)*每页显示条数 = (3-1)*3 = 6

主键约束

CREATE TABLE emp2(
	eid INT PRIMARY KEY,
	ename VARCHAR(20),
	sex CHAR(1)
);
DESC emp2;

CREATE TABLE emp2(
	eid INT,
	ename VARCHAR(2),
	sex CHAR(1),
	PRIMARY KEY(eid)
);


CREATE TABLE emp2(
	eid INT,
	ename VARCHAR(20),
	sex CHAR(1)
);
ALTER TABLE emp2 ADD PRIMARY KEY(eid);	-- 添加主键
ALTER TABLE emp2 DROP PRIMARY KEY;	-- 删除主键


CREATE TABLE emp2(
	eid INT PRIMARY KEY AUTO_INCREMENT, -- 主键自增
	ename VARCHAR(20),
	sex CHAR(1)
);
INSERT INTO emp2(ename,sex) VALUES('hhh','m');
INSERT INTO emp2(ename,sex) VALUES('yyy','f');
INSERT INTO emp2 VALUES('kkk','f'); -- error
INSERT INTO emp2 VALUES(NULL,'kkk','f');
INSERT INTO emp2 VALUES(NULL,'ddd','f');

CREATE TABLE emp2(
	eid INT PRIMARY KEY AUTO_INCREMENT,
	ename VARCHAR(20),
	sex CHAR(1)
)AUTO_INCREMENT=100;			    -- 主键自增其实值
INSERT INTO emp2(ename,sex) VALUES('hhh','m'); -- 100
INSERT INTO emp2(ename,sex) VALUES('yyy','f'); -- 101

DELETE FROM emp2;	
INSERT INTO emp2(ename,sex) VALUES('hhh','m'); -- 102 无影响
INSERT INTO emp2(ename,sex) VALUES('yyy','f'); -- 103 无影响

TRUNCATE TABLE emp2;
INSERT INTO emp2(ename,sex) VALUES('hhh','m'); -- 1 有影响
INSERT INTO emp2(ename,sex) VALUES('yyy','f'); -- 2 有影响

DESC emp2;
SELECT * FROM emp2;
DROP TABLE emp2;

非空约束

CREATE TABLE emp2(
	eid INT PRIMARY KEY AUTO_INCREMENT,
	ename VARCHAR(20) NOT NULL,
	sex CHAR(1)
);
INSERT INTO emp2 VALUES(NULL,'zhangsan','m');
INSERT INTO emp2 VALUES(NULL,NULL,'m'); -- error

DESC emp2;
SELECT * FROM emp2;
DROP TABLE emp2;

唯一约束

CREATE TABLE emp3(
	eid INT PRIMARY KEY,
	ename VARCHAR(20) UNIQUE,
	sex CHAR(1)
);
INSERT INTO emp3 VALUES(1,'zhangbaiwan','f');
INSERT INTO emp3 VALUES(2,'zhangbaiwan1','f');
INSERT INTO emp3 VALUES(3,'zhangbaiwan','f'); -- error
INSERT INTO emp3 VALUES(3,NULL,'f');

DESC emp3;
SELECT * FROM emp3;

外键约束

FOREIGN KEY(pid) REFERENCES province(id)
ALTER TABLE ... ADD FOREIGN KEY(pid) REFERENCES province(id)

默认值

CREATE TABLE emp4(
	eid INT PRIMARY KEY,
	ename VARCHAR(20),
	sex CHAR(1) DEFAULT 'f'
);
INSERT INTO emp4(eid,ename) VALUES(1,'zhangfei');
INSERT INTO emp4(eid,ename) VALUES(2,'liubei');
INSERT INTO emp4(eid,ename,sex) VALUES(3,'sunwukong','m');

DESC emp4;
SELECT * FROM emp4;

事务

CREATE TABLE account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(10),
	money DOUBLE
);
INSERT INTO account (NAME, money) VALUES('tom',1000),('jack',1000);

-- 手动提交, cmd运行测试
START TRANSACTION;	
UPDATE account SET money = money + 500 WHERE NAME = 'tom';
UPDATE account SET money = money - 500 WHERE NAME = 'jack';
COMMIT;

SHOW VARIABLES LIKE 'autocommit'; -- on
SET @@autocommit=off;
SHOW VARIABLES LIKE 'autocommit'; -- off
SET @@autocommit=ON;

SELECT * FROM account;

事务隔离级别

select @@tx_isolation;									-- 查看事务隔离级别
set global transaction isolation level read uncommitted	-- 设置事务隔离级别 读未提交
set global transaction isolation level read committed	-- 设置事务隔离级别 读已提交
set global transaction isolation level repeatable read	-- 设置事务隔离级别 可重复读
set global transaction isolation level serializable 	-- 设置事务隔离级别 串行化

多表连接

SELECT * FROM products p       INNER JOIN category c ON p.`category_id`=c.`cid`;
SELECT * FROM category c  LEFT OUTER JOIN products p ON c.`cid`=p.`category_id`;
SELECT * FROM products p RIGHT OUTER JOIN category c ON c.`cid`=p.`category_id`;

索引

ALTER TABLE demo01 ADD PRIMARY KEY(did);		-- 主键索引
CREATE UNIQUE INDEX ind_hobby ON demo01(hobby);	-- 唯一索引
CREATE INDEX ind_dname ON demo01(dname);		-- 普通索引
ALTER TABLE demo01 DROP INDEX ind_hobby;		-- 删除索引

视图

CREATE VIEW products_category_view AS SELECT...

存储过程

-- 1
DELIMITER $$
CREATE PROCEDURE goods_proc()
BEGIN
	SELECT * FROM goods;		-- 查询所有商品数据
END $$
CALL goods_proc;				-- 调用

-- 2
DELIMITER $$
CREATE PROCEDURE goods_proc02(IN goods_id INT)
BEGIN
	DELETE FROM goods WHERE gid = goods_id;
END $$
CALL goods_proc02(1);

-- 3
DELIMITER $$
CREATE PROCEDURE orders_proc(IN o_oid INT, IN o_gid INT, IN o_price INT, OUT out_num INT)
BEGIN 
	INSERT INTO orders VALUES(o_oid, o_gid, o_price);
	SET @out_num = 1;				-- 设置 out_num = 1
	SELECT @out_num;				-- 返回 out_num
END $$
CALL orders_proc(1,2,50,@out_num);	-- 获取返回值out_num

触发器

DELIMITER $
CREATE TRIGGER t1
AFTER INSERT ON orders
FOR EACH ROW 	-- 行触发器
BEGIN
	UPDATE goods SET num = num -1 WHERE gid = 4;	-- 订单+1 库存-1
END $
INSERT INTO orders VALUES(1,4,25);					-- 向orders表插入一个订单

用户

创建用户
CREATE USER 'admin1'@ 'localhost' IDENTIFIED BY '123456';	-- 只能在 localhost 这个服务器登录 mysql 服务器
CREATE USER 'admin2'@ '%' IDENTIFIED BY '123456';			-- 在任何电脑上登录 mysql 服务器
SELECT * FROM USER;

用户的授权 
GRANT SELECT ON db4.`products` TO 'admin1'@ 'localhost';
GRANT ALL ON *.* TO 'admin2'@ '%';

查看用户权限 
SHOW GRANTS FOR 'root'@ 'localhost';
SHOW GRANTS FOR 'admin1'@ 'localhost';
SHOW GRANTS FOR 'admin2'@ '%';

删除用户
DROP USER 'admin1'@'localhost';

查询用户
SELECT * FROM USER;

Java程序访问MySQL数据库

// 1.注册驱动
// 2.获取连接         					Connection
// 3.获取语句执行平台  					Statement
// 3.1 通过statement对象的方法  			增删改查
// 3.2 通过prepareStatement对象的方法 	增删改查
// 4.关闭流 								后开先关

Class.forName("com.mysql.jdbc.Driver");
Connection con       = DriverManager.getConnection("jdbc:mysql://localhost:3306/db4?characterEncoding=utf8", "root", "stone");
Statement  statement = con.createStatement();  
int        i         = statement.executeUpdate("create table test( id int, name varchar(20), age int);"); 
ResultSet  resultSet = statement.executeQuery("select * from jdbc_user;");

resultSet.close();
statement.close();
con.close();

猜你喜欢

转载自blog.csdn.net/kimyundung/article/details/111030159