数据库:保存有组织的数据的容器。(通常是一个文件或一组文件)
表:某种特定类型数据的结构化清单。数据库中的每个表都有一个名字,用来标识自己,此名字是唯一的
列:表中的一个字段。所有表都是由一个或多个列组成。数据库中每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。
行:表中的一个记录。
数据类型:数值、字符串、时间
SQL:是一种专门用来与数据库通信的语言。
1、SQL不是某个特定数据库专有的语言。几乎所有重要的数据库都支持SQL
2、SQL简单易学。。。语句全是描述性很强的英文单词组成。
范式:符合高一范式的设计,必定符合低一级范式。。eg:符合2NF的关系模式,必定符合1NF
1NF:符合1NF的关系中的每个属性都不可再分。字段不可再分。是所有数据库的最基本要求。
2NF:主键依赖,就是一张表里面的字段,必须是跟主键相关的,不能把无关的数据放进来。
3NF:就是不能重复相同的信息。是在一个对象里引用了另外一个对象。主外键关联。
数据库分为两种:关系型 和 非关系型
关系型: MySQL、Oracle、sqlite
非关系型:Redis、MongoDB
数据库模型:
关系型数据库存储想象成Excel:
一个excel就相当于一个数据库
一个sheet相当于数据库中的一张表
行
列
#登录数据库
mysql -uroot -p
#显示mysql中所有数据库,注意封号,必须要加,不然认为你没有结束
show databases;
#创建数据库
create database dbname;
#指定编码格式为utf-8
create database dbname charset=utf8;
#删除一个数据库
drop database 数据库名字
#切换数据库,提示database changed代表切换成功
use 数据库名字
#查看当前所在的数据库
select database();
#查看数据库中的表
show tables;
#创建表
create table 表名 (字段 数据类型,id int primary key auto_increment);
#显示列 show也可以用来显示列,show columns from 表名
show columns from student;
#显示列2,算是上面一条语句的快捷方式
describe student;
表操作
1、创建表 :create table table_name(name text,id int primary key auto_increment);
2、table_name 后 使用圆括号去书写表中的数据结构
3、每个字段用 逗号,隔开
4、字段声明格式:字段名 字段类型
5、每个表中都必须包含一个主键。主键是唯一的,主键通常使用数字类型。在被当做主键的字段后面加上 primary key
6、主键通常 是 自增长 auto_increment。。MySQL可以自动地为每个行分配下一个可用编号,不用在添加一行时,手动分配唯一值。
7、插入数据:insert into table_name values(value1,value2...);value一定要和创建表时的字段顺序要完全吻合,个数要完全吻合
8、insert into table_name(字段名1,字段名2) value (value1,value2...);
注意:字段名和value要一一对应。。没有声明出来的字段名一定要有默认值
可视化工具
#fn+左方向键 回到行首
#ctl + / 注释
#ctl + shift +/ 取消注释
#f7 从这里运行一个语句
#shift + ctl + r 运行已选择的
SHOW DATABASES;
CREATE DATABASE test03 charset=utf8;
#切换到test03
use test03;
#创建一个表
create table usermodel(id int primary key auto_increment,
u_name text,
u_password text);
#插入一条数据
insert into usermodel(u_name,u_password) values ('daisy11','120');
#查询
SELECT * FROM usermodel;
数据类型
tinyint 一般用来存年龄之类的小的整数,其他用int
decimal(12,4) 总的长度是12位,4是小数。整数就是12-4-1=7
字符串:
char:长度范围是0~255,当你想要存储一个长度不足255的字符串时,mysql会用空格填充剩下的字符。
varchar:类型在5.0以下的版本中最大长度是255,在5.0以上的版本中,数据类型的长度支持到了65535(字节).
text :text没有默认值,最大长度是2的16次方-1
总结起来,知道固定长度的是用char,超过255字符只能用varchar或者text。(能用varchar的地方就不要用text)
char(50):存放的不足50,会拿空格填充。占用空间更多,但是长度固定,参与运算时速度更快。
varchar(50):是一种比char更加灵活的数据类型。表示的是可以存储的最大字符串长度为50个字节。存储的是实际的长度,为传进来的数据的长度。
文本的比较相同的规则:首先比较的是长度,之后才是按位比较。
crud
1、新增数据
insert into 语句用于向表中插入一行数据
insert into 表名称 values (值1,值2)
我们还可以指定所要插入的列:
insert into 表名称(列1,列2,。。。。)values (值1,值2.。。)
不管使用哪种insert语法,都必须给出values的正确数目。如果不提供列名,则必须给其提供一个默认值。如果提供了列名,则必须给每个列对应出一个值。否则会报错。
省略列的条件:
该列定义为允许NULL
在表定义中给出默认值。这表示如果不给出值,将使用默认值
INSERT into student VALUES(10,'green',18,1,1)
insert into grade (g_name,g_student_num) values ('python1804',55);
insert low_priority into grade (g_name,g_student_num) values ('python1804',55);
可以通过在insert和into之间添加关键字 low_priority,指示MySQL降低insert语句的优先级。
多条插入
insert语句有多组值,每组值用一对圆括号括起来,用逗号分隔。
可以提高数据库处理的性能,因为MySQL用单条insert语句处理多个插入比用多条insert语句要快。
insert LOW_PRIORITY into grade (g_name,g_student_num) VALUES ('python1803',33),
('HTML51805',70),
('python1807',44);
修改数据
更新(修改)表中的数据,使用update语句
1、更新表中特定行
2、更新表中所有行
不要省略where,否则更新表中所有行。用set命令来将新值赋给被更新的列
语法:update 表名称 set 列名称 = 新值 where 列名称 = 某个值
update语句由3部分组成:
1、要更新的表
2、列名和他们的新值
3、确定要更新行的过滤条件。
在更新多个列时,只需要使用单个set命令。每个 “列=值”之间用逗号分隔(最后一列不用逗号)
update grade set g_name = 'h51801' where id = 4;
update grade set g_name = 'bigdata' where g_student_num = 33;
update grade set g_student_num = 99;
update grade set g_name = 'VR1801' ,g_student_num = '100' WHERE id = 5;
#为了删除某个列的值,可设置它为NULL(表定义允许为null)
update grade set g_student_num = NULL WHERE id = 4;
删除数据
delete 语句用于删除表中的行。需要where条件,来删除表中的指定的行。delete不需要列名,delete删除整行而不是删除列。为了删除指定的列,请使用update语句。
语法:delete from 表名字 where 列名 = 值
DELETE from grade WHERE g_name = 'bigdata';
DELETE from grade;
#更快的删除,如果想从表中删除所有行,不要使用delete。
#使用truncate 表名 语句。它能完成相同的工作,但是速度更快。
#truncate实际上是删除原来的表并重新创建一个表,而不是逐行删除表中的数据
truncate grade;
数据库引擎
mysql的存储 是以文件的形式。
innoDB
.frm 后缀:存储表的框架结构
.ibd后缀:存储表的数据和索引
show create table student;
myisam
.frm 后缀:存储表的框架结构,该文件与数据库引擎无关
.MYD :用来存储表的数据
.MYI :用来存储表的索引
myisam表可以存储行记录数。innoDB不保存具体行数。执行slecte count(*) from table
时需要全表扫描。。myisam用一个变量保存了整个表的行数。执行上面语句时只需要读出该变量即可,速度很快
两者区别:
1、innoDB支持事务处理,比较安全。数据文件和索引绑在一起的,必须要有主键,通过主键索引效率会很高。但是要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应过大。
2、大访问率的查询,如果表中绝大多数都只是读查询,可以考虑myisam。
3、写频繁,用innoDB
4、myisam不支持外键。
网址组成(四部分):
协议 http,https(https是加密的http)
主机 g.cn zhihu.com 之类的网址
端口 http协议默认是80,因此一般不用填写,ip相当于地址,端口就是收信人的名字
路径 /question/43567890 都是路径