当前位置: 首页 > 工具软件 > Java DB > 使用案例 >

JAVA--DB

吕嘉赐
2023-12-01

1. cmd 启动数据库

1.1 net start mysql

停止数据库

1.2 net stop mysql

1.3 进入mysql管理终端:mysql -u root -p

tips:第一次没有设置密码直接空格进入

1.4 连接到Mysql服务的指令

mysql -h 主机IP -P 端口 -u 用户名 -p密码

tips:

-p密码间无空格

若无-h和-P默认是本地主机和3306端口

mysql -u root -ppassword
//等价于
mysql -h 127.0.0.1 -P 3306 -u root -ppassword

实际中会改掉端口3306以防恶意攻击

2.数据库图形化管理工具

Navicat(p734)

SQLyog(p735)

3. 表的本质仍然是文件

4.SQL语句分类

DDL:数据定义语句(create表、库)

DML:数据操作语句(增加、修改、删除)

DQL:数据查询语句(select)

DCL:数据控制语句(管理数据库)

4. SQL语句

4.1 CREATE DATASET db_name CHARACTER SET utf8 COLLATE utf8_bin

#创建名为db_name的数据库,并把基字符集设为utf8,数据库排序规则设为utf8_bin

4.2 SHOW DATABASES

#显示所有的数据库名称

4.3 SHOW CREATE DATABASE db_name

#显示创建数据库时的命令

4.4 DROP DATABASE db_name

#删除数据库

4.5 备份数据库

mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql

(在DOS执行)

4.6 恢复数据库 

Source 文件名.sql

5. 表的相关操作

5.1 创建表

CREATE TABLE table_name

(

        field1 datatype,

        field2 datatype

)CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎;

#tips:CHARACTER SET 字符集 COLLATE 校对规则 ENGINE 引擎可以不写,会设为默认,但“;”必须加,否则会报错

5.2 Mysql 常用数据类型(列类型)

5.3 插入

#创建表
CREATE TABLE `emp`(
    id INT,
    `name` VARCHAR(32),
    sex CHAR(1),
    birthday DATE,
    entry_date DATETIME,
    job VARCHAR(32),
    salary DOUBLE,
    `resume` TEXT);
#插入

INSERT INTO `emp`
	VALUES(20, 'alan', '男', '2000-11-11', '2010-11-10 11:11:11', 'waiter', 4000, 'hello');
SELECT * FROM `emp`;

5.4 修改表

使用ALTER TABLE 语句追加、修改、或删除列

#增添列
ALTER TABLE emp 
	ADD lover VARCHAR(32) NOT NULL DEFAULT '' AFTER RESUME
#修改列  以什么为索引?
ALTER TABLE emp
    ADD lover VARCHAR(64) NOT NULL DEFAULT '' AFTER RESUME
#删除特定列(列名)
ALTER TABLE emp
    DROP sex
#修改表名
RENAME TABLE emp to employee
#修改表的字符集为utf8
ALTER TABLE employee CHARACTER SET utf8
#列名job修改为user_job
ALTER TABLE employee CHANGE `job` user_job VARCHAR(32) NOT NULL DEFAULT ''
DESC table_name  --显示表结构,可以查看表的所有列

 6. 数据库记录(行)的增删查改CRUD:creat,read,update,delete

6.1 添加数据INSERT

INSERT INTO goods (id, goods_name, price)
VALUES(10, 'huawei', 2000)
#添加数据tips:
#字符和日期型数据应包含在单引号里
#如果是给表中所有字段添加信息,可以不写前面的字段名称
#插入记录时不给定某个字段值,则默认为NULL(如果该字段不设为不允许为NULL的话)

#插入多条记录
INSERT INTO goods (id, goods_name, price)
VALUES(20, 'Apple', 3000)(30, 'vivo', 4000)

6.2 更新语句UPDATE

#没有WHERE语句限定将所有的price字段值改为3000
UPDATE goods
	SET price=3000
#该特定的记录
UPDATE goods
    SET price=3000
    WHERE goods_name='huawei'
#在原数据上添加 更新为5000
UPDATE goods
    SET price=price+2000
    WHERE goods_name='huawei'
#修改多个列的值
UPDATE goods
    SET price=6000, id=303
    WHERE goods_name='huawei'

6.3删除语句DELETE

#删除特定记录
DELETE FROM goods
	WHERE goods_name='vivo';
#删除表中所有记录
DELETE FROM goods;
#删除表
DROP TABLE employee;

6.4 SELECT语句

CREATE TABLE Student(
	id INT,
	`name` VARCHAR(64),
	math INT,
	English INT,
	gym INT)
INSERT INTO Student
VALUES(001, 'alan', 89, 97, 96),(002, 'alam', 95, 92, 93),(003, 'alamd', 90, 85, 94)
#显示学生名字和总分,表头为SELECT的字段名称
SELECT `name`, (math+English+gym) FROM Student
#显示学生名字和总分并指定每列的表头
SELECT `name` AS 'Name', (math+English+gym) AS total_score FROM Student 

#SELETE [DISTINCT] *|{column1,column2..} FROM table_name;
#*代表查找所有列
#DISTINCT可选,指显示结果时,是否去掉重复数据(要查询的每个字段都相同才会去重)

WHERE

SELECT `name` FROM Student WHERE (math+English+gym)>200 AND math<gym AND `name` LIKE 'al%'
#查找总分大于200并且数学成绩低于体育并且名字前两个字母是'al'的学生
#%表示模糊查询

order by指定排序的列,排序的列既可以是表中的列名,也可以是SELECT语句后指定的列名,ASC升序(默认),Desc降序

order by位于SELECT语句的结尾。

SELECT `name` FROM Student WHERE math BETWEEN 90 AND 95 ORDER BY English DESC

6.5 统计函数

CREATE TABLE t1(
	`name` VARCHAR(20),
	math INT,
	English INT,
	gym INT);
INSERT INTO t1 VALUES('Tom', 90, 89, 80);
INSERT INTO t1 VALUES('Alan', 99, 97, 93);
INSERT INTO t1 VALUES('Jack', 96, 94 ,91);
INSERT INTO t1 VALUES(NULL, NULL, NULL, NULL);
INSERT INTO t1 VALUES('Mary', 96, 89, 86);
INSERT INTO t1 VALUES('Ted', 98, 86, 87);
SELECT * FROM t1
SELECT COUNT(*) FROM t1
SELECT * FROM t1
DROP TABLE t1
SELECT COUNT(`name`) AS 'student' FROM t1
SELECT COUNT(*) FROM t1
#COUNT(*)返回满足条件的记录的行数
#COUNT(`name`)统计满足条件的某列有多少个,但是会排除值为null的情况

SELECT SUM(math) FROM t1
#SUM函数用于求和,仅对数值起作用
SELECT SUM(math), SUM(English), SUM(gym) FROM t1
#对多列求和
SELECT AVG(math) FROM t1
#求均值
SELECT MAX(math) FROM t1
#求最大值
SELECT MIN(gym) FROM t1
#求最小值

6.6 分组GROUP BY ‘列名’ 

#即将‘列名‘相同的字段值放在一起

HAVING对分组结果过滤筛选

#计算每个部门的最高工资和平均工资,在使用AVG()、MAX()函数时必须指定GRUOP BY
SELECT AVG(sal),MAX(sal),depno
	FROM emp GROUP BY depno;
#平均工资保留两位小数
SELECT FORMAT(AVG(sal), 2), MIN(sal), depno
	FROM emp GROUP BY depno;
#查找平均工资小于2000的部门
SELECT FORMAT(AVG(sal), 2) ,depno FROM emp GROUP BY depno HAVING AVG(sal)<2000

7.字符串相关函数

#字符串操作
#返回字符串的字符集
SELECT CHARSET(ename)FROM emp;
#拼接字符串
SELECT CONCAT(ename, 'job is: ', job) FROM emp;
#INSTR(string, substring)返回substring在string中出现的位置,没有返回0,从1开始算
#DUAL可以作为测试表使用,即不需要从特定表提取字段时使用DUAL表
SELECT INSTR('hanshunping','han') FROM DUAL
#UCASE(string)转换成大写,不改变原表内容
SELECT UCASE(ename) FROM emp;
SELECT * FROM emp;
#LCASE(string)转换成小写
SELECT LCASE(ename) FROM emp;
#LEFT(string, length)从string中的左边起取length个字符
#RIGHT(string, length)从string中的右边起取length个字符
SELECT LEFT(ename,2) FROM emp;
#LENGTH(string) 返回string的长度,按字节
SELECT LENGTH(ename) FROM emp;
#REPLACE(str, search_str, replace_str)
#在str字段中,将search_str替换为replace_str,并不会替换原表内容
SELECT ename, REPLACE(job, 'MANAGER', '经理') FROM emp;
#逐字符比较两字符串,前者大返回1,后者大返回-1,相等返回0
SELECT STRCMP('alanm', 'alan') FROM DUAL
#SUBSTRING(str, position, [,length])从字符串的指定位置截取子串
SELECT SUBSTRING(ename, 1, 2) FROM emp;
#去除前端或者后端或者全部空格
SELECT LTRIM(' alan') FROM DUAL;
SELECT RTRIM('alan ') FROM DUAL;
SELECT TRIM(' alan ') FROM DUAL;
#以首字母小写显示所有员工的emp表的姓名
SELECT CONCAT(LCASE(SUBSTRING(ename,1,1)),SUBSTRING(ename,2)) FROM emp

8. 数学相关函数

略。

9. 时间日期相关函数

略。

10. 加密和系统函数

略。

11. 流程控制函数

略。

 类似资料: