SQL:Structured query language 即 结构化查询语句、
数据库简介
什么是数据库?
数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。
关系型数据库:存储的都是实体与实体之间的关系。
可以通过ER模型图来描述之间的关系
常见的数据库:
Oracle:甲骨文公司的数据库产品,大型的收费的数据库。
SQLServer:微软公司的数据库产品,中型的收费的数据库(一般与.NET一块使用)。
MySQL:是开源的,免费的数据库产品。在5.x版本是免费的,后来被oracle收购(6.x是收费的)
DB2:IBM公司的数据库产品,大型的收费的数据库。
SyBASE:已经退出了历史舞台,PowerDesigner(数据库建模工具)
常见的关系化数据库如下图所示:
MySQL的卸载:
卸载步骤一:先找到MySQL的安装路径,找到my.ini的配置文件,找到两个路径,basedir和datadir
卸载步骤二:然后卸载数据库,再找到以上两个路径删除文件夹。
开始卸载:(首先关闭MySQL服务)
(1)找到MySQL安装目录下的my.ini用编辑器打开,复制以上两个路径
basedir="D:/MySQL/"
datadir="C:/ProgramData/MySQL/MySQL Server 6.0/Data/"
(2)打开控制面板,开始卸载MySQL
原因:这种错误是由于安装权限不足造成的,解决方案如下
打开任务管理器,结束explorer.exe ,再以管理员身份创建一个新的explorer.exe进程
然后就可以卸载了
如果这种还不能卸载 就直接安装360卫士进行卸载。
(3)然后删除以上两个文件夹
basedir="D:/MySQL/"
datadir="C:/ProgramData/MySQL/MySQL Server 6.0/Data/"
OK MySQL已经完全卸载了
推荐:最好的方式是安装360 直接卸载,然后删除上述的两个目录。
MySQL的安装和配置:
(2)选择同意
(3)选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,选择“Custom”,按“next”键继续。
(4)选择MySQL的安装路径和数据的安装路径。
选择MySQL Server,点击Browse..选择安装的路径。
还可以选择Server data files,点击Browse..选择安装的路径。
确认一下先前的设置,如果有误,按“Back”返回重做。按“Install”开始安装。
继续next 直到出现下面的界面
点击Finish完成安装。
二、MYSQL的配置
(1)安装完成了,出现如下界面将进入mysql配置向导。
(2)选择配置方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。
(3)选择服务器类型,“Developer Machine(开发测试类,mysql占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”
(4)选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),按“Next”继续。
默认选择next
(5)选择网站并发连接数,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,自己输一个数)”。
(6)MySQL的默认端口号是3306,不要去修改,使用默认的端口号就OK。在这个页面上,您还可以选择“启用标准模式”(Enable Strict Mode),这样MySQL就不会允许细小的语法错误。如果是新手,建议您取消标准模式以减少麻烦。但熟悉MySQL以后,尽量使用标准模式,因为它可以降低有害数据进入数据库的可能性。按“Next”继续
(7)对mysql默认数据库语言编码进行设置(重要),一般选UTF-8,按 “Next”继续。
(8)选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql.exe -uusername -ppassword;”就可以了,不用指出mysql.exe的完整地址,很方便),我这里全部打上了勾,Service Name不变。按“Next”继续。
(9)询问是否要修改默认root用户(超级管理)的密码。“Enable root access from remote machines(是否允许root用户在其它的机器上登陆,如果要安全,就不要勾上,如果要方便,就勾上它)”。最后“Create An Anonymous Account(新建一个匿名用户,匿名用户可以连接数据库,不能操作数据,包括查询)”,一般就不用勾了,设置完毕,按“Next”继续。
(10)确认设置无误,按“Execute”使设置生效,即完成MYSQL的安装和配置
注意:设置完毕,按“Finish”后有一个比较常见的错误,就是不能“Start service”,一般出现在以前有安装mysql的服务器上,解决的办法,先保证以前安装的mysql服务器彻底卸载掉了;不行的话,检查是否按上面一步所说,之前的密码是否有修改,照上面的操作;如果依然不行,将mysql安装目录下的data文件夹备份,然后删除,在安装完成后,将安装生成的 data文件夹删除,备份的data文件夹移回来,再重启mysql服务就可以了,这种情况下,可能需要将数据库检查一下,然后修复一次,防止数据出错。
MySQL重置密码
如果忘记了MySQL密码,将无法连接MySQL,重置密码方案如下:
(1)停止MySQL服务
运行—> services.msc 进入到服务器界面
(2)在cmd>输入一个命令
mysqld --skip-grant-tables (开启一个MySQL服务,不需要进行认证)
(3)切记:不要关闭步骤(2)中打开的服务窗口。新打开一个cmd窗口
mysql -u root -p 不需要输入密码,就可以进入
(4)输入命令 show databases; 查看数据库,输入命令use mysql; 使用mysql数据库。
(5)修改密码的语句为:
update user set password=password('root') WHERE user='root';
(6)将两个窗口都关闭。
(7)在任务管理器中结束(mysqld)进程
(8)重启MySQL服务
具体步骤如下:
1、通过services.msc打开服务界面,关闭MySQL服务
2、
3、重启MySQL服务。测试如下:
MySQL数据库服务器、数据库和表关系
- 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器‘、数据库和表的关系如图所示:
SQL语言:
创建数据库
查看、删除数据库
查看前面创建的mydb2数据库的定义信息 show create database mydb2;
删除前面创建的mydb1数据库 drop database mydb1;
修改数据库
查看当前正在使用数据库: select database();
创建表(基本语句)
字段1 类型(长度) 约束,
字段2 类型(长度) 约束,
字段3 类型(长度) 约束,
字段4 类型(长度) 约束
);
每一行字段后面要有逗号,但是最后一行没有逗号。
数据的类型后面有长度,如果是字符串类型,长度必须加。如果其他类型可以不加。默认长度。int 默认长度11
MySQL常用数据类型
- 字符类型 (VARCHAR、CHAR)
- 大数据类型(BLOB、TEXT)
- 数值型(TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE)
- 逻辑性(BIT)
- 日期型(DATE、TIME、DATETIME、TIMESTAMP)
id int,
name varchar(20),
gender varchar(20),
birthday date,
entry_date date,
job varchar(30),
salary double,
resume longtext
);
查看表结构 desc 表名;
注意:创建数据表时,只有字符串类型必须写长度,而其他类型都有默认长度
定义单表字段的约束
主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)
唯一约束 unique : 该字段的值不允许重复
* 一张表中可以有很多个唯一约束,只能有一个(两个)作为主键约束
非空约束 not null :该字段的值不能为空
create table employee2 (
id int primary key auto_increment,
name varchar(20) unique not null,
gender varchar(20) not null,
birthday date not null,
entry_date date not null,
job varchar(30) not null,
salary double not null,
resume longtext
);
如果主键约束类型为 数值型 int bigint ,添加auto_increment 自动增长
查看删除表
修改表
数据库CRUD语句
Insert语句与处理插入字符中文乱码
- 插入的数据应与字段的数据类型相同。
- 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
- 在values中列出的数据位置必须与被加入的列的排列位置相对应。
- 字符和日期类型数据应被包含在单引号中。
- 插入空值:不指定或insert into table values (null);
出错了:
ERROR 1366 (HY000): Incorrect string value: '\xC3\xF7' for column 'name' at row 1 ;
错误原因:mysql client 采用默认字符集编码 gbk
查看系统所有字符集 : show variables like 'character%';
MYSQL中共有6个地方字符集 :client connetion result 和客户端相关 、database server system 和服务器端相关
mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。
- client是客户端使用的字符集。
- connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
- database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
- results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
- server是服务器安装时指定的默认字符集设定。
- system是数据库系统使用的字符集设定。(utf-8不可修改)
修改客户端字符集 [mysql] 后字符集 default-character-set=gbk
Update语句更新数据
[WHERE where_definition]
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行
update user set salary=5000;
将姓名为’班长’的员工薪水修改为3000元。
update user set salary=3000 where username='班长';
将姓名为’美美’的员工薪水修改为4000元,job改为BOSS。
update user set salary=4000,job='BOSS' where username='美美';
将班长的薪水在原有基础上增加1000元。
update user set salary = salary+1000 where username='班长';
Delete删除数据
- 如果不使用where字句,将删除表中所有数据。
- Delete语句不能删除某一列的值(可以使用update进行修改)
- 使用delete语句仅删除记录,不删除表本身。如果要删除表,使用drop table语句
- 同insert和update一样,从一个表中删除记录将引起其他表的参照完整性问题,在修改数据库数据时 切记注意外键约束
- 删除表中数据也可以使用truncate table_name语句,它与delete不同 truncate等于把表drop掉再重新建立一张同样结构的空表。
Select语句(1)
select 字段名1,字段名2,字段名3 from 表名; 显示查询字段名
select DISTINCT 字段名 from 表名; 去除重复的数据。
create table student(
id int,
name varchar(20),
chinese float,
english float,
math float
);
insert into student(id,name,chinese,english,math) values(1,'张小明',89,78,90);
insert into student(id,name,chinese,english,math) values(2,'李进',67,53,95);
insert into student(id,name,chinese,english,math) values(3,'王五',87,78,77);
insert into student(id,name,chinese,english,math) values(4,'李一',88,98,92);
insert into student(id,name,chinese,english,math) values(5,'李来财',82,84,67);
insert into student(id,name,chinese,english,math) values(6,'张进宝',55,85,45);
insert into student(id,name,chinese,english,math) values(7,'黄蓉',75,65,30);
查询表中所有学生的信息
Select语句(2)
Select语句(3)where过滤
Select语句(5)order by排序
聚集函数—count
聚集函数—SUM
聚集函数—AVG
聚集函数—MAX/MIN
Select语句(6)—GROUP BY
SELECT A_ID ,COUNT(*) FROM C GROUP BY A_ID; =>合法
SELECT A_DATE,COUNT(*) FROM C GROUP BY A_ID; =>不合法,如图示中的按A_ID分组后,对于其他各列的查询只能是汇总查询,否则没有意义
create table orders(
id int,
product varchar(20),
price float
);
insert into orders(id,product,price) values(1,'电视',900);
insert into orders(id,product,price) values(2,'洗衣机',100);
insert into orders(id,product,price) values(3,'洗衣粉',90);
insert into orders(id,product,price) values(4,'桔子',9);
insert into orders(id,product,price) values(5,'洗衣粉',90);
select product,sum(price) from orders group by product;
在group by 语句后面 添加having 条件语句 ---- 对分组查询结果进行过滤
练习:查询购买了几类商品,并且每类总价大于100的商品
select product,sum(price) from orders group by product having sum(price) > 100;
试题:where 和 having 条件语句的区别 ?
where 是在分组前进行条件过滤,having 是在分组后进行条件过滤
使用where地方都可以用 having替换 , 但是having可以使用分组函数,而where后不可以用分组函数
SELECT语句小结:S-F-W-G-H-O组合
MySQL数据库的备份与恢复
1、备份命令 mysql/bin/mysqldump 将数据库SQL语句导出
语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
例如: 备份day12数据库 --- c:\day12.sql
cmd > mysqldump -u root -p day12 > c:\day12.sql 回车输入密码
INSERT INTO student VALUES (1,'关羽',85,76,70),(2,'张飞',70,75,70),(3,'赵云',90,65,95),(4,'刘备',NULL,55,38);
2、恢复命令 mysql/bin/mysql 将sql文件导入到数据库
语法: mysql -u 用户名 -p 数据库名 < 磁盘SQL文件路径
***** 导入SQL 必须手动创建数据库 ,SQL不会创建数据库
例如:将c:\day12.sql 导入 day12数据库
cmd > mysql -u root -p day12 < c:\day12.sql 回车密码
补充:恢复SQL也可以在数据库内部执行 source c:\day12.sql