数据(data)
表
数据库
数据库管理系统(DBMS)
数据库系统
实体
也称为实例,对应现实世界中可区别于其他对象的“事件”或“事物”
属性
实体所具有的某一特性,一个实体可以有多个属性
联系
实体集之间的对应关系称为联系,也称之为关系
如银行客户和银行账户之间存在“储蓄”的关系
所有实体及实体之间联系的集合构成一个关系数据库
关系数据库的存储结构是二维表格
在每个二维表中
每一行称为一条记录,用来描述一个对象的信息
每一列称为一个字段,用来描述对象的一个属性
关系型数据库又io瓶颈
非关系数据库也被称作NoSQL (Not Only SQL)
存储数据不以关系模型为依据,不需要固定的表格式
非关系型数据库的优点
数据库可高并发读写
对海量数据高效率存储与访问
数据库具有高扩展性与高可用性
缺点:
不支持sql
学习成本较高
无事物处理
结构相对性复杂
常用的非关系数据库:Redis、mongoDB等
数据类型 | 说明 |
---|---|
int | 整型、无符号[0,232-1]、有符号[-231,231-1] |
float | 单精度浮点:4字节32位 |
double | 双精度浮点:8字节64字节 |
char | 固定长度的字符类型 |
varchar | 可变长度的字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 5个有效长度数字,小数点后面有两位 |
show databases; #大小写不区分,分号“;”表示结束
use 数据库名; #表示进入此库
show tables; #显示当前库中的所有表
use 数据库名;
describe [数据库名.]表名; #describe可以缩写位desc
SQL语句用于维护管理数据库,包含数据查询、数据更新、访问控制、对象管理等功能。
SQL语言分类:
create database 库名;
use 库名;
create table 表名 (字段1 数据类型, 字段2 数据类型, ... [,primary key (字段)]);
drop table 表名;
drop database 库名;
insert into 表名 values (字段1的值, 字段2的值, ....); #要按照表结构的字段顺序设置值
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
update 表名 set 字段=值, ... where 条件表达式;
delete from 表名 where 条件表达式;
select * from 表名 [where 条件表达式];
select 字段1,字段2,... from 表名 [where 条件表达式];
select * from 表名\G #纵向查看每行记录字段的值
select * from 表名 limit N; #显示表的前N行记录
select * from 表名 limit N,M; #显示表的从第N行之后的连续M行记录(不包含第N行)
改表名 alter table 旧表名 rename 新表名;
增加字段 alter table 表名 add 新字段 数据类型 [字段属性];
修改字段 alter table 表名 change 旧字段 新字段 数据类型 [字段属性];
删除字段 alter table 表名 drop 字段;
#新建用户:
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';
SELECT PASSWORD('abc123');
CREATE USER 'user2'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
#查看用户信息
USE mysql;
SELECT User,authentication_string,Host from user;
#查看当前登录用户
select user();
#重命名用户
RENAME USER 'zhangsan'@'localhost' TO 'lisi'@'localhost';
#删除用户
DROP USER 'lisi'@'localhost';
#修改当前登录用户密码
SET PASSWORD = PASSWORD('abc123');
#修改其他用户密码
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123');
(1)修改 /etc/my.cnf 配置文件,不使用密码直接登录到 mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables #添加,使登录mysql不使用授权表
systemctl restart mysqld
mysql #直接登录
(2)使用 update 修改 root 密码,刷新数据库
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';
FLUSH PRIVILEGES;
quit
mysql -u root -pabc123
注意:最后再把 /etc/my.cnf 配置文件里的 skip-grant-tables 删除,并重启 mysql 服务。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
#允许用户 zhangsan 在本地查询 kgc 数据库中 所有表的数据记录,但禁止查询其他数据库中的表的记录。
GRANT select ON kgc.* TO 'zhangsan'@'localhost' IDENTIFIED BY '123456';
#允许用户 lisi 在所有终端远程连接 mysql ,并拥有所有权限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';
flush privileges; #刷新
quit
mysql -u zhangsan -p123456
use kgc;
show tables;
select * from gcl;
#查看权限
SHOW GRANTS FOR 用户名@来源地址;
#撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;