数据库简介
概念:电子化的文件库,储存电子文件的场所,户可以对文件中的数据运行新增、截取、更新、删除等操作.
用途:用于存储生活中的一切数据.
分类:
关系型数据库:MySql (1.MariaDB:mysql的替代品2.Percona Server:mysql的替代品),Oracle,SQL Server....
非关系型数据库:MongoDB,Redis...
SQL:Structured Query Language,结构化查询语言
命令:
数据定义语言(DDL):创建、删除、修改库或表
数据操作语言(DML):增、删、改
数据查询语言(DQL):查
数据控制语言(DCL):授权、取消授权
数据事务语言(DTL):开启事务、提交事务、操作回滚
MySql安装
安装过程
双击MySQL安装程序:mysql-installer-community-5.7.20.0.msi 链接:https://pan.baidu.com/s/1zExALDR_n7xH3Y_-iNTW8Q 密码:wq8b
选择自定义安装:custom
选择安装的版本:MySQL Server5.7.20 -X64
点击Excute执行安装
设置root密码
点击Excute执行配置
点击Finish完成安装
成功测试
查看系统服务:services.msc
连接测试:mysql -h host -u root -p
-h:指定主机
-u:指定用户
-p:指定密码,建议输入密码时分两步,这样可以隐藏密码
示例:mysql [-h127.0.0.1] -uroot -p,敲回车,然后根据提示输入密码即可
端口:3306
退出:exit
帮助:help 或 \h
说明:几乎所有命令都是以';'结束
敲mysql命令无反应
说明:那是因为没有将该命令所在目录添加到系统环境变量Path下
添加:
打开系统环境变量设置页面
将mysql命令所在的目录添加到系统环境变量Path下
保存即可
新添加的环境变量在已经启动的终端是无效,重启一个新的终端即可
数据定义语言:
查看库: show databases; 会显示当前所有数据库.
创建库:create database test;创建数据库test.
删除库:drop database test;删除数据库test.
选择库:use test;选择数据库test.
查看当前使用的数据库
show tables;(至少该数据库中有一个数据表时才能查看到)
select database();
查看表:show tables; 查看当前数据库中的所有表.
创建表:create table students(
id int unsigned auto_increment not null primary key,
name varchar(20) not null,
age tinyint not null
);
查看表结构:desc students;
查看创建方式:
查看库:show create database test;
查看表:show create table students;
删除表:drop table students;
指定字符集:
创建时指定:create table xxx()engine=Innodb charset=utf8;
修改配置文件:
win:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
linux:/etc/mysql/mysql.conf.d/mysqld.conf
字符集:charactert-set-server=utf8
存储引擎:default-storage-engine=INNODB
重启配置服务才生效
修改字段:
alter table students modify name varchar(30);不能修改字段名
alter table students change name username varchar(25);可以修改字段名
添加字段
默认在末尾添加:alter table students add birthday date;
在指定字段后添加,alter table students add address varchar(50) after id;
在开头添加字段:alter table students add teacher varchar(20) first;
删除字段
alter table students drop teacher;
修改字段位置及名称:add/modify/change
alter table students modify age tingint first;
修改表名
alter table students rename stu;
数据类型
整形:
int:4个字节 范围(-2147483648~2147483647)
tinyint:1个字节 范围(-128~127)
smallint:2个字节 范围(-32768~32767)
mediumint:3个字节 范围(-8388608~8388607)
bigint:8个字节 范围(+-9.22*10的18次方)
xxint unsigned:取值范围变成0~最大值的两倍
浮点型:
float(m,d):单精度浮点型 8位精度(4字节)m表示总个数,d表示小数个数
double(m,d):双精度浮点型 16位精度(8字节)m表示总个数,d表示小数个数
补充:
1.浮点数存在误差,
2、对货币等对精度敏感的数据,应该用定点数表示或存储
3、编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较
4、要注意浮点数中一些特殊值的处理。
定点数:
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。
字符串
char(n):固定长度,最多255个字符
varchar(n):固定长度,最多65535个字符
tinytext:可变长度,最多255个字符
text:可变长度,最多65535个字符
mediumtext:可变长度,最多2的24次方-1个字符
longtext:可变长度,最多2的32次方-1个字符
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),
所以varchar(4),存入3个字符将占用4个字节。3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字
节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
二进制数据(_Blob):
1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
2._BLOB存储的数据只能整体读出。
3._TEXT可以指定字符集,_BLO不用指定字符集。
日期时间类型:
date:日期,格式2018-11-05
time:时间,格式20:37:38
datetime:日期时间,格式2018-11-05 20:37:38
timestamp:时间戳
year:年,只占用一个字节,年份:1901~2155
复合类型:
set:集合类型,格式:set(s1,s2,...,s63),最多63种可能
enum:枚举类型,格式:enum(e1,e2,...,e65535),最多65535种可能
字段修饰:
unsigned:无符号数
zerofill:高位0填充,防止出现负数
auto_increment:自动增加(1),用于整数,多与主键共用
defalt:默认
not null:不能为空
字符集:
查看系统字符集:show character set;通常我们只用utf8.
存储引擎
查看系统支持存储引擎:show engines;
常用存储引擎InnoDB和MyISAM
索引
说明:简单理解就是一本书最前面的目录,可以提高读取效率,但也不是说越多越好。
分类:
普通索引(index):最基本的索引
唯一索引(unique):修改的字段不能重复
主键索引(primary key):是一种特殊的唯一索引,一张表中最多只能由一个字段设置.
全局索引(fulltext):对全局数据进行添加索引
示例:
alter table stu add index(age); 给age字段添加普通索引
alter table stu add unique(username);给username字段添加唯一索引
alter table stu drop index age; 删除age字段的普通索引
当删除主键索引时,应先取消其自增,再删除索引;
例如:alter table stu modify id int;
alter table stu drop primary key;
alter table stu add primary key(id); 给id添加主键索引
创建表时直接指定:
create table user(
id int auto_increment,
name varchar(20),
primary key(key),
unique(name)
)engine=innodb default charset=utf8;
数据操作语言(DML):
说明:在大多数的操作中,使用的都是增删改查(CURD)
准备:一张用于测试的表
create table star(
id int auto_increment,
name varchar(20) not null,
money float not null,
province varchar(40) default null.
age tinyint unsigned not null,
sex tinyint not null,
primary key(id)
)engine=innodb default charset=utf8;
插入数据
方式1:不指定字段,添加数据时需要写完整所有的字段
insert into star values(1,"刘亦菲",8888888,'武汉',20,1);
可以一次插入多条数据,一条数据需要使用一个()包括起来
方式2:指定字段,只需要传递指定字段的值,
insert into star(name,money,age,sex,province) values("赵丽颖",77777777,30,"河北");
插入数据的顺序要与前面指定的字段名一致
注意:
插入数据时可以不传值的字段
自增的字段
有默认值的字段
可以为空的
说明:插入数据时,第二种较常用
查询数据:select * from star;
修改数据:update star set age=31,money=999999999 where id=1;
警告:修改数据时,一定不要忘了指定条件.
删除数据:delete from star where id=1;
警告:删除数据时,一定不要忘了指定条件.