一.什么是数据库
我们常用的数据存储方式,比如内存和文件,数据保存在内存中时,存取速度快,但是数据不能永久保存 ;数据保存在文件时,数据永久,但是速度比内存操作慢,频繁的IO操作,并且查询数据不方便。而数据库的存储方式,数据持久化保存,高可靠,高可用,数据的快速提取。所以在企业中得以广泛使用。
二.数据库概述
数据库概述
- 数据库作用:数据持久化保存,高可靠,高可用,数据的快速提取。
- 数据库存储类型:关系型数据库 非关系型数据库。
- 数据保存在内存
- 优点:存取速度快
- 缺点:数据不能永久保存
数据保存在文件
- 优点:数据永久保存
- 缺点:速度比内存操作慢,频繁的IO操作。2)查询数据不方便
数据保存在数据库
- 数据永久保存
- 使用SQL语句,查询方便效率高。
- 管理数据方便
三.查看数据库信息
[root@localhost ~]# mysql -uroot -p //登录数据库
Enter password:
mysql> show databases; //查看库
+--------------------+
| Database |
+--------------------+
| information_schema | //#定义访问数据库单元数据的方式。数据库名和表名,列的数据类型、访问权等。
| moon |
| mysql | //#核心数据库,负责存储数据库用户、权限、关键字等用户自己需要使用的控制和管理信息。
| nice |
| performance_schema | //#数据库的性能参数,存储引擎等。
| sys |
+--------------------+ //#sys系统库下包含许多试图,它们以各种方式对performance_schema表进行聚合计算展示。
6 rows in set (0.00 sec)
四.查看数据库中的表
mysql> use moon; //切换到moon库
mysql> show tables; //查看表
+----------------+
| Tables_in_moon |
+----------------+
| abc |
| svip |
| vip |
| vvip |
+----------------+
Mysql数据库的数据文件都存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于储存数据表文件。每一个数据表对应为三个文件,后缀名分别为’’.frm “.myd” 和“.myi"。当然也有少数以opt、csm、csv、ibd结尾的。
四.查看表结构
mysql> desc vip;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(2) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| number | int(3) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
五.SQL语句
1.sql语言
- 是Structured Query Language的缩写,即结构化查询语言
- 是关系型数据库的标准语言
- 用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能
2.SQL分类
- DDL:数据定义语言
- DML:数据操纵语言
- DQL:数据查询语言
- DCL:数据控制语言
DDL:数据定义语言
DDL语句用于创建数据库对象,如库、表、索引等。
eg:新建库
mysql> create database think;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| moon |
| mysql |
| nice |
| performance_schema |
| sys |
| think |
+--------------------+
eg:新建表
create table 表名(字段01名称 字段01类型 字段01约束,字段02名 字段02类型 字段02约束)存储引擎 字符集 ,多个字段用,隔开
mysql> use think;
Database changed
mysql> create table omen(id int(2),name varchar(10),number varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> desc omen;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(2) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| number | varchar(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
字段类型:
- int (5) 整型 00000-99999
- double 浮点型
- decimal(5,2) 有效数字是5位,小数点后面保留2位100.00 088.45
- fioat 单精度浮点 4字节
- varchar(50) 可变长度字符串
- char(10) 固定长度字符串
字段01约束:
- 非空约束:内容不允许为空
- 主键约束:非空且唯一 典型的标识
- 默认值:假如没有填数据,默认预先设定的值
- 自增特:id 1 2 3 自动帮你去填
存数引擎:myisam innodb
字符集:UTF-8
eg: 删除表,删除库
mysql> drop table omen;
Query OK, 0 rows affected (0.00 sec)
mysql> drop database think;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| moon |
| mysql |
| nice |
| performance_schema |
| sys |
+--------------------+
DML语句
DML语句用于对表中的数据进行管理
- INSERT:插入新数据
- UPDATE:更新原有数据
- DELETE:删除不不需要的数据
eg:INSERT插入数据
mysql> insert into omen(id,name,number) values(1,'ziyang',10),(2,'weilai',12);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from omen;
+------+--------+--------+
| id | name | number |
+------+--------+--------+
| 1 | ziyang | 10 |
| 2 | weilai | 12 |
+------+--------+--------+
eg:UPDATE:更新原有数据
mysql> update omen set name='yueliang' where name='weilai';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from omen;
+------+----------+--------+
| id | name | number |
+------+----------+--------+
| 1 | ziyang | 10 |
| 2 | yueliang | 12 |
+------+----------+--------+
eg:DELETE:删除不不需要的数据
mysql> delete from omen where name='ziyang';
Query OK, 1 row affected (0.00 sec)
mysql> select * from omen;
+------+----------+--------+
| id | name | number |
+------+----------+--------+
| 2 | yueliang | 12 |
+------+----------+--------+
六.进阶操作
1.清空表
mysql> truncate table omen; //清空表数据,不清空结构
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+-----------------+
| Tables_in_think |
+-----------------+
| omen |
+-----------------+
mysql> drop table omen; //清空表数据和结构
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
Empty set (0.00 sec)
2.建立临时表
临时建立的表,用于保存一些临时数据,不会长期存在
mysql> create temporary table omen(id int(2),name varchar(10),number varchar(10));
Query OK, 0 rows affected (0.00 sec)
mysql> desc omen;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(2) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| number | varchar(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3.克隆表
mysql> create table df like vip; //复制表结构
Query OK, 0 rows affected (0.01 sec)
mysql> insert into df select *from vip; //导入数据
Query OK, 7 rows affected (0.00 sec)
Records: 7 Duplicates: 0 Warnings: 0
mysql> select *from df;
+------+----------+--------+------+
| id | name | number | age |
+------+----------+--------+------+
| 1 | ziyang | 10 | 24 |
| 2 | xiner | 12 | 17 |
| 3 | weilai | 12 | 24 |
| 4 | keai | 17 | 20 |
| 5 | yueliang | 15 | 21 |
| 6 | meimei | 15 | 24 |
| 7 | menxin | 15 | 21 |
+------+----------+--------+------+
7 rows in set (0.00 sec)
七.DCL数据库用户授权
DCL语句设置用户权限(用户不存在时;则会新建用户)
- 若用户已存在,则更改用户密码
- 若用户不存在,则新建用户
mysql> create user 'knight'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant all on *.* to 'knight'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看用户权限
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
查看数据库有哪些用户
mysql> select user from mysql.user;
+---------------+
| user |
+---------------+
| knight |
| mysql.session |
| mysql.sys |
| root |
+---------------+
撤销用户权限
mysql> revoke all privileges on *.* from 'knight'@'%';
Query OK, 0 rows affected (0.00 sec)