mysal数据库

这篇博客详细介绍了MySQL数据库的基础知识和操作,包括数据库的概念、分类、命令行操作,以及创建、删除和切换数据库。同时,文章讲解了数据表的操作,如查看、创建、修改和删除表,字段的类型和修饰,以及数据的增删改查操作。还涉及到了查询语法、排序、连表查询、视图、触发器、存储过程、权限管理和事务处理,最后提到了数据库的备份和恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysal数据库

简介:
1.概念
data  数据
database  数据库
table  表
column  列
row   行
dbms(database  management  system)数据库管理系统。
2.数据库分类
数据库目前主要分为两大类:
1.关系型数据
典型代表:mysql  oracle  sql   servel
mysql是开源的、免费的
oracle是收费的
2.非关系型数据库
典型代表有:BigTable(Google)、Cassandra、MongoDB、CouchDB;
3.命令行操作
第一种:win(电脑按盘上四个小方块)+R
第二种:点击电脑键盘左下角win标识,点击运行,输入cmd,
f:
(url直接输入bin的地址)
mysql -u root -p;
将小皮打开=>自己的地址=>`cd`  地址名=>`mysql -u root -p`

数据库的相关操作

显示所有仓库(查看当前所有的数据库)

show databases;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| name               |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
其中上面的数据库`mysql`和`performance_schema`
创建仓库
`create database 数据名 charset utf8;`
mysql> create database t2 charset utf8;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| name               |
| performance_schema |
| sys                |
| t2                 |
+--------------------+
6 rows in set (0.00 sec)
删除仓库
`drop database 数据库名;`
mysql> drop database t2;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| name               |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
切换仓库(读取数据库名称)《==》打开指定的库
`use 仓库名;`
mysql> use name;
Database changed
数据表的相关操作
概念

数据库使我们日常生活中的仓库,数据表可以认为是货架,数据表中每一列都叫做字段。

查看当前数据库的所有表

show tables;

mysql> show tables;
Empty set (0.00 sec)
##还没写入内容暂时为空
查看其他库的所有表

show table from 库名;

创建表
`create table 表名(`

列名  列类型,

列名  列类型

`)`
create table worked(
id int,
isname varchar(15),
sex varchar(20)
);
查看表结构

desc 表名;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZBnlIt5-1635327264473)(D:\1+X\截图\01.png)]
创建数据库

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

数值类型

类型大小范围(有符号)用途
INT或``INTEGER(in 或 integer)4 字节(-2 147 483 648,2 147 483 647)大整数值
FLOAT(float)4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)单精度 浮点数值
DOUBLE(double)8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值

字符串

字符串类型指`CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET`。

`char和varchar`:
1.char(n) 若存入字符数小于n,则以空格补上。char的储存末尾是不能有空格的,`varchar`不会。 
2.`char(n)` 固定长度,char(4)不管是存入几个字符,都将占用4个字节,`varchar`是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以`varchar(4)`,存入3个字符将占用4个字节。 
3.`char`类型的字符串检索速度要比`varcha`r类型的快。
`varchar`和`text`: 
1.`varchar`可指定个数,text不能指定个数,内部存储`varcha`是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),`text`是实际字符数+2个字节。 
2.`text`类型不能有默认值。 
3.`varchar`可直接创建索引,text创建索引要指定前多少个字符。`varchar`查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
类型大小用途
CHAR(char)0-255字节定长字符串
VARCHAR(varchar)0-65535 字节变长字符串
TEXT(text)0-65 535字节长文本数据

日期时间类型

表示时间值的日期和时间类型为`DATETIME`、`DATE`、`TIMESTAMP`、`TIME`和`YEA`R。
类型范围用途
DATE1000-01-01/9999-12-31日期值
TIME'-838:59:59'/'838:59:59'时间值或持续时间
YEAR1901/2155年份值
DATETIME1000-01-01 00:00:00/9999-12-31 23:59:59混合日期和时间值
TIMESTAMP1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07混合日期和时间值,时间戳
字段的类型:
整数为:`int浮点值==>float字符串`都是用`char 定长和varchar不定长`
char(8)(英文单词站一个格,汉字站两个格)==>如果用户是4位,系统会自动不齐个空格
`varchar(8)`如果是四位 ,不会自动补齐。
方式:`create table 表名 (id int,username varchar(20),phone char(11));`
mysql> create table stu2(id int,username varchar(20),phone char(11));
Query OK, 0 rows affected (0.00 sec)
修改字段名
`方式: alter table 表名  change 原字段名  新字段名  新类型`
mysql> alter table stu2 change phone adress varchar(30);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
查看表结构
`desc  表名`
mysql> desc stu2;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | YES  |     | NULL    |       |
| username | varchar(20) | YES  |     | NULL    |       |
| adress   | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
添加字段
`alter table 表名 add 新字段名;`
mysql> alter table stu2 add phone char(11);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
删除字段
`alter table 表名 drop 要删除的字段;`
mysql> alter table stu2 drop phone;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

字段修饰

primary key  ==>主键的意思  主要是防止添加字段是重复的
not null ==>表示在该字段添加的值一定不能为空
comment==>是添加注释的意思
auto_increnment==>是自增长的意
foreign key==> 外键约束
unique==> 唯一约束
default==>默认值
外键
创建
[constraint 外键名] foreign key(外键字段名) references 父表格(参照字段名);
添加
alter table 子表名 add[constraint 外键名] foreign key (外键字段名) reference 父表名(参照字段名);
distrct:父表不能删除或更新一个被子表引用的记录
cascade:父表删除或更新后自动删除子表或更新子表中的数据。
set null: 父级操作后子级被置空;(在都没有加not null的情况下)。
no action :与sql中的district相同
set default:设默认值

对数据进行操作

增加数据
插入一条数据
insert into 表名(字段1,字段2.。。)values(值1,值2,。。。)
插入多条语句
insert into表名(字段1,字段2.。)values(值1,值2.。),(值1,值2.。) 
删除数据
delete from 表名 where 条件表达式;
truerate 全部清空
更新数据
update 表名 set 字段名=新的值 where 条件
查询数据
查询所有数据
select*from 表名;
查询指定字段
select 字段1,字段2... from 表名
去除重复的字段
select distinct 字段名  from 表名
where条件查询

(1)查询工资

select *from 表名  where sal>3000;

(2)查询工资不等于6000

select *from 表名 where sal>6000;
(3)查询工资等于6000
select*from 表名 where sal=6000;
(4)查询不是女生的信息
select*from yuan where name='jim' and sex='女';
(5)查询工作在3000到5000之间的
##between 表示范围 相当于>=3000 and <=5000
select *from yuan where sal between 3000 and 5000
(6)查询地区是保定 南京 沧州
in(值1,值2,值3)表示是里面的任意一个值
(7)like模糊查询
like后面可以跟字符串表示模糊查询,%代表任意字符,一个`_`代表一个字符
##比如查询名字叫张x
select *from yuan where name like '张%';
select *from yuan where name like '%华';
select *from yuan where name like '%华%';

MySQL语法规范
1. 不区分大小写,但建议关键字大写
2. 每条命令最好用分号结尾
3. 每条命令根据需要,可以进行换行
4. 注释:单行注释:#注释内容、-- 注释文字

​                   多行注释:/*  注释文字  */
employee_id   员工编号
first_name    名
last_name     姓
email         邮箱
phone_number  电话号码
job_id        工种编号
salary        月薪
commission_pct奖金率
manager_id    上级领导的员工编号
department_id 部门编号
hiredate      入职日期
1统计总共的数据
select count(*) from yuan;
2统计表中的男生和女生的人数
select count(*) from yuan grounp  by sex;
3统计表中每个部门工资最高的相关信息
select b_id,max(sal) from yuan by b_id;
4统计每个地区平均工资>2000
select avg(sal) from yuan grounp by area having avg(sal)>=2000;
排序

语法:select 字段 from 表名 order by 排序字段 desc/asc;

desc表示降序;asc表示升序。

如果不设置排序方式,默认是从低到高排序的。

(1)把数据表按工资从高到底排序
select *from yuan order by sal desc;
(2)比如我们查询yuan表中工资最高的前三名
select*from yuan order by sal desc limit 3;
limit索引号,长度;

连表的查询

-- 笛卡尔积
 -- 语法:`select*from 表名1 inner join 表名2;`
## 内连接
-- 语法:`select *from 表名1 inner join 表名2 on 条件;`
# 外连接
# 左外连接
-- 语法:`select 字段 from 左表名 left outer join 右表名 on 条件;`
# 右外连接
-- 语法:`select 字段 from 左表名 right outer join 右表名 on 条件;`
SELECT name,sex,score,tname FROM student inner JOIN teacher ON student.tid=teacher.id;

SELECT name,sex,score,tname FROM student LEFT JOIN teacher
ON student.tid=teacher.id;

SELECT name,sex,score,tname FROM student RIGHT JOIN teacher
ON student.tid=teacher.id;
navicat导入导成sql语句

表==>sql文件==>结构和数据

视图

创建视图:create view 视图名 as select 语句;
删除视图:drop view 视图名;

索引分类
##普通索引==>是唯一的索引,加速查询
create index 索引名 on 表名(列名);
##唯一索引==>(可以有null)是主键索引,加速查询//列值唯一==>(不可以有null)+表中只有一个
create unique index 索引号 on 表名(列名);
##组合索引:多列值组成一个索引,专门用于组合搜素,其效率大于索引合并
普通组合:create index 索引名 on 表名(列名1,列名2.。。);
唯一组合:create unique index 索引名 on 表名(列名1,列名2,,);
全文索引:对文本内容进行分词搜索。
查看索引: show index from 表名[from<数据库名>];

触发器

触发器(trigger),也叫触发程序,是与表有关的数据库对象。

语法:create trigger 触发器名 触发时机  触发事件 on 表名 for each row
触发程序体:
(1)时机:before/after
(2)事件:insert update delete
(3)for each row:当条件满足时就会触发程序
(4)可以是一条语句体,是由begin...end包囊的多条语句。

存储过程

语法:create procedure 存储过程名称(in|out|inout 参数名称 参数类型,.....)

begin

过程体;

end

-- 查看所有存储过程状态。
show procedure status;
-- 查看对应数据库下所有存储过程状态
show procedure status where db='数据库名';
-- 查看名称包含  student的存储过程状态
show procedure status where name like '%student%';
-- 查询存储过程详细代码。
show create procedure 过程名;

调用存储过程
call 存储过程名([过程参数[....]])

权限管理

语法:

grant 权限 on `数据库名`.*to `用户名`@`主机名`;
##权限可以是creat alert  drop  update  delete select grant option all


删除权限:
revoke 权限 ON `数据库名`.*to `用户名`@`主机名`;

查看用户权限
show grants for `root`@`localhost`;

use 库名;
#进阶1:基础查询
    /*
语法:
SELECT 查询列表  from 表名;
类似于 :System.out.println(打印的东西);
特点:
1、查询列表可以是:表中的字段、常量值、表达式、函数
2、查询的结果是一个虚拟的表格
*/
    #查询表中的单个字段
SELECT
    字段名
FROM
    对应的表;
    #查询表中的多个字段
SELECT
    字段名1,字段2,字段3
FROM
    对应的表;
    

事务处理

  1. 原子性 Atomicity在操作工程中要么开始,要么全部写完,中间出行错的从头开始。(滚回Rollback)
  2. 一致性Consitency 在执行语句中要么都完成要么都失败
  3. 隔离性Isolation两个事物之间是隔离开来的
  4. 持久性Durability 事务处理结束后,是全部保存下来的,不会丢失。
开启事务:begin或star transaction
事务结束:commit/rollback之后
提交事务:commit
回滚事务:rollback
备份和恢复
mysqldump -u用户  -p密码 数据库名> 文件名.sql
备注:备份可以不是.sql
恢复数据
mysql -u用户名 -p 密码 新数据库名 <文件名.sql
查询全部字段:
select *from employees;
#查询常量值
SELECT 100
#查询表达式
SELECT 100*90;
#查询函数
select version();
#起别名
/*
1 便于理解
2 如果要查询的字段有重名的情况,使用别名可以区分开来。
*/
#方式一
select 100%98 as 结果;
select last_name as 姓,first_name as 名 from employees;
#方式二
select last_name 姓,first_name 名 from employees;
#去重
#案例:查询员工表中涉及的所有的部门编号
select distinct department_id from employees;


mysql中+号:
仅仅只有一个功能:运算符
select100+90 两个操作数都是数值型,

ck


#### 备份和恢复

```mysql
mysqldump -u用户  -p密码 数据库名> 文件名.sql
备注:备份可以不是.sql
恢复数据
mysql -u用户名 -p 密码 新数据库名 <文件名.sql
查询全部字段:
select *from employees;
#查询常量值
SELECT 100
#查询表达式
SELECT 100*90;
#查询函数
select version();
#起别名
/*
1 便于理解
2 如果要查询的字段有重名的情况,使用别名可以区分开来。
*/
#方式一
select 100%98 as 结果;
select last_name as 姓,first_name as 名 from employees;
#方式二
select last_name 姓,first_name 名 from employees;
#去重
#案例:查询员工表中涉及的所有的部门编号
select distinct department_id from employees;


mysql中+号:
仅仅只有一个功能:运算符
select100+90 两个操作数都是数值型,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值