一、数据库的基本概念
1.什么是数据库?
用于存储和管理数据的仓库
2.数据库的特点?
1)持久化存储数据的,其实数据库就是一个文件系统
2)方便存储和管理数据库
3)使用了统一的方式操作数据库------SQL
3.常见的数据库软件
Oracle数据库:大型数据库
MySQL:小型数据库
DB2:常用在银行系统
SQLServer:中型数据库
SQLite:嵌入安卓手机
4.windows和Linux使用mysql的不同之处
| 操作 | Windows(CMD) | Linux(终端) |
|---|---|---|
| 启动 MySQL | net start mysql | sudo systemctl start mysql |
| 停止 MySQL | net stop mysql | sudo systemctl stop mysql |
| 重启 MySQL | net restart mysql | sudo systemctl restart mysql |
| 查看状态 | 无 | sudo systemctl status mysql |
| 设置开机自启 | 自动 | sudo systemctl enable mysql |
| 路径写法 | C:\mysql\bin | /usr/bin/mysql |
| 大小写 | 不区分 | 严格区分(表名区分) |
| 注释 | # 或 -- | # 或 -- |
| 端口占用查看 | netstat -ano | netstat -tlnp |
5.SQL
1)什么是SQL?
结构化查询语言:其实就是定义了操作所有关系型数据库的规则。每一种数据库查询的语句不一样,就叫做"方言"
2)SQL通用语法?
1.SQL语句可以单行可以多行书写,以分号结尾。
2.可以使用空格和缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,但是Linux下表名区分,关键字建议使用大写
4.单行注释:-- 注释内容(两个-,一个空格);多行注释:#
二、第一次登录MySQL
1.使用系统权限登录 MySQL
bash
sudo mysql
2. 修改认证方式
在 MySQL 命令行中依次执行:
sql
USE mysql;
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
FLUSH PRIVILEGES;
3.设置新密码
sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
4.退出并测试
bash
exit;
sudo systemctl restart mysql # 重启 MySQL 服务
三、对数据库基本操作
1.MySQL登录
bash
//登录自己的数据库
mysql -uroot -p密码
//登录你要连接的数据库
mysql -hip -uroot -p连接目标的密码
mysql --host=连接目标的ip --user=root --password=root
2.MySQL退出
sql
exit
quit
3.展示已经创建的数据库
bash
show databases;

4.展示已经创建的数据库的字符集
sql
show create database 数据库名称;
5.创建数据库
bash
create database 数据库名;
//判断这个数据库是否创建过,创建过不报错;没创建过,再创建
create database if not exists 数据库名;
6.创建数据库并指定字符集
sql
create database if not exists 数据库名 character set 字符集;
7.修改数据库的字符集
sql
alter database 数据库名称 character set 字符集名称;
8.删除数据库
sql
drop database if exists 数据库名;
9.查看当前使用数据库
sql
select database();
10.使用数据库
sql
use 数据库名;
四、对数据库表的基本操作
1.创建表:
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
.....
列名n 数据类型n
);
注意:最后一行绝对不加逗号
数据库类型:
- int:整数类型 age int,
- double:小数类型 score double(5,2),
- data:日期 只包含年月日,yyyy-MM-dd
- datatime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss,
- timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
注:如果将来不给这个字段赋值,或者赋值为null,则默认使用当前的系统时间,来自动赋值
- varchar:字符串 name varchar(20):姓名最大20个字符
sql
create table student(
id int,
name varchar(20),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
2.删除表:
sql
drop table if exists 表名;
3.查询表:
(1)查询某个数据库中的所有表:
sql
show tables;
(2)查询表结构:
sql
desc 表名;
(3)查询表创建的SQL语句:
sql
show create table stu;
4.修改表:
sql
//增加列
alter table 表名 add 列名 varchar(20);
//修改列名称 类型
alter table 表名 change 当前列名 新列名 新数据类型;
//只修改列的数据类型
alter table 表名 modify 列名 新数据类型;
五、对数据库表中的数据的基本操作(CRUD)
5.插入数据(Create)
语法:
insert into 表名(列名1,列名2,列名3,....,列名n)values(值1,值2,值3,....);
**注:**除了数字类型其他类型都需要用引号(单双都可以)括起来
(1)往想要添加的列里添加数据:
sql
insert into stu(id,name,age,score,birthday,insert_time,sex)values(1,'张无忌',12,100,'2021-01-01',NULL,1);
(2)往整个表里添加数据:
sql
insert into stu values(1,'张',12,98,'2022-01-02',NULL,1);
6.查询数据(Read)
1)基础查询:
1.多个字段查询
select 字段名1,字段名2...from表名;
注意:如果查询所有字段,则可以使用*来替代字段列表
sql
//查询整个表的数据
select* from 表名;
//查询某列数据
select 列名 from 表名;
//查询某列根据条件
select *from stu where name="马云";

2.去除重复
distinct

3.计算列
一般可以使用四则运算计算一些列的值(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
如果该字段为null后的替换值

4.起别名
as:as也可以省略

2)条件查询:
1.where子句后跟条件
2.运算符
(1)*>、<、<=、>=、=、<>
查询年龄小于20岁的
sqlselect* from score where age<20;查询年龄不等于20岁的
sqlselect* from score where age<>20; select* from score where age!=20;(2)BETWEEN....AND
sqlselect *from score where age between 20 and 30;(3)IN(集合)
sqlselect *from score where age in(15,20,30);(4)LIKE
语句 通配符 含义 匹配结果 WHERE name LIKE '马_'_(下划线)匹配恰好一个字符 马?(两个字) WHERE name LIKE '马%'%(百分号)匹配零个或多个字符 马、马?、马??、马???... 查询姓马的有哪些
sqlselect *from score where name like'马%';//只要姓马 select *from score where name like'马_';//姓马两个字(5)IS NULL
查询英语成绩为NULL
sqlselect* from score where age=NULL;//错误的 select* from score where age is NULL;//必须用is(6)and或&&
sqlselect *from score where age =30 and name="马云";(7)or或||
查询年龄30或15的(OR)
sqlselect *from score where age=30 or age=15;(8)not或|
查询英语成绩不为NULL
sqlselect* from score where age is not NULL;
3)排序查询:
语法:
order by 子句(升序)
order by 排序字段1 排序方式1,...,排序字段2 排序方式2.....
sqlselect* from score order by maths;排序方式:
ASC:升序,默认的
DESC:降序
按照数学成绩排名,如果数学成绩一样,按照语文成绩排名
sqlselect* from score order by maths ASC,chinese ASC;**注意:**如果有多个排序条件,则当前边的条件值一样时才会判断第二条件
4)聚合函数
聚合函数:将一列数据作为一个整体,进行纵向计算
count:计算个数
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
5)分组查询
7.更新数据(Update)
注:不加条件会修改全部
sql
updata stu set age=111 where id=1;
update stu set sex=0,age=27 where id=2;
update score set chinese=99,English=88 where id=1;


8.删除数据(Delete)
语法:
delete from 表名 where 条件
注意:
如果不加条件,则删除表中所有数据
如果要删除所有记录
delete from 表名; ----不推荐使用,有多少条记录就执行多少次
TRUNCATE TABLE 表名;---推荐使用,删除表再创建一个空表
truncate table 表名;
sql
delete from stu where id=1;











