什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
-
1.数据以表格的形式出现
-
2.每行为各种记录名称
-
3.每列为记录名称所对应的数据域
-
4.许多的行和列组成一张表单
-
5.若干的表单组成database
MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的关系数据库管理系统应用软件之一。
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 每个表都包含下列内容:
- 表头(header): 每一列的名称;
- 列(col): 具有相同数据类型的数据的集合;
- 行(row): 每一行用来描述某条记录的具体信息;
- 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
- 键(key): 键的值在当前列中具有唯一性。
MySQL只是一种能够帮助我们管理数据的软件,还有其他类似的软件也是通过发送指令来帮你管理数据库。
其他类似软件:
关系型数据库:sqlite,db2,oracle,access,sql server,MySQl
非关系型数据库:mongodb,redis
关系型:彼此之间有约束或者有联系
修改密码与破解管理员密码
mysqladmin -uroot -p password "123"
第一次修改完密码以后,之后还修改密码需要
mysqladmin -uroot -p123 password "123456"
为了后续调试方便,这里把密码设为空值
mysqladmin -uroot -p123 password "新密码"
破解密码
-
先关闭mysqld服务端
-
以跳过授权表的方式在命令行中启动mysqld服务端
mysqld --skip-grant-tables
-
客户端直接以无密码的方式登陆root用户修改密码
mysql -uroot -p
-
修改管理员密码
update mysql.user set password=password("123") where user="root" and host="localhost"; flush privileges; 刷新权限
-
命令行杀死mysqld服务
tasklist |findstr mysqld taskkill \F \PID 'PID'
-
服务管理正常启动mysqld
统一字符编码
mysql命令:"\s" 查看编码
修改配置文件,执行时会自动查找my.ini文件
mysql不输用户名和密码,会默认以游客模式登陆,不好!
my.ini配置文件特点
[mysql]
终端输入mysql打头的命令就会加载下面的配置
username='root' 演示确实加载改文件,但是username叫user才正确
password = '123'
[mysqld]
通用配置
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
基本SQL语句
对数据的增删改查
SQL书写错误,只要没加分号,可以加\c使前面的SQL语句失效
-
针对文件夹的(库)
增 create database db1 charset utf8; 改 alter database db1 charset gbk; 查 show databases; show create database db1; 删 drop database db1;
-
针对文件的(表)
文件首先需要在文件夹下面,所以在操作文件之前,应该先确定操作的是哪个文件夹下面的文件
切换数据库 user db1; select database(); 查看当前所在的库 增 create table t1(id int,name char); 创建出来的可能是多个文件,解耦管理 改 alter table t1 modify name char(16); 查 show tables; show create table t1; 查看表的详细信息 describe t1; == desc t1; 查看表结构 删 drop table t1;
-
针对(记录)
增 insert into db1.t1 values (1,'cat'),(2,'dog'),(3,'pig'); into可加可不加,db1可以不指定,默认就是在当前库下 改 update db1.t1 set name='animal' where id > 1; update db1.t1 set name='animal' where id = 2 or id = 3; 查 select id,name from db1.t1; db1可不指定,默认当前库下 select * from t1; 删 delete from db1.t1 where id >3; delete from db1.t1 where name='dog' 这里注意如果少了一个引号,后面无论敲什么都没有用了需要将引号补全
创建表的完整语法
#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
注意:
- 在同一张表中,字段名不能相同
- 宽度和约束条件可选,字段名和类型是必须的
- 最后一个字段后不能加逗号!
1.宽度指的是对存储数据的限制
create table userinfo(name char);
insert into userinfo values('linwow');
--没有安全模式的数据库版本,能够存放数据但是只会存进去一个j
--最新数据库版本直接报错提示无法存储:Data too long for column 'name' at row 1
2.约束条件初识>>> null 与 not null
create table t1(id int,name char not null);
insert into t1 values(1,'l'); # 正常存储
insert into t1 values(2,null); # 报错
类型与约束条件区别:
类型:限制字段必须以什么样的数据类型存储
约束条件:约束条件是在类型之外添加一种额外的限制
存储引擎
数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。
MySQL中的存储引擎
MySQL中的存储引擎:InnoDB,MyISAM,Blackhole,Memory,CSV,Archive,Merge,Federated,Example。
查看所有的存储引擎
show engines;
查看不同存储引擎存储表结构文件特点
create table t1(id int)engine=innodb;
innodb缺点是:存储空间会占用比较大。
create table t2(id int)engine=myisam;
MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。
create table t3(id int)engine=blackhole;
Blackhole虽然不存储数据,但是MySQL还是会正常的记录下Binlog,而且这些Binlog还会被正常的同步到Slave上,可以在Slave上对数据进行后续的处理。
create table t4(id int)engine=memory;
memory:该存储引擎最大的特点是,所有数据均保存在内存中。
insert into t1 values(1);
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
MyISAM与InnoDB的区别
InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。InnoDB表的大小更加的大,用MyISAM可省很多的硬盘空间。