MySQL数据库基础

操作数据库
操作数据表
增删改查
约束
用户管理
权限管理

操作数据库

1、查询所有的数据库
show databases;
MySQL数据库基础_第1张图片
2、查看某数据库的字符集与创建语句
show create database 数据库名
MySQL数据库基础_第2张图片
3、创建数据库
show create database (if not exists) 数据库名 (character set 字符集)
MySQL数据库基础_第3张图片
4、修改数据库字符集
alter database 数据库名 character set 新字符集
MySQL数据库基础_第4张图片
5、删除数据库
drop database (if exists) 数据库名
MySQL数据库基础_第5张图片
6、使用数据库
use 数据库名;
在这里插入图片描述
查看当前正在使用的数据库
select database();
MySQL数据库基础_第6张图片

操作数据表

1、查询某个数据库中所有表的名称
先进入一个数据库
show tables;
MySQL数据库基础_第7张图片
2、查询数据表的结构
MySQL数据库基础_第8张图片
3、创建数据表
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
列名3 数据类型3
);
最后一列不要加句号。
数据类型有非常多,常用的有
int 整型、double小数类型、date日期类型、varchar()字符串类型、date日期(yyyy-MM-dd)、datetime(yyyy-MM-dd HH:mm:ss)、timestamp时间戳类型(包含年月日时分秒。如果不给该字段赋值,会自动使用当前系统时间)。
MySQL数据库基础_第9张图片
4、删除数据表
drop table (if exists) 数据表名
在这里插入图片描述
5、修改数据表
(1)修改数据表名
alter table 原表名 rename to 新表名
MySQL数据库基础_第10张图片
(2)修改数据表的字符集
alter table 表名 character set 新字符集
MySQL数据库基础_第11张图片
(3)新增一列
alter table 表名 add 新字段名 新字段数据类型
MySQL数据库基础_第12张图片
(4)修改列名或数据类型
alter table 表名 change 原列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型
MySQL数据库基础_第13张图片

增删改查

(1)添加数据:
单条:insert into 表名(列名1,列名2…) values (值1,值2,值3);
如果给所有列都添加数据就不需要写列名,即:
insert into 表名 values (值1,值2,值3);
MySQL数据库基础_第14张图片
(2)删除数据:
delete from 表名 [where条件],如果不加条件会删除表中所有的数据。
MySQL数据库基础_第15张图片
上面说到delete from不加条件会删除所有的数据,但是当我们真的想清空所有数据而保留原表时也不会使用它,因为他内部原理是一条一条的删除,对性能影响大。当需要清空表时,会使用
truncate table stu;
他会删除这个表,然后再创建一个一模一样的空表
MySQL数据库基础_第16张图片
(3)修改数据
update 表名 set 列名1=值1,列名2=值2,…[where条件]
MySQL数据库基础_第17张图片
(4)查询数据
select 字段 from 表名 【where筛选条件 group by 分组字段 having 分组后筛选条件 order by 排序条件 limit 显示条数】
一、基础查询
1、查询表的所有信息
MySQL数据库基础_第18张图片
2、查询指定列信息
MySQL数据库基础_第19张图片
3、去重查询
MySQL数据库基础_第20张图片
4、查询时进行数学运算与取别名
MySQL数据库基础_第21张图片
NULL值与任何数计算的结果都为NULL
5、使用IFNULL()对NULL值进行处理
MySQL数据库基础_第22张图片
二、条件查询
MySQL数据库基础_第23张图片
1、运算符

-- 查询年龄大于或等于20岁的人
SELECT * FROM student WHERE age>=20;
-- 查询年龄等于20岁的人
SELECT * FROM student WHERE age=20;
-- 查询年龄不等于20岁的人
SELECT * FROM student WHERE age<>20;
SELECT * FROM student WHERE age!=20;
-- 查询年龄大于等于20小于等于30的人
SELECT * FROM student WHERE age>=20 AND age<=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30; 
-- 查询年龄为22、18、25的人
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为NULL的人
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为NULL的人
SELECT * FROM student WHERE english IS NOT NULL;

2、模糊查询
使用_匹配单个字符,%匹配任意多个字符

-- 查询姓马的人
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询名字为两个字的人
SELECT * FROM student WHERE NAME LIKE '__';

3、排序查询
按数学成绩排列(默认升序)

SELECT NAME,math,english FROM student
ORDER BY math

MySQL数据库基础_第24张图片
按数学和英语成绩排序,当数学成绩相同时,根据英语成绩排序,并降序排列

SELECT NAME,math '数学',english '英语' FROM student
ORDER BY math,english

MySQL数据库基础_第25张图片
4、聚合函数
聚合函数是将一列数组作为整体,进行纵向的计算
常用的有:
count个数、max最大值、min最小值、sum和、avg平均值
要注意的一点是,聚合函数的计算都排除了NULL值,所以一般也是用非空列进行计算,或者使用IFNULL()函数对数据进行处理

-- 查询全班的平均分
SELECT 
AVG(math) '数学',
AVG(english) '英语'
FROM student

MySQL数据库基础_第26张图片
5、分组查询

-- 查询男同学、女同学的单科平均分和总分平均分
SELECT 
sex '性别',
AVG(math) '数学',AVG(english) '英语',
AVG(math+english) '总分'
FROM student
GROUP BY sex

MySQL数据库基础_第27张图片
6、分页查询
在查询之后使用limit m,n
其中m表示开始显示的索引(从0开始),n表示显示的条数

-- 数学成绩前3的同学成绩
SELECT NAME '姓名',math '数学',english '英语'
FROM student
ORDER BY math
DESC
LIMIT 0,3

MySQL数据库基础_第28张图片

约束

约束是对表中的数据进行限定,保证数据的正确性、有效性、完整性。

1、非空约束 not null
2、唯一约束 unique
3、主键约束 primary key
4、外键约束 foreign key

1、非空约束
MySQL数据库基础_第29张图片
删除非空约束
MySQL数据库基础_第30张图片

2、唯一约束
唯一约束可以有NULL值,但是不可重复,连NULL也不准重复

CREATE TABLE Chinese(
    NAME VARCHAR(20),
    id INT UNIQUE
);

MySQL数据库基础_第31张图片
删除唯一约束

ALTER TABLE chinese DROP INDEX id;
INSERT INTO chinese VALUE ('李四',987654321);
SELECT*FROM chinese;

MySQL数据库基础_第32张图片
添加唯一约束
只有在无重复数据时才能添加唯一约束

ALTER TABLE chinese MODIFY id INT UNIQUE

3、主键约束
主键要求非空且唯一,也就是一张表最多只能有一个主键

CREATE TABLE Chinese(
    NAME VARCHAR(20),
    id INT PRIMARY KEY 
);

删除主键

ALTER TABLE chinese DROP PRIMARY KEY;

添加主键

ALTER TABLE chinese MODIFY id INT PRIMARY KEY;

4、自增长
自增长与主键密切相关,像数字类型的id等等,就可以设置为自动增长

CREATE TABLE USERS(
  user_id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(20),
  PASSWORD VARCHAR(20)
);

MySQL数据库基础_第33张图片
此外,这个自动增长的主键也可以填NULL,他也会自动在前一个的基础上增加。并且主键的id并不一定要每次都加1,也可以跳跃式的填充。

5、外键约束
MySQL数据库基础_第34张图片
这张表可以看到数据有很多冗余,比如123都属于研发部,都在广州。把这些重复的数据单独存放在一张表中,查询数据时通过多个表的联动来实现数据的匹配。而这其中起到连接多表作用的字段就是外键。
修改后的表为
MySQL数据库基础_第35张图片
MySQL数据库基础_第36张图片

当没有外键约束的时候可能出现不符合现实世界逻辑的问题。比如张三、李四、王五都属于1号部门,有一天公司经营不善要把1号部门删除了,那删除完之后这三个员工仍然属于1号部门,这就不合逻辑了。应该先将三个员工开除然后再删除1号部门。外键的用作就是对这样类似的问题进行约束。

在创建表时,可以添加外键
create table 表名(

外键列
constraint 外键名称 foreign key(外键列名) references 主表名称(主表列名)
);

CREATE TABLE department(
    id INT PRIMARY KEY AUTO_INCREMENT,
    dep_name VARCHAR(20),
    dep_location VARCHAR(20)
);


CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20),
    age INT,
    dep_id INT, -- 外键对应主表的主键
    CONSTRAINT emp_dept_fk FOREIGN KEY(dep_id) REFERENCES department(id) -- 外键
);

INSERT INTO department VALUES
(NULL,'研发部','广州'),
(NULL,'销售部','深圳');

INSERT INTO employee(NAME,age,dep_id)
VALUES('张三',20,1),
('李四',21,1),
('王五',20,1),
('老王',22,2),
('小王',18,2);

用户管理

对于用户的操作,都在mysql这个数据库中完成
1、查询用户表信息
MySQL数据库基础_第37张图片
2、创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

如果要让用户在任何机器上都能登录,可以使用通配符

CREATE USER '用户名'@'%' IDENTIFIED BY '密码';

MySQL数据库基础_第38张图片
3、删除用户

DROP USER '用户名'@'主机名';

MySQL数据库基础_第39张图片
4、修改用户密码

UPDATE USER SET PASSWORD=PASSWORD('新密码') WHERE USER='用户名';
或者
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');

MySQL数据库基础_第40张图片
5、忘记root密码的解决办法
(1)管理员命令行停止MySQL服务
net stop mysql
(2)使用无验证方式登录MySQL
mysqld --skip-grant-tables
(3)不关闭前面的那个命令行,重开一个管理员命令行直接输入mysql即可进入
(4)切换到mysql数据库使用之前学的命令

update user set password=password('新密码') where user='root';

(5)关闭命令行窗口,在进程管理器中中止mysqld.exe
(6)管理员命令行使用新密码登录

权限管理

1、查看权限

SHOW GRANTS FOR '用户名'@'主机名';

MySQL数据库基础_第41张图片
2、授予权限
常见的权限有SELECT、INSERT、UPDATE、CREATE、DROP等

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

为用户授予所有库的最高权限

GRANT ALL ON *.* TO '用户名'@'主机名';

3、撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

你可能感兴趣的:(Java)