关系型数据库:
1:使用表格形式来存储和组织数据的数据库系统
2:数据以行和列的形式存储在表中,每个表都有一个唯一的标识符。行的叫记录;列的叫字段
3:使用结构化查询语言(SQL),可以定义表结构、插入、更新和删除数据,并执行复杂的查询操作
4:提供数据的一致性和完整性、数据的关联性、事务处理和并发控制等特点。
客户端服务器:允许多个客户端应用程序通过网络连接到 MySQL 服务器,同时共享和管理数据库。我们所见到的小黑框就是客户端。
MySQL 服务器:负责存储和管理数据,处理客户端请求,并提供高性能和可靠性
MySQL 客户端:是连接到服务器的应用程序,通过网络连接发送查询和接收结果。无论服务器和客户端是否在一个机器上;它们都是通过网络连接的
1:密码填写错误;mysql使用时候,如果出现错误怎么处理?闪退?
遇到问题;我们需要搞清楚问题的原因是什么;那就好办。找到MySQL客户端的位置;进行复制;进入命令行输入这个位置路径;再执行我们上述导致错误(闪退)的操作。
这里就会提示密码错误:
2:服务器未开启错误
我们到这里讲服务器启动即可
MySQL:命令行:ctrl+c不是复制,是终止当前行的内容,或者你执行一半觉得有错或者时间太长先终止就输入这个,会重新起一行。
方向键向上能让你回到上一条命令
增删查改:查都是都是临时表,不会操作硬盘数据
1:创建数据库 create database if not exists student charset utf8 ;
charset utf8是指定字符集;
if not exists 可以在创建表和库使用,如果存在则不创建
2:查看所有数据库 show databases;
3:选中数据库 use student;
4:删除数据库 drop database student;
1:数值类型
bit 能存储0,1,null。(常用布尔0对应false 1对应true)
tinyint 1字节 微int
smallint 2字节 小int
int 4字节 int
bigint 8字节 大int
浮点:M表示有效数字的位数;D表示小数点后保留几位
float(M,D) 4字节
double(M,D) 8字节
decimal(M,D) M/D最大值+2字节
numeric(M,D) M/D最大值+2字节
float和double并不适合精确的数据;存在误差;decimal能精确保存。 numeri和decimal基本一样。
比如:
有效数字:decimal(3,1) 表示的是三位有效数字,小数点后只有一位。0.0000052 两位有效数字,前面的0是不算有效数字。 12.2300 六位有效数字
注意:
sql对类型不严格,隐式类型转换 例如 decimal(3,1)
你插入98.05(它会自动四舍五入调整精度,使其符合你的类型)
你插入“98.0”(它也能把字符类型转为decimal,单双引号都能表示字符串) 但是你插入10000就直接报错(能转的sql会尽量帮你转,不能转就报错)int 你插入“abc当然就没法转”
常用int 、double、decimal
2:字符串类型
VARCHAR:0-65535字节
TEXT: 长文本类型,最多可以存储65535个字符。
MEDIUMTEXT: 中等长度的文本类型,最多可以存储16777215个字符。
BLOB: 二进制大对象类型,最多可以存储65535个字节。
3:时间类型
DATETIME: 8字节;1000到9999年
TIMESTAMP: 4字节;1970到2038年
插入格式
范围查询
1:创建表create table student(name varchar(20),age int,chinese int ,math int, english int);
2:查看指定数据库所有表
show tables;(前提先use 选中数据库)
3:查看表结构(查看的是列属性)
desc student;
4:删除表
drop table student;
增:
单行插入:insert into student values( ‘zhangsan’,18,89,98,99);
多行插入:insert into student values( ‘zhangsan’,18,77,88,99),(‘lisi’ ,18,77,88,97);
指定列插入(未指定的列将以默认值填充): insert into student(name,id) values( ‘zhangsan’,19);
查:
全列查询:select *from student;
指定列查询:select id,name from student;
表达式查询: select english+chinese+math from student;
起别名:如果名字是english+chinese+math不好看
select name,chinese+english+math as sum from student;
去重复查询:
必须是以下指定的列都重复才算是
select distinct chinese,english,name from student;
排序查询:
有order by默认升序 ;null比负数还小
select *from student order by chinese;
如下指定;先按chinese去排序;如果它们一样则用math排序
select *from student order by chinese,math;
加desc指定降序:chinese使用降序的排序
select *from result order by chinese desc,math;
条件查询:
where跟在表后面(你要查出结果你就放from表前面;要进行筛选则放表后面)
比如:select name from student where id=100;我查到是始终是前面的name;只是后面的id=100是筛选用的。order by排序是最后面。
运算符:
= < <=
= 特殊null=null结果还是null
<=> null<=>null 结果是true
!=,<> 不等于
between x1 and x2 在这个x1到x2范围的才查出来
in(x1,x2,x3……) 是x1、x2这里面的其中才查出来
is null 是null
is not null
like 模糊匹配
模糊查询:select * from 表名 where 列 like ‘%’
常见三种:
1:孙% 只要是孙开头,无论几个字符都没问题。
2:%孙 以孙结尾的
3:%孙% 不管开头结尾,只要包含孙即可
4:_ 下划线匹配一个字符:
孙_%:孙开头,并且孙后面只有一个字符
孙_ _%:两个下划线代表孙后面两个字符
_ 孙 _ :肉夹馍的孙,前面一个字,后面一个字,中间夹着孙
limit:限制查询的数量(如果有where则放where后面,没有这个就是在表的后面)
select *from student limit N; N表示最多显示的数量
select *from result limit 5 offset 0; offset从0的地方开始计数,查5条
update student set name=‘zhaoliu’ where math=100;把数学成绩100分的人名字改成zhaoliu
一次修改多行
update student set math=97 where true; 把所有人数学改成97
update student set math=97 where id<3; 把id小于3的人数学改成97
update student set math=97 where name like ‘李%’; 把姓李的数学改成97
update student set math=math-5 where true; 对所有人数学成绩减5分 ,null-5依然是null·
update student set math=math-5 ,chinese+10 where true; 修改多个列,逗号隔开
update student set math=10 order by chinese+english+math limit 4; 你不指定条件就是默认是真的;按成绩排序升序我取4条然后把他们数学成绩修改为10
delete from student where name=‘李四’;
注意:如果没有条件,则是把所有记录删掉(剩下一张空表,drop是直接把表都删掉)