数据库
数据库
一,数据库
按照数据结构组织和存储管理数据的仓库,长期存储在计算机内,有组织的,可共享的,统一管理的大量数据的集合。
数据:
最宝贵的财富,需要对数据进行管理,运算,流转,存储展示,
最重要的功能就是存储数据,长期保存数据,
数据的含义称为数据的语义,数据与语义是不可分的
MySql:
关系型数据库管理系统,使用sql语言
体积小,速度快,成本低,开源
基本操作
登录:cmd
mysql -h 127.0.0.1 -p3306 -u用户名 -p密码
MYSQL是一个数据库管理系统,管理多个数据库
创建数据库
create datatbase 数据库名;
create schema 数据库名;
查看数据库
show databases;
选择使用数据库
use 数据库名;
添加主键
alter table 表名 CONSTRAINT PK_表名 PRIMARY KEY 表名(列名)
添加外键
alter table 从表 add CONSTRAINT fk_从表_主表 foreign key 从表(外键字段) REFERNCES 主表(外键字段)
二,SQL语言
SQL是一种特殊的编程语言,是一种数据库查询和程序设计语言,用于存储数据以及查询,更新,管理关系型数据库系统
sql分类
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别
DDL(Data Definition Language):数据库定义语言,用来定义数据库对象:库,表,字段(列);功能:创建,删除,修改库和表结构
DML(Data Manipulation Language):数据操作语言,用来定义数据的增删改查记录
DQL(Data Query Language):数据库查询语言,用来查询记录
TCL(Transition Control Language):事务控制语言,用来管理事务,commit
DCL(数据库控制语言)
创建用户
创建一个用户,只能在指定ip上登录mysql
create user '用户名'@'IP地址' identified by '密码';
创建一个用户,可在任意ip上登录mysql
create user '用户名'@'%' identified by '密码';
修改密码
-- 5.7版本
set password for 用户名@'%' = password('新密码');
-- 8.0版本
set password for 用户名@'%' = '新密码';
给用户授权
给指定用户在指定数据库上赋值指定权限
- create:创建数据库
- select:查询数据
- delete:删除数据
- update:修改数据
- insert:插入数据
-- 语法 grant `权限1,权限2` on 数据库名.表名 to 用户名@IP地址
grant 权限1,权限2` on 数据库名.* to 用户名@IP地
grant all on 数据库名.* to 用户名@IP地
撤销授权
-- 语法 revoke all on `表名`.* from `用户名`@`%`;
查看权限
-- 语法 show grants for 用户名@IP地址
删除用户
-- 语法 drop user '用户名'@'%';
DDL(数据定义语言)
DDL主要用在定义或改变表的结构
创建表
create table 表名{
列名1 类型(范围) 约束条件 primary key,
列名2 类型(范围) 约束条件,
};
数据类型
整形:
MySql数据类型 | 含义 |
tinyint | 一个字节,范围(-128~127) |
smallint | 2个字节,范围(-32768~32767) |
mediumint | 3个字节,范围(-8388608~8388607) |
int | 4个字节,范围(-2147483648~2147483647) |
bigint | 8个字节,范围(-9223372036854775808~9223372036854775807) |
unsigned关键字:
定义为无符号类型,(tinyint unsinged)的取值范围0~255
长度需要配合zerofill
:
int(4) unsinged zerofill
上述int长度为4,设置了zerofill
,如果数据是1,表格中数据格式位0001,0100,0010
浮点型
MySql数据类型 | 含义 |
float(m,d) | 4字节,单精度浮点型,m总长度,d小数位 |
double(m,d) | 8字节,双精度浮点型,m总长度,d小数位 |
decimal(m,d) | 存储为字符串的浮点数,对应java的BigDecimal |
例:定义float(5.3)
插入123.45678,查询得到的99.999
插入12.3456789,查询得到12.346
使用浮点型时,以插入到数据库中的实际结果为准
字符串类型
MySql数据类型 | 含义 |
char(n) | 固定长度,最多255个字符,1-8000字节 |
ncahr(n) | 固定长度,1-4000字节 |
varchar(n) | 可变长度,最多65535个字符,1-8000字节 |
nvarchar(n) | 可变长度,1-4000字节 |
tinytest | 可变长度,最多255个字节 |
test | 可变长度,最多65535个字节,1-2147483647 |
mediumtest | 可变长度 |
longtest | 可变长度 |
char和nchar:
char(n)n个字节,可存n个字母,符号或n/2汉字
nchar(n)在存储时,可存n个字母,符号或n个汉字,存储大小可为n字节的双倍
varchar和nvarcahr:
varchar:可变长度
nvarchar:可变长度,并且它可能为 1 到 4,000 之间的值。 max 指示最大存储大小是 2^30-1 个字符 (2 GB)。 存储大小为 n 字节的两倍 + 2 个字节。
binary [ ( n ) ]
长度为 n 字节的固定长度二进制数据,其中 n 是从 1 到 8,000 的值。 存储大小为 n 字节。
varbinary [ ( n | max) ]
可变长度二进制数据。 n 的取值范围为 1 至 8,000。 max 指示最大存储大小是 2^31-1 个字节。 存储大小为所输入数据的实际长度 + 2 个字节。 所输入数据的长度可以是 0 字节。 varbinary 的 ANSI SQL 同义词为 binary varying。
数据类型 | 何时使用... |
---|---|
binary | 列数据项的大小一致。 |
varbinary | 列数据项的大小差异相当大。 |
varbinary(max) | 列数据条目超出 8,000 字节。 |
comment:
sql中的注释
sno INT(6) PRIMARY KEY AUTO_INCREMENT COMMENT '序号'
日期类型
MySql数据类型 | 含义 |
date | 3字节,格式:2022-08-01 |
time | 3字节,格式:10:54:30 |
datatime | 8字节,格式:2022-08-15 10:45:20 |
timetamp | 4字节,时间戳,毫秒数 |
year | 1字节 |
三,对表的修改
查看表
show tables
查看表结构
desc 表名
修改表 alter table 表名
- 添加一个列 alter 表名 add (列名 类型 约束条件 位置,列名 类型 约束条件 位置)
- 修改列数据类型
alter table 表名 MODIFY 列名 类型
- 修改名称和数据类型
alter table 表名 change 列名 类型
- 删除列
alter table 表名 drop 列名
- 修改表名
alter table 表名 rename 新表名
- 删除表
drop table if exisit 表名
DML(数据操作语言)
该语言来对表记录进行操作,增删改
插入数据
insert into 表名 (列名1,列名2)
values(数据1,数据2 ),
(数据3,数据4)
修改数据
update 表名 set 列名 = ‘数据1’,列名2 = ‘数据2’
where 查询条件
删除数据
delete from 表名
where 查询条件
delete 删除的数据(有主键,递增),该位置的不会再添加,会断档,只会在最后位置后面添加
截断:应属于DDL语言,操作立即执行,不能撤回
TRUNCATE 表名;
不能加条件,可以把数据清空,从头开始,速度快,效率高
TRUNCATE 和delete都是删除数据,drop是删除整个表
TRUNCATE 和delete都不会使表结构及其列,约束,索引发生改变