表的集合,是存储数据的仓库
以一定的组织方式存储相互有关的数据集合
是按照数据结构来组织,存储和管理数据的仓库
数据库中有表,表中有记录
数据库的建立和维护功能、数据定义功能、数据操纵功能、数据库的运行管理功能、通信功能
是一个人机系统,由硬件、oS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库
自20世纪80年代开始,适应不同领域的新型数据库系统不断涌现
面向对象的数据库系统,实用性强、适应面广
20世纪90年代后期,形成了多种数据库系统共同支撑应用的局面·
—些新的元素被添加进主流数据库系统中
关系型数据库典型代表:Mysql(5.7/8.0)、Mariadb、 Oracle、PsetgreSQL、SQL Server、DB2、
国产数据库代表:阿里云RDB 华为:高斯 腾讯 TDBA 阿里 Oceanbase
关系数据库系统是基于关系模型的数据库系统
关系模型的数据结构使用简单易懂的二维数据表
关系模型可用简单的“实体-关系”(E-R)图来表示
E-R图中包含了实体(数据对象)、关系和属性三个要素
关系数据库的存储结构是二维表格
在每个二维表中
非关系数据库也被称作NoSQL (Not Only s QL)
存储数据不以关系模型为依据,不需要固定的表格式
非关系型数据库的优点
数据库可高并发读写
n 对海量数据高效率存储与访问
数据库具有高扩展性与高可用性
缓存型:Redis Mecached
文档型:MongoDB
搜索型:ElasticSearch(ES)
时序型:Prometheus InfluxDB
数据名 | 作用 |
---|---|
int | 整型 无符号【0,232-1】,有符号【-231,2^32-1】 |
float | 单精度浮点 4字节32位 |
double | 双精度浮点 8字节64位 |
char | 固定长度的字符类型 |
varchar | 可变长度字符类型 |
text | 文本 |
image | 图片 |
decimal(5,2) | 五个有效长度数字,小数点后面有2位 |
show databases;
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bbs |
| mysql |
| performance_schema |
| sys |
| tour |
+--------------------+
6 rows in set
use 数据库名;
show tables;/show tables form 数据库;
mysql> use tour;
Database changed
mysql> show tables
-> ;
+----------------+
| Tables_in_tour |
+----------------+
| sunsetglow |
+----------------+
1 row in set
use 数据库名;
desc 表名;
mysql> use tour;
Database changed
mysql> desc sunsetglow
-> ;
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(4) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
4 rows in set
DDL: 数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中数据进行管理
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限
create database 数据库名;
mysql> create database sun;
Query OK, 1 row affected (0.00 sec)
create table 表名 (字段1 数据类型,字段2 数据类型【......】【,primary key(主键名)】);
mysql> create table kiki (id int not null,name char(10) not null,sorce decimal(5,2),primary key(id));
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+----------------+
| Tables_in_tour |
+----------------+
| kiki |
| moon |
| stars |
| sunset |
+----------------+
4 rows in set (0.00 sec)
alter table 旧的表名 rename 新的表名
mysql> use tour
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> alter table sunsetglow rename sunset;
Query OK, 0 rows affected (0.01 sec)
alter table 表名 add 字段 数据类型 default ' 默认值' ;
mysql> alter table kiki add address varchar(50) default 'none';
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
alter table 表名 change 旧列名 新列名 数据类型 [unique key];
mysql> alter table kiki change name student varchar(20) unique key;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc kiki;
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| student | varchar(20) | YES | UNI | NULL | |
| sorce | decimal(5,2) | YES | | NULL | |
| address | varchar(50) | YES | | none | |
+---------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
insert into 表名 (字段1, 字段2, ...) values (字段1的值, 字段2的值, ...);
insert into 表名 values (按照字段顺序的所有字段的值);
例:insert into sunset (id,name,score,passwd) values (2,'xu',80,'123456');
delete from 表名 where 条件表达式;
例:delete from sunset where id=4;
update 表名 set 字段=值, ... where 条件表达式;
例:update sunset set name='xu',score='99'where id=3;
select 字段1,字段2,... from 表名 where 条件表达式;
select * from 表名\G
select * from 表名 limit N; 显示表前N行
select * from 表名 limit N,M; 显示从第N行之后的M行记录(不包含第N行)
例:select name number from sunset;
select name number from sunset where id=2;
select * from sunset limit 2;
select * from sunset limit 2,3;
alter table 旧表名 rename 新表名;
例:alter table sunset rename wen;
alter table 表名 add 新字段 数据类型 字段属性;
例:alter table xu add address varchar(50) default'fire';
alter table 表名 change 旧字段名 新字段名 数据类型 字段属性;
例:alter table xu change xiaoxu use_name varchar(10) unique key;
alter table 表名 drop 字段名;
例:alter table xu drop address;
create table 新表 like 源表;
insert into 新表 (select * from 源表); 数据一样,表结构一样
create table 新表 (select * from 源表); 数据一样,表结构可能不一样
mysql> create table moon like sunsetglow
;
Query OK, 0 rows affected
mysql> insert into moon select * from sunsetglow;
Query OK, 12 rows affected
Records: 12 Duplicates: 0 Warnings: 0
mysql> select * from moon;
+----+--------+-----+-----+
| id | name | age | sex |
+----+--------+-----+-----+
| 1 | 张源泉 | 56 | 男 |
| 2 | 李凯丽 | 25 | 女 |
| 3 | 伍连德 | 55 | 男 |
| 4 | 吴珊珊 | 25 | 女 |
| 5 | 张三 | 55 | 男 |
| 6 | 李思 | 61 | 男 |
| 7 | 王武 | 50 | 男 |
| 8 | 黄丽丽 | 52 | 女 |
| 9 | 王鹏鹏 | 66 | 男 |
| 10 | 李思思 | 72 | 女 |
| 11 | 章萍 | 51 | 女 |
| 12 | 梅芳 | 58 | 女 |
+----+--------+-----+-----+
12 rows in set
delete from 表名; 一条一条的删除,效率较慢,自增长字段仍然会按照清空前的顺序自增
truncate table 表名; 直接重置表,清空效率快,自增长字段会从1重新开始
mysql> delete from moon;
Query OK, 12 rows affected
mysql> select * from moon;
Empty set
mysql> truncate table moon;
Query OK, 0 rows affected
mysql> select * from moon;
Empty set
create temporary table 表名 (....); 临时表只能在当前会话中有效,且退出当前会话则会失效
mysql> create temporary table light(
-> id int(4) zerofill primary key auto_increment
-> ,name varchar(10) not null,
-> cardid int(18) not null unique key,
-> hobby varchar(50)) ;
Query OK, 0 rows affected
alter table 表名 add primay key (主键字段);
alter table 表名 [constraint FK_外键别名] add foreign key (外键字段) references 主键表名 (主键字段);
create user '用户名'@'源地址' identified by '密码';
mysql> create user 'xiaoxu'@'localhost' identified by'123456';
Query OK, 0 rows affected
mysql> select password('abc123');
+-------------------------------------------+
| password('abc123') |
+-------------------------------------------+
| *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+-------------------------------------------+
1 row in set
drop user '用户名'@'源地址';
mysql> drop user 'xiaowen'@'localhost';
Query OK, 0 rows affected
rename user '旧用户名'@'源地址' to '新用户名'@'源地址';
set password [for '用户名'@'源地址'] = password('.....');
mysql> rename user 'xiaoxi'@'localhost' to 'xiaowen'@'localhost';
Query OK, 0 rows affected
mysql> set password = password('abc123');
Query OK, 0 rows affected
mysql> set password for 'xiaoxu'@'localhost' = password('abc123');
Query OK, 0 rows affected
use mysql;
select user,host,authentication_string from mysql.user;
mysql> use mysql;
Database changed
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user | host | authentication_string |
+---------------+-----------+-------------------------------------------+
| root | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| bbsadmin | % | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C |
| localhost | % | *01A6717B58FF5C7EAFFF6CB7C96F7428EA65FE4C |
| root | % | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| xiaoxu | localhost | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
| xiaoxu | % | *6691484EA6B50DDDE1926A220DA01FA9E575C18A |
+---------------+-----------+-------------------------------------------+
8 rows in set
[root@www ~]# vim /etc/my.cnf
skip-grant-tables #添加,使登录mysql不使用授权表
[root@www ~]# systemctl restart mysqld.service
mysql> update mysql.user set authentication_string = password('abc123') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
[root@www ~]# mysql -u root -pabc123
grant 权限1,权限2,... on 库名.表名 to '用户名'@'源地址' [identified by '密码'];
grant all ,... on 库名.表名 to *.* [identified by '密码'];
[root@www ~]# mysql -uroot -pabc123
mysql> grant select on tour.* to 'xiaoxu'@'localhost' identifmysql> grant select on tour.* to 'xiaoxu'@'localhost' identified by 'abc123';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> grant all [privileges] on *.* to 'xiaoxu'@'%' identified by 'abc123';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[privileges] on *.* to 'xiaoxu'@'%' identified by 'abc123'' at line 1
mysql> grant all on *.* to 'xiaoxu'@'%' identified by 'abc123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
show grants for '用户名'@'源地址';
mysql> show grants for 'xiaoxu'@'%';
+---------------------------------------------+
| Grants for xiaoxu@% |
+---------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'xiaoxu'@'%' |
+---------------------------------------------+
1 row in set (0.00 sec)
revoke 权限1,权限2,... on 库名.表名 from '用户名'@'源地址';
revoke all ,... on 库名.表名 from '用户名'@'源地址';
mysql> revoke all on *.* from 'xiaoxu'@'%';
Query OK, 0 rows affected (0.00 sec)