数据库
概述
1.安装
下载地址 https://dev.mysql.com/downloads/mysql/
免安装版:
-
解压后放到安装目录 E:\Program Files\mysql
-
打开 此电脑-属性-高级配置-环境变量-Path,添加 E:\Program Files\mysql\bin
-
配置文件 my.ini
[mysqld] # 设置3306端口 port=3306 # 设置mysql的安装目录 basedir=E:\Program Files\mysql # 设置mysql数据库的数据的存放目录 datadir=E:\Program Files\mysql\data # 允许最大连接数 max_connections=200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 # 服务端使用的字符集默认为UTF8 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 默认使用“mysql_native_password”插件认证 default_authentication_plugin=mysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [client] # 设置mysql客户端连接服务端时默认使用的端口 port=3306 default-character-set=utf8
-
在mysql的安装目录中,打开bin文件夹,运行cmd.执行初始化数据库的指令:
E:\Program Files\mysql\bin>mysqld --initialize --console ... 【生成初始密码】: A temporary password is generated for root@localhost: q)pu9aFJS+Ad
-
安装服务
在MySQL安装目录的 bin 目录下执行命令:
E:\Program Files\mysql\bin>mysqld install mysql8 (服务名默认是mysql,可以随意修改) Install/Remove of the Service Denied! 操作失败,没有权限
关闭cmd,以管理员身份运行cmd,进入MySQL安装目录的 bin 目录下,重新执行
E:\Program Files\mysql\bin>mysqld install mysql8 Service successfully installed.
安装完成之后
通过命令net start mysql8启动MySQL的服务了。
通过命令net stop mysql8停止服务。
-
net start mysql8启动MySQL
-
修改默认密码,进入数据库:mysq -u root -pq)pu9aFJS+Ad
alter user ‘root’@‘localhost’ identified with mysql_native_password BY ‘新密码’;
-
退出mysql,输入quit
2.服务管理
-
使用管理员身份运行cmd,关闭mysql服务
net stop mysql8
-
删除mysql服务
sc delete mysql8 或者 mysqld remove mysql8
-
刪除mysqlDB目录文件( 安裝mysql时my.ini指定的目录)
SQL语句
SQL : Structure Query Language(结构化查询语言)
SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,并删除条目等操作。 Create, Read, Update, and Delete 通常称为CRUD操作。
分类
- DDL(Data Defifinition Language):数据定义语言,用来定义数据库对象:库、表、列等。
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据)增删改。
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。
- DQL(Data Query Language):数据查询语言,用来查询记录(数据)查询。
DDL 数据定义语言
创建数据库
create database 数据库名; -- 创建数据库
查看数据库
show databases; -- 查看当前数据库服务器中的所有数据库
show create database 数据库名; -- 查看已创建的数据库的定义信息
Select database(); -- 查看当前使用的数据库
use 数据库名; -- 切换数据库
修改数据库
alter database 数据库名 character set 编码方式;
ALTER DATABASE mydb2 character SET utf8;
删除数据库
drop database 数据库名;
表操作
创建表
CREATE TABLE 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
列名n 数据类型 [约束]
);
[约束] 表示可有可无
常用数据类型:
int:整型
double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为
999.99;默认支持四舍五入
char:固定长度字符串类型; char(10) 'aaa ' 占10位
varchar:可变长度字符串类型; varchar(10) 'aaa' 占3位
text:字符串类型,比如小说信息;
blob:字节类型,保存文件信息(视频,音频,图片);
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
show tables; -- 当前数据库中的所有表
show create table 表名; -- 查看表格的创建细节
desc 表名 -- 查看表的字段信息
alter table 旧表名 rename 新表名; -- 修改表名
alter table 表名 character set 编码方式; -- 修改表的字符集为gbk
ALTER TABLE user CHARACTER SET gbk;
drop table 表名; -- 删除表
列操作
alter table 表名 add 新列名 新的数据类型 -- 增加列
ALTER TABLE employee ADD image blob; -- 在上面员工表的基本上增加一个image列
alter table 表名 change 旧列名 新列名 新的数据类型 -- 修改列
ALTER TABLE employee MODIFY job varchar(60); -- 修改job列,使其长度为60
ALTER TABLE employee change job job varchar(60);-- 修改job列,使其长度为60
ALTER TABLE user CHANGE name username varchar(100); -- 修改name列, 列名name修改为username
alter table 表名 drop 列名 -- 删除列
练习
表名 card(会员卡表)
列名 数据类型
cardid int
cardnum varchar(20)
regDate date
需求:
(1)创建该表
(2)将card表名修改为CardInfo
(3)添加delDate(注销时间) 列到表中
(4)将cardnum改为varchar(30)
(5)删除regDate列
(6)删除cardInfo表
create table card (cardid int,cardnum varchar(20),regdate date);
alter table card rename CardInfo;
alter table CardInfo add delDate date;
alter table CardInfo modify cardnum varchar(30);
alter table CardInfo drop regDate;
drop table CardInfo;
DML 数据操作语言
DML是对表中的数据进行增、删、改的操作。主要包括:INSERT 、UPDATE、 DELETE
- mysql中,字符串类型和日期类型都要用单引号括起来。
- 空值:null
1. 插入操作: insert
insert into 表名(列名) values(数据值);
insert into student(stuname,stuage,stusex,birthday) values('张三1',18,'a','2000-1-1');
-- 当给所有列添加数据的时候, 列名可以省略,如下:
insert into student values('李四',12,'1111',189.98,'2000-1-1','男','2007-1-1');
-- 同时添加多行
insert into 表名(列名) values(第一行数据),(第二行数据),(),();
insert into student(stuname,stuage,stusex,birthday)
values('张三3',18,'a','2000-1-1'),
('张三4',18,'a','2000-1-1'),
('张三5',18,'a','2000-1-1');
练习:
create table emp(
id int primary key,
name varchar(100) not null,
gender varchar(10) not null, -- 性别
birthday date,
salary float(10,2), -- 薪水
entry_date date, -- 入职日期
resume text ); -- 简历
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(1,'zhangsan','female','1990-5-10',10000,'2015-5-5-','goodgirl');
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(2,'lisi','male','1995-5-10',10000,'2015-5-5','good boy');
INSERT INTO emp(id,name,gender,birthday,salary,entry_date,resume) VALUES(3,'你好','male','1995-5-10',10000,'2015-5-5','good boy');
2. 修改操作:update
UPDATE 表名 SET 列名1=列值1,列名2=列值2 ... WHERE 列名=值
练习:
将所有员工薪水修改为5000元。
将姓名为’zs’的员工薪水修改为3000元。
将姓名为’aaa’的员工薪水修改为4000元,resume改为ccc。
将wu的薪水在原有基础上增加1000元。
update emp set salary=5000;
update emp set salary=3000 where name='zs';
update emp set salary=4000,resume='ccc' where name='aaa';
update emp set salary=salary+1000 where name='wu';
-- sql中的运算符:
(1)算术运算符 【+,-,*,/(除法),求余(%)】
示例:
5/2
5%2
2/5
2%5
(2)赋值运算符 【=】
注:赋值方向:从右往左赋值
示例: name='张三'
(3) 逻辑运算符:【and(并且),or(或者),not(取非)】
作用:用于连接多个条件时使用
(4) 关系运算符:
>,<,>=,<=,=(等于),<>(不等于),!=(不等于)
3. 删除操作:DELETE:
DELETE from 表名 【WHERE 列名=值】
-- 删除表中所有数据
delete from 表名;
truncate table 表名;
-- 为空的条件:列名 is null or 列名=''(两个单引号表示空字符串)
-- DELETE 删除表中的数据,表结构还在; 删除后的数据可以找回 rollback
-- TRUNCATE 删除是把表直接DROP掉,然后再创建一个同样的新表。
-- 删除的数据不能找回。执行速度比DELETE快。
DCL 数据控制语言
1. 创建用户
create user 用户名@指定ip identified by 密码;
create user test123@localhost IDENTIFIED by 'test123';
-- 指定IP才能登陆
create user 用户名@客户端ip identified by 密码;
create user test456@10.4.10.18 IDENTIFIED by 'test123';
-- 任意IP均可登陆
create user 用户名@'%' identified by 密码;
create user test7@'%' IDENTIFIED by 'test7';
2. 用户授权:
-- 给指定用户授予指定数据库指定权限
grant 权限1,权限2,........,权限n on 数据库名.* to 用户名@IP;
grant select,insert,update,delete,create on chaoshi.* to 'test456'@'127.0.0.1';
-- 给指定用户授予所有数据库所有权限
grant all on *.* to 用户名@IP
grant all on *.* to 'test456'@'127.0.0.1';
3. 用户权限查询:
show grants for 用户名@IP;
show grants for 'root'@'%';
4. 撤销用户权限:
revoke 权限1,权限2,........,权限n on 数据库名.* from 用户名@IP;
REVOKE SELECT ON *.* FROM 'root'@'%' ;
5. 删除用户:
drop user 用户名@IP;
drop user test123@localhost;
DQL 数据查询语言
数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
语法: SELECT 列名 FROM 表名 【WHERE --> BROUP BY-->HAVING--> ORDER BY】
* 表示所有列
SELECT 要查询的列名称
FROM 表名称
WHERE 限定条件 /*行条件*/
GROUP BY grouping_columns /*对结果分组*/
HAVING condition /*分组后的行条件*/
ORDER BY sorting_columns /*对结果分组*/
LIMIT offset_start, row_count /*结果限定*/
测试数据
-- 创建表stu
CREATE TABLE stu ( sid CHAR(6), sname VARCHAR(50), age INT, gender VARCHAR(50) );
INSERT INTO stu VALUES('S_1001', 'liuYi', 35, 'male');
INSERT INTO stu VALUES('S_1002', 'chenEr', 15, 'female');
INSERT INTO stu VALUES('S_1003', 'zhangSan', 95, 'male');
INSERT INTO stu VALUES('S_1004', 'liSi', 65, 'female');
INSERT INTO stu VALUES('S_1005', 'wangWu', 55, 'male');
INSERT INTO stu VALUES('S_1006', 'zhaoLiu', 75, 'female');
INSERT INTO stu VALUES('S_1007', 'sunQi', 25, 'male');
INSERT INTO stu VALUES('S_1008', 'zhouBa', 45, 'female');
INSERT INTO stu VALUES('S_1009', 'wuJiu', 85, 'male');
INSERT INTO stu VALUES('S_1010', 'zhengShi', 5, 'female');
INSERT INTO stu VALUES('S_1011', 'xxx', NULL, NULL);
-- 创建雇员表
CREATE TABLE emp2(
empno INT, -- 工号
ename VARCHAR(50), -- 名字
job VARCHAR(50), -- 职位
mgr INT, -- 上级工号
hiredate DATE, -- 入职时间
sal DECIMAL(7,2), -- 薪水
comm decimal(7,2), -- 佣金
deptno