数据库
1、什么是数据库?
数据库是以数据结构的形式组织数据的,数据库是用户层面的,是由用户后来去实现的,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
2、为什么要用数据库?
文件保存数据有以下几个缺点:
- 文件的安全性问题。
- 文件不利于查询和对数据的管理。
- 文件不利于存放海量数据
- 文件在程序中控制不方便
那我们为了解决上述问题,专家们设计出更加利于管理数据的东西,数据库,他能更有效的管理数据,数据库的水平是衡量一个程序员水平的重要指标。
3、数据库介绍
关系型数据库
关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过对这些关联表的表格分类、合并、连接或选取等运算来实现数据的管理。
非关系型数据库
非关系型数据库也被称为NoSQL数据库,NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
4、数据库软件下载
数据库排名:https://db-engines.com/en/ranking
数据库下载地址:https://downloads.mysql.com/archives/community/
5、数据库用户创建和授权
[root@db01 ~]# mysql
mysql> grant all on wordpress.* to wordpress@'10.0.0.%' identified by '123456';
mysql> grant select,insert,update on app.* to app@'10.0.0.%' identified by '123';
6、数据库查询
查询数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
查询表
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)
7、连接管理
socket(本地套接字文件)
[root@db01 ~]# mysql -uroot -p
1、只允许本地登陆使用。
2、登陆的用户必须提前创建好。
TCP/IP(网络IP+Port)
[root@db01 ~]# mysql -uwordpress -p -h 10.0.0.51 -P 3306
退出数据库
\q
exit
quit
ctrl + d
常用命令
/G 将表格竖起来
导入数据
mysql> source /root/world.sql
调用系统数据
mysql> system vim /etc/passwd
查看当前所在的库
mysql> select database();
进入到库use相当于cd
mysql> use world
8、备份恢复
备份数据库
[root@db01 ~]# mysqldump -uroot -p123456 -A --master-data=2 --single-transaction -R --triggers -E >/tmp/full.sql
恢复数据库
mysql> source /tmp/full.sql
9、SQL语句介绍
SQL标准
- SQL 89
- SQL 92
- SQL 99
SQL模式
5.7版本后采用严格模式
分类
- DDL 数据定义语言
- DCL 数据控制语言
- DML 数据操作语言
- DQL 数据查询语言
认识DDL
- 建库 数据库名 字符集(utf8mb4)
mysql> create database zh charset utf8mb4 ;
mysql> show databases;
mysql> show create database zh;
- 删库
drop database aaaa;
回收删除权限
revoke drop,delete on *.* from oldboy@'10.0.0.%';
- 修改库
mysql> alter database zh charset utf8
- 建表
CREATE TABLE `stu` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(64) CHARACTER SET armscii8 NOT NULL DEFAULT '' COMMENT '姓名',
`age` tinyint(3) unsigned zerofill NOT NULL COMMENT '年龄',
`gender` char(4) NOT NULL COMMENT '性别',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ;
- 删表
drop table stu;
- 修改表
alter table stu add qq varchar(64) unique not null comment 'qq号';
alter table stu add telnum char(11) not null unique after name;
注意:
DDL语句需要锁表,对于大表需要做DDL修改,尽量选择业务不繁忙期间
认识DML(对数据记录操作)
- insert
insert into stu(name,telnum,gender,qq,age) values ('ww','110','f','222222',18);
- updata
update stu set name='ls' where id=2;
- delte
delete from stu where id=2 ;
伪删除:
添加状态列,update 替代 delete
truncate 物理性质删除,针对数据页
delete 逻辑性质删除,针对数据行
认识DQL
- select
1、select单独使用
函数应用
select database();
参数查询
select @@port;
select @@datadir;
2、from语句
表,视图,子查询
select * from city ; (不代表生产操作)
3、where
等值
select * from city where countrycode='CHN';
比较判断符
select * from city where population<100;
逻辑连接符
select * from city where countrycode='CHN' and district='shandong';
select * from city where countrycode='CHN' or countrycode='USA';
select * from city where countrycode in ('CHN','USA');
改写
select * from city where countrycode='CHN'
union all
select * from city where countrycode='USA';
模糊查询
select * from city where countrycode like 'C%';
4、group by(配合聚合函数使用)
统计中国,各个省的城市个数
select district,count(id) from city where countrycode='CHN' group by district;
select district,group_concat(name) from city where countrycode='CHN' group by district;
5、having
select district,count(id) from city where countrycode='CHN' group by district having count(id)>10;
使用临时表解决having面对结果集较大的情况
6、order by limit
select * from city where countrycode='CHN' order by population desc limit 5;
select district,count(id) from city where countrycode='CHN' group by district having count(id)>10;
select district,count(id) from city where countrycode='CHN' group by district having count(id)>10 order by count(id) desc limit 5;
7、其他
between and
in
exist
union all