数据库:DataBase,DB:指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。简单理解数据的仓库。
数据库管理系统 (DataBase Management System, DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库通过数据库管理系统创建和操作的。
常见DBMS:Oracle、MySQL、DB2、Microsoft SQL Server、SQLLite(手机端)。
卸载MySQL后,需要删除文件和服务,删除服务通常是管理员权限的命令行下执行:sc delete MySQL 回车。
安装目录:
bin文件夹:存放可执行文件
include文件夹:存放头文件
lib文件夹:存放库文件
share文件夹:存放字符集、语言等信息
my.ini文件常用参数:
default-character-set:客户端默认字符集
character-set-server:服务端默认字符集
port:客户端和服务器端的端口号
default-storage-engine:MySQL默认存储引擎 INNODB
SQL(Structure Query Language 结构化查询语言),关系型数据库语言的国际标准。
SQL是一种标准化语言,允许用户在数据库上执行操作,如创建数据库、表等等,查询、更新、删除、改。
Create \ Read \ Update \ and Delete 通常称为 CRUD。
SQL语句分类:
DDL(Data Definition Language,数据定义语言),用来定义数据库对象:库、表、列等。
DML(Data Manipulation Language,数据操作语言),用来定义数据库记录(数据)。
DCL(Data Control language,数据控制语言),用来定义访问权限和安全级别。
DQL(Data Query language,数据查询语言),用来查询记录(数据)。
SQL语句以 ; 结尾
注释:(1)#开头 (2) --空格 开头 (3)/*多行注释*/
show databases; #显示当前mysql中的数据库
系统默认数据库:
information_schema: 提供了访问数据库元数据的方式。元数据是什么? 是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限。别动!!!
mysql: mysql的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息,不可以删除。!!!
performance_schema:性能优化的数据库
test: 测试数据库,是一个完全的空数据库,没有任何表,可以删除。
使用工具(SQLyog等)连接数据库前,必须为root账户创建密码!!!
语法:
方法一:使用SET PASSWORD命令(推荐使用这个)
mysql> set password='123';
方法二:使用mysqladmin()
例子:mysqladmin -uroot -p123456 password 123;
方式三:使用UPDATE修改mysql库中的user表中root账户的密码字段数据
首先登录MySQL,连接上mysql服务端。
mysql> use mysql; use mysql; 的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。
mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。
mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。
使用工具登录mysql 8.0版本的时候,经常提示2058错误:8.0版本默认的身份验证机制有所改变!!!
做法:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root@123';
FLUSH PRIVILEGES;
注意:by后面的密码,修改即修改账户密码。
语法:
CREATE DATABASE [IF NOT EXISTS] db_name;
CREATE DATABASE [IF NOT EXISTS] db_name character SET gbk;
查看创建的数据库的定义信息(默认字符编码)
show CREATE DATABASE db_name;
修改数据库的字符集:
ALTER DATABASE db_name character SET utf8;
删除数据库:
DROP DATABASE IF EXISTS db_name;
查看当前使用的数据库:
select database(); //没选定数据库时,返回 null
切换数据库:
USE db_name;
退出数据库:
quit 或 exit
CREATE TABLE [IF NOT EXISTS] 表名(
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束,
…
字段n 字段类型(长度) 约束
)[charset=utf8];
例子1:
CREATE TABLE IS NOT EXISTS student(
id int not null,
)CHARSET=UTF-8;
----------------------------------------------------------------------------------------------------------------
增删改查
增、改(字段操作):
ALTER TABLE student ADD image blob; //添加image列
ALTER TABLE student MODIFY address varchar(60); //修改address列,使其长度为60
ALTER TABLE student DROP image; //删除image列,一次只能删除一列
ALTER TABLE student CHANGE 旧字段名 新字段名 字段类型 [约束条件]// 修改字段名
改(表):
RENAME TABLE student TO user; //改表名
-------------------------------------------------------------------------------------------------------------------
删:DROP TABLES table_name;
SHOW TABLES; //查看当前数据库中包含的表
DESC table_name; //查看表的字段信息
SHOW CREATE TABLE user; //查看表的创建细节
DESC table_name; //查询表中包含的字段
DML是对表中的数据进行增、删、改的操作。不能和DDL混淆了。
主要包括:INSERT、UPDATE、DELETE
在MySQL中,字符串类型和日期类型都要用单引号括起来。
空值:null。
(1)插入操作:INSERT
语法:INSERT INTO 表名(列名1,列名2…) VALUES(值1,值2…);
(2)修改操作:UPDATE
语法:UPDATE 表名 SET 列名1=值1,列名2=值2… WHERE 列名=值;
(3)删除操作:DELETE
语法:DELETE FROM表名【WHERE 列名=值】; //删除指定行数据
DELETE FROM 表名; //删除表中所有数据
TRUNCATE TABLE 表名; //删除表和数据,再创建同一个空表
---------------------------------------------------------------------------------------------------------------------
int:整型(4字节)
double:浮点型(8字节)
double(5,2) //最多五位,其中必须由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:日期类型,格式为:yyy-MM-dd
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyy-MM-dd hh:mm:ss
---------------------------------------------------------------------------------------------------------------------
常用约束条件:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
主键约束:primary key //(保证数据唯一性),不能重复,不能为null;
唯一约束:unique [key] //不能重复,可以为null。
非空约束:not null
默认约束:default
外键约束:foreign key
自动增长:auto_increment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
查看数据库编码的具体信息: show variables like ‘character%’;
修改数据库服务端编码:
set character_set_server='utf8';
临时更改客户端和服务器结果集的编码:
set character_set_client=gbk;
set character_set_results=gbk;
或者:SET NAMES ‘GBK’’; //client connection results
数据库执行DQL语句,不会对数据进行改变,而是让数据库发送结果集给客户端。
查询返回的结果集是一张虚拟表。
查询关键字:SELECT
语法:SELECT 列名 FROM 表名 【WHERE à GROUP BY à HAVING à ORDER BY à LIMIT】;
SELECT selection_list //要查询的列名称
FROM table_list //要查询的表名称
WHERE condition //行条件
GROUP BY grouping_columns //对结果分组
HAVING condition //分组后的行条件
ORDER BY sorting_columns //对结果排序
LIMIT offset_start, row_count //结果限定
条件查询:
就是在查询时给出where字句,在where字句中可以使用如下运算符及关键字:
比较运算符:
| =、!=、<>、<、<=、>、>=;
| BETWEEN…AND;
| IN(set);
| IS NULL;
关系运算符:
| AND; &&
| OR; ||
| NOT; !
算术运算符:
| + - * / %
HAVING与WHERE的区别:
LIMIT 限制行查询
LIMTI 起始行,行数;
分页查询://一次查询10行