手机扫码查看
2020Javaweb教程之mysql使用
mysql环境变量
MYSQL_HOME:C:\Program Files\MySQL\MySQL Server 5.7
PATH:%MYSQL_HOME%\bin;
启动mysql服务
打开cmd,输入net start mysql57.停止服务 net stop mysql57
验证是否安装成功或者登陆mysql:
-u root -p 回车输入密码即可
卸载MySQL
1.停止服务,使用net stop mysql 命令停止服务
2.在控制面板–>”程序和功能”中,找到“mysql程序”,点击卸载。
3.删除安装目录,一般默认在C:\Program Files\MySQL。
4.删除数据库文件存放目录,一般默认在C:\ProgramData\MySQL。
MySQL安装目录
bin文件夹:该文件夹下存放着可执行文件
include文件夹:该文件夹下存放着头文件
lib文件夹:该文件夹下存放着库文件
share文件夹:该文件夹下存放着字符集、语言等信息。
SQL语句分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)。
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
MySQL的使用注意:
sql语句以 ; 结尾。
MySQL注释:(1)#开头 (2)–空格 开头 (3)/* 多行注释 */
show databases; #显示当前mysql中的数据库
创建数据库:
CREATE DATABASE IF NOT EXISTS mydb2 character SET GBK;
查看当前数据库服务器中的所有数据库SQL> SHOW DATABASES;
查看前面创建的mydb2数据库的定义信息SQL> ShOW CREATE DATABASE mydb2;
字符集修改为utf8;
SQL> ALTER DATABASE mydb2 character SET utf8;
删库:DROP DATABASE IF EXISTS mydb3;
查看当前使用的数据库:Select database();
切换数据库:USE mydb2;
退出MySQL:quit;或exit;
int:整型(4个字节)
double:浮点型(8个字节),近似值
例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99
decimal:精确数值数据,最大位数可以是65
例如decimal(5,2)能够存储具有五位数和两位小数的任何值,因此可以存储范围为
-999.99至999.99。
char:固定长度字符串类型; char(10) ‘aaa ‘ 固定10个字符,不足补空格, 长度0-255
缺点:浪费空间,优点:查询速度快
varchar:可变长度字符串类型; varchar(10) ‘aaa’ 最多存储10个字符
缺点:查询速度慢,优点:节省空间
text:大文本字符串类型;有字符编码,存储比较大的文本数据。
blob:Binary Large Object二进制大对象数据;可以存储图片、音频、视频
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
常用约束:
主键约束:primary key (保证数据唯一性),不能重复,不能为null
唯一约束:unique [key],不能重复,可以为null
非空约束:not null
默认约束:default
外键约束:foreign key
自动增长:auto_increment
创建新表:
CREATE TABLE IF NOT EXISTS users(
id INT AUTO_INCREMENT PRIMARY KEY,#id为自动增长,主键且不可为空
username VARCHAR(50) NOT NULL,#用户名字符串类型,长度50,不可为空
identity VARCHAR(18) UNIQUE NOT NULL,#身份证号字符串类型,长度18,唯一约束,不可为空
mobile VARCHAR(11) NOT NULL#手机号字符串类型,长度为11且不可为空
)CHARSET=utf8;
查看表:SELECT*FROM users
DROP TABLE语句用于删除现有表。
语法: DROP TABLE IF EXISTS users;
当前数据库中的所有表:SHOW TABLES;
查看表的字段信息:DESC student;
增加列名addr:ALTER TABLE users ADD addr VARCHAR(50) NOT NULL
修改addr长度为30:ALTER TABLE users MODIFY addr VARCHAR(30) NOT NULL
删除addr列名:ALTER TABLE users DROP addr
查看表的细节:SHOW CREATE TABLE users;
修改表的字符集为gbk:ALTER TABLE user CHARACTER SET gbk;
列名username修改为usernames:ALTER TABLE users CHANGE username usernames VARCHAR(50) NOT NULL
表的插入数据:
语法: INSERT INTO 表名(列名1,列名2 …)VALUES(列值1,列值2…);
INSERT INTO users(usernames,identity,mobile)VALUES(‘admin’,’456456′,’138′);
插入注意事项:
参数不要超出列定义的长度,日期和字符需要单引号括起来,列名与列值的类型、个数、顺序要一一对应。
修改数据:
语法:UPDATE 表名 SET 列名1=列值1,列名2=列值2 … WHERE 列名=值
UPDATE users SET mobile=’1382′,usernames=’王二麻2′ WHERE id=2
删除数据:
语法:DELETE FROM 表名WHERE 列名1=列值1;
DELETE FROM users WHERE id=2
删除表中所有数据:delete from users 或 TRUNCATE TABLE users
delete和truncate区别:
DELETE 删除表中的数据,表结构还在;删除后的数据使用日志可以找回。
TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
TRUNCATE 删除的数据不能找回。执行速度比DELETE快。
数据库工具:Navicat、sqlyog
查询
语法: SELECT 列名 FROM 表名 【WHERE –> GROUP BY–>HAVING–> ORDER BY–>LIMIT】
查询所有数据:select*from users
查询指定列:SELECT usernames FROM users
条件查询:SELECT mobile FROM users WHERE mobile=’138′
运算符
比较运算符
l =、!=、<>、<、<=、>、>=;
BETWEEN…AND;
查询年龄在20到40之间的学生记录:
SELECT *FROM stu WHERE age BETWEEN 20 AND 40;
IN(set);
查询学号为S _ 1001 ,S _ 1002,S _ 1003的记录:
SELECT * FROM stu WHERE sid IN (‘S_1001′,’S_1002′,’S_1003′);
IS NULL;
查询年龄为null的记录:SELECT * FROM stu WHERE age IS NULL;
关系运算符
AND; &&
查询年龄在20到40之间的学生记录:
SELECT *FROM stu WHERE age>=20 AND age<=40;
OR; ||
查询学号为S_1001,或者姓名为liSi的记录:
SELECT * FROM stu WHERE sid =’S_1001′ OR sname=’liSi’;
NOT; !
查询性别非男的学生记录:
SELECT *FROM stu WHERE NOT gender=’male’;
算术运算符:+ – * / %
模糊查询
当想查询姓名中包含a字母的学生时就需要使用模糊查询了。模糊查询需要使用关键字LIKE。
通配符:
_ 任意一个字符
%:任意0~n个字符
‘张%’ —》张三丰 张三 张无忌
‘李_’ —>李四 李逵 李刚
SELECT *FROM users WHERE usernames LIKE ‘_____’#匹配到admin
SELECT *FROM users WHERE usernames LIKE ‘%a%’#匹配到包含a的数据
SELECT *FROM users WHERE usernames LIKE ‘a%’#匹配到a开头的数据
字段控制查询
去除重复记录 DISTINCT
SELECT DISTINCT mobile FROM users#去除手机号重复的数据
求和:SELECT*,money+salary FROM users#计算金钱和工资之和
合并查询:注意字符串的合并不能使用+ ,AS可以省略
语法:使用concat(args,args2,args3) AS 别名from 别名
SELECT CONCAT(usernames,’:’,mobile) size FROM users#姓名和手机号
排序:ASC升序,DESC降序
SELECT * FROM users ORDER BY age ASC#升序
SELECT*FROM users ORDER BY age DESC#降序
聚合函数
聚合函数是用来做纵向运算的函数:
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
count:
当需要纵向统计时可以使用COUNT()
查询users表中记录数:
SELECT COUNT(*) AS ‘别名’ FROM users;#返回数据的数量
查询users表中金钱大于5000的人数:
SELECT COUNT(*) FROM users WHERE money>5000
SUM和AVG
查询所有雇员月薪和:SELECT SUM(money) FROM users;
查询所有雇员月薪和,以及所有雇员佣金和:SELECT SUM(money), SUM(salary) FROM users
查询所有雇员月薪+佣金和:如果没有值,用 0 补
SELECT SUM(money+IFNULL(salary,0))FROM users;
统计所有员工平均工资:SELECT AVG(salary) FROM users;
MAX和MIN
查询最高工资和最低工资:SELECT MAX(money), MIN(money) FROM users;
分组查询
当需要分组查询时需要使用GROUP BY子句,例如查询每个部门的工资和,这说明要使用部分来分组。
注:凡是和聚合函数同时出现的列名,则一定要写在group by 之后
查询每个人的金钱和每个部门的工资和:
SELECT money, SUM(salary)FROM users GROUP BY money;
查询每个人的金钱以及人数:
SELECT money,COUNT(*) FROM users GROUP BY money
查询每个人的工资以及每个人工资大于1500的人数:
SELECT salary,COUNT(*)FROM users WHERE salary>5000 GROUP BY salary
HAVING子句
查询工资总和大于9000的部门编号以及工资和:
SELECT salary,SUM(salary) FROM users GROUP BY salary HAVING SUM(salary)>6000
注:having与where的区别:
1.having是在分组后对数据进行过滤,where是在分组前对数据进行过滤
2.having后面可以使用分组函数(统计函数)
where后面不可以使用分组函数。
where是对分组前记录的条件,如果某行记录没有满足WHERE子句的条件,那么这行记录不会参加分组;而 having是对分组后数据的约束。
LIMIT限制
LIMIT用来限定查询结果的起始行,以及总行数。起始行从0开始
语法:SELECT*FROM 别名LIMIT 起始位置,查询几条数据
查询前3行记录,起始行从0开始:SELECT*FROM users LIMIT 0,3



发表回复