mysql数据库的基本操作

数据库可以分为关系型数据库非关系型数据库

数据库的定义:

数据库==文档,表格软件

文件夹=库

但库里不能再存库

库-表-数据

与excel储存数据相比的优点:支持多人同时访问

表是由:字段名+数据构成

pyhon代码 SQL命令 两者本质一样,叫法不同

所有MySQL语句后面都要加分号

一般一个项目一个库,大项目多个库

win+r输入cmd 进入mySQL:mysql -uroot -proot(注意单词后有空格)

mySQL的条件查询:

#运行命令时程序中出现🆗字符,一般运行成功

数据库的命令:

数据库的创建:

create database 数据库名;(数据库名一般用英文)

#库里可能不支持存放中文数据因此需使用万国码而变为(不用上面的):

create database bailuku default character set utf8 collate utf8_general_ci;

显示所有库:

show databases;

进入某一个数据库:

use 数据库名字;

删除库:

drop database 数据库名;

数据表的命令:

创建一个表:

create table 表名(

字段名 数据类型 约束(可选),

字段名 数据类型 约束(可选)...

);

#最后一个字段名后面不加逗号
#或者将约束放到最后,约束类型(字段名)

显示库中的表:

show tables;(要先打开库 use database;)

查看数据表的结构 查询类型,字段名:

desc 表名;

删除表:

drop table 表名;

字段/数据的命令:

修改表-添加字段:

alter table 表名 add 字段名 类型 约束;(可选)

修改表-修改字段类型:

alter table 表名 modify 字段名 类型 约束;(可选)

修改表-修改字段名及字段类型:

alter table 表名 change 原名 新名 类型 约束;(可选)

修改表-删除字段:

alter table 表名 drop 字段名;

添加数据:

insert into 表名 values(...)如括号中写(1'白鹿'18190.00'男';
#如果表格中有数据可以不写,则数字类型都为0,字符串类型为''或null,不能打空格

查询数据:

select*from 表名;

修改数据:

update 表名 set 字段名一=值一,字段名二=值二...where条件如where name = 白鹿;(或其他字段名对应的数据,多个条件:用and,or连接)

删除数据:

delete from students where 条件;

数据类型细分:

整数类型:

类型字节大小有符号范围(Signed)无符号范围(Unsigned)
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32768 ~ 327670 ~ 65535
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215
INT/INTEGER4-2147483648 ~21474836470 ~ 4294967295
BIGINT8-92233720368547758 08 ~ 92233720368547758070 ~ 18446744073709551615

用到Unsigned直接加在类型后面

字符串:

类型说明使用场景
CHAR固定长度 CHAR(11)#手机号,小型数据身份证号、手机号、电话、密码
VARCHAR可变长度,小型数据VARCHAR(5) #在5之内姓名、地址、品牌、型号
TEXT可变长度,字符个数大于 4000存储小型文章或者新闻
LONGTEXT可变长度, 极大型文本数据存储极大型文本数据

时间类型:

类型字节大小示例
DATE4‘2020-01-01’
TIME3‘12:29:59’
DATETIME8‘2020-01-01 12:29:59’
YEAR1‘2017’
TIMESTAMP4‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC
  • 小数:decimal decimal表示浮点数,如 decimal(5, 2) 表示共存5位数,小数占 2 位.

  • char表示固定长度的字符串,**如char(3),如果填充’ab’时会补一个空格为’ab ',**3表示字符数

  • varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’,3表示字符数(不超出)

  • 枚举类型(enum)

  • 常见的约束:

    • 主键约束 primary key(填入内容已固定,列如排序的序号,不能重复 )
    • 非空约束 not null(此格不能为空)
    • 唯一约束 unique
    • 默认约束 default(如果添加时没有写值,存在默认值 default ‘默认值’)
    • 外键约束 foreign key
  • 数据类型和约束保证了表中数据的准确性和完整性

主键:一个表只能有一个主键 但是,如果说一张表当中有多个外键的话,那么可以有多个主键

外键:表与表之间的一些联系

#对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径.

严格规定长度是为了使表格占用空间更小

设计表:提炼数据中的精髓(简化,内存,关键字,分类)

添加外键的语句:

foreign key (里面加主键所在表的表头) references 引用表的表名(引用表里的字段名),写在创建外键字段名后一行

这张表的某一表头 参照于另一个表的某一表头

不能在表头后直接加两个primary key,因为命令中只能有一个主键

正确格式在最后排加primary key(字段名1,字段名2)

当一张表里有外键,想要删除字段名,要先删除外键字段名,再删除原来的字段名

在使用SQL语句显示结果的时候,往往在屏幕显示的字段名并不具备良好的可读性,此时可以使用 as 给字段起一个别名。

  1. 使用 as 给字段起别名

    select id as 序号, name as 名字, gender as 性别 from students;
    
  2. 可以通过 as 给表起别名

    -- 如果是单表查询 可以省略表名
    select id, name, gender from students;
    
    -- 表名.字段名
    select students.id,students.name,students.gender from students;
    
    -- 可以通过 as 给表起别名 
    select s.id,s.name,s.gender from students as s;
    #如果子查询里面也用到了外查询的表,以及一样的字段,那么就需要as取别名来进行区分
    
   
**说明:**
   
   - 在这里给表起别名看起来并没有什么意义,然而并不是这样的,我们在后期学习 自连接 的时候,必须要对表起别名。

MySQL中的函数写法只能写在select和from中间

distinct函数可以去除重复数据行。

​```sql
select distinct 列1,... from 表名;

例: 查询班级中学生的性别
select name, gender from students;

-- 看到了很多重复数据 想要对其中重复数据行进行去重操作可以使用 distinct
select distinct(name), gender from students;
distinct()于函数用法一样,括号中写入字段名

排序查询语法:

select * from 表名 order by1 asc|desc ,2 asc|desc,...

语法说明:

  1. 先按照列1进行排序,如果列1的值相同时,则按照 列2 排序,以此类推

  2. asc从小到大排列,即升序

  3. desc从大到小排序,即降序

    #如果想要两个数据排列,也只需要写一个order by如:select * from score order by c_ ase , sc_degree dese;,先排一个,在其中排另一个

  4. 默认按照列值从小到大排列(即asc关键字)

count()函数放在出,其中写入字段名,统计个数,也可直接放入也可统计

max() 找出字段名中的最大值

子查询:就是在select中还有个select ,只不过后面的select已用特殊方法转化为了较简单的数据

分割:直接在命令后面加入limit 数值1,数值2;意思为用排列的方式来切割列表,如0,1可以切出列表中的最高项

#用以上两个方法找出列表中成绩最大数据

select * from score where sc_degree = (select max(sc_degree) from score);#利用max函数子查询找出最大成绩所对应的数据


select * from score order by sc_degree desc limit 0,1;#利用排序找到最高项,再用切割函数分出最高项

分组:group by 字段名 注意:此方法并不是函数,不放入*位置,*位置也应放入一样字段名进 行打开操作

求平均值:使用avg(字段名)函数,此刻前面任然需要写入列表名字如:

select c_no,avg(sc_degree) from 学科 group by c_no;
#意思为列表中的元素以学科的分组来求出平均值,命令中avg()函数执行了三次

#此刻MySQL程序隐藏了具体的分类:学科一

​ …

​ …

​ 学科二

​ …

​ …

因此不用此方法来去重复项

like是模糊查询关键字,否定:not like

%表示任意多个任意字符如:‘3%’表示以3开头 ‘%3’表示以3结尾,’%3%'表示中间含有3

_表示一个任意字符

1:查询姓黄的学生:**

select * from students where name like '黄%';

例2:查询姓黄并且“名”是一个字的学生:

select * from students where name like '黄_';

范围查询

  1. between … and … 表示在一个连续的范围内查询

  2. in 表示在一个非连续的范围内查询(可包含多个数据,有时引用子序列时也会用到此方法)IN(数字一,数字二···)表示取出数字一、二等等数据

    两者常配合where语句一起使用

空判断查询

  1. 判断为空使用: is null
  2. 判断非空使用: is not null

注意:

  1. 不能使用 where height = null 判断为空
  2. 不能使用 where height != null 判断非空
  3. null 不等于空字符串

当使用 WHERE 字段名 = NULL,MySQL 会将这个查询等价于 WHERE FALSE,也就是说它会返回空的结果集,因为没有任何行的该字段会是 NULL

常见的比较运算符有 >,<,>=,<=,!=

like和%结合使用表示任意多个任意字符,like和_结合使用表示一个任意字符

条件语句中才可用到and or,其他时候不用

where 和 having都是条件运算符

只不过having可以配合group by一起出现,having可以直接用函数

select*from score group by c_no having count(_degree)>=2;
#此时函数不需要放在select和from之间

多表查询:

将拥有相同字段名拉来等起来如:
查询所用学生的s_name,c_no,sc_gegree列

select s_name,c-no,sc_degree from student,score where student.s_no=score.s_no;

#s_no为两列表中的重复字段名(也易看出列表中引出字段名的方式,注意where后必须加空格,否则程序会报错
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X_papada

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值