mysql基本用法

Mysql是一个关系型数据库管理系统,关系数据库是表组成的。sql语句方便在一个表以及多个表之前做非常复杂的数据查询。非关系型数据库是以键值的方式存储的。

mysql特点是开源 免费 使用范围广,跨平台,提供了多种语言调用的API,是学习互联网公司数据库的首选。

数据库操作

创建数据库:

create database python_test_01 charset=utf8;

删除数据库:

drop database python_test_01;

选择数据库:

use python_test_01;

mysql数据类型

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

  1. 整形

    mysql数据类型 含义(有符号)
    tinyint(m) 一个字节 范围(-128~127)
    smallint(m) 2个字节 范围(-32768~32767)
    mediumint(m) 3个字节
    int(m) 4个字节
    bigint(m) 8个字节
  2. 浮点型(float double)

    mysql数据类型 含义
    float(m,d) 单精度浮点型 m总个数,d小数位
    double(m,d) 双精度浮点型 m总个数,d小数位
  3. 定点数

    浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值

    decimal(m,d)参数 m <65 是总个数,d<30 且d<m是小数位

utf-8

一个英文字符等于一个字节,一个中文三个字节

mysql数据类型 含义
char(n) 固定长度,最多255个字符
varchar(n) 固定长度,最多65535个字符
tinytext 可变长度
text 可变长度
mediumtext 可变长度
longtext 可变长度

char和varchar:

  1. char(n)若存入字符数小于n,则以空格不起,查询时再将空格去掉,所以char类型存储的字符串末尾时不能有空格
  2. char(n)固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节
  3. char类型的字符串检索速度要比varchar类型的快

日期时间类型

mysql数据类型 含义
date 日期'2021-4--7'
time 时间'15:25:13'
datetime 日期时间'2021-4-7 15:26:52'
timestamp 自动存储记录修改时间

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间

数据类型的属性

mysql关键字 含义
NULL 数据列可以包含NULL值
not null 数据列不允许包含null值
default 默认值
primary key 主键
auto_increment 自动递增
unsigned 无符号
character set name 指定一个字符集

数据库操作

查看数据库下有哪些表

use 数据库名;

查看当前数据库下有哪些表

show tables;

查看表结构

desc 表名;

插入数据

insert into 表名 values()

insert into classes values(0,'学前班')

查询数据

select * from 表名;(查询所有记录)

select id ,name from 表名(查询指定字段)

主键相关操作

删除主键

-- alter table test01 change id id int
-- alter table test01 drop primary key

创建主键及复合主键

create table test(
id int auto_increment not null,
name varchar(30),
primary key(id,name)
)

创建表后加主键

create table test02(
id int,
name varchar(30)
);

alter table test02 add primary key(id);
alter table test02 change id id int auto_increment;

查询

使用as给字段起别名(给长的字段取别名)

select id as c from student;

可以通过as给表起别名(用在连表查询里,表名比较长的情况)

select stu.id,stu.name from students as stu;

在select后面列前使用distinct可以消除重复的行

select distinct name from student;

我们想查找一下名字为张三的学生?

select * from students where name='张三';

条件查询

使用where对表中的数据筛选,结果为true的行会出现在结果集中

where后面支持多种运算符,进行条件的处理

比较运算符

逻辑运算符

模糊查询

范围查询

空判断

语法格式

select 字段1,字段2 from 表名 where 条件;
select id ,name from class where name ='小哈';

比较运算符

例1:查询编号大于3的学生

select id,name,age from student where id>3;

例2:查询编号不大于4的学生

select id , name from student where id <=4;

例3:查询姓名不是‘'小儿'的学生

select * from students where name !='小儿';

例4:查询没删除的学生

select * from students where id_Delete =0;

逻辑运算符

and or not

例5:查询编号大于3的女同学

select * from student where id >3 and gender ='女';

例6:查询编号小于4或没被删除的学生

select * from students where id<4 or is_delete -0;

例7:查询年龄不为空的学生

select * from students where age is not null;

范围查询

between .....and (相当于 <= 和>=)

查询年龄在20岁到30岁之间的学生

select name from students where age between 20 and 30

模糊查询

like

%表示任意多个任意字符

例7:查询姓张的学生

select * from student where name like '张%';

例8;查询姓张,名是一个字的学生;

select * from student where name like '张_';

例9:查询姓王或柳的学生

select name from students where name like '王%' or name like '柳%';

范围查询

in 表示在一个非连续的范围内

例10:查询编号是1或3或8的学生

select * from students where id in (1,3,8);

例11:查询编号为3至8的学生

select * from students where id between 3 and 8;

例12:查询编号为3至8的男生

select * from students where (id between 3 and 8) and gender =1;

优先级

优先级由高到低的顺序为:小括号,not,比较运算符,逻辑运算符, and比or先运算。如果同时出现并希望先算or,需要结合()使用。

修改删除数据

修改数据语法结构

update 表名 set 字段名 =’值', 字段名=‘值’ where 条件;

如果不加where全部更新,更新时一定要加where条件;

删除数据语法结构

delete from 表名; 删除全部数据

删除名字是一年级的班

delete from class where name='一年级';

根据条件删除

delete from students where id =1;

排序

倒序

(asc(正序),desc(倒序))

select * from sutdents order by age desc;

聚合函数

为了快速得到统计数据,经常会用到如下5个聚合函数

总数

count(*)表示计算总数

例1:查询学生总数

select count(id) from students;

最大值

max(*)

查询女生编号的最大值

select max(id) from students where gender =2;

最小值

min(*)

查询编号最小

select min(id) from students;

求和

sum() 表示求例的总和

select sum(id) from students;

平均值

avg()

例:求男生平均编号值

select avt(id) from students;

分组

group by

将查询结果按照一个或多个字段进行分组,字段值相同的为一组

group by + having

group by 可以加where条件,where条件剥削加以 group by前面

having作用和where 一样,但having只能用于group by

连接查询

mysql支持三种类型的连接查询

内连接查询:查询的结果为两个表匹配到的数据(inner join)

select 字段 from 表名 inner join 表名2 on 关联条件

select * from teacher as a inner join students as b on a.id=b.id;

右连接查询(right join:右表持有的数,对于左表中不存在数据使用null填充

左连接查询(left join ):左表持有的数据,对于右表中不存在的数据使用null填充

事务

事务四大特性(ACID)

  • 原子性(atomicity)
  • 一致性(consistency)
  • 隔离性(isolation)
  • 持久性(durabilty)

个很好的事务处理系统,必须具备这些标准特性:

原子性(atomicity)
一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

一致性(consistency)
数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即使在执行第三、四条语句之间时系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中。)

隔离性(isolation)
通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。(在前面的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则其看到支票帐户的余额并没有被减去200美元。)

持久性(durability)
一旦事务提交,则其所做的修改会永久保存到数据库。(此时即使系统崩溃,修改的数据也不会丢失。)

索引

当数据库中数据量很大时,查找数据会变得很缓慢

优化方案:索引

索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书的目类,能加快数据库的查询速度。

索引的目的在于提高查询速度,可以类比字典,如果要查'mysql'这个词,我们肯定要定位到m字母,再找剩下的ysql.

它们的原理都是一样的,通过不断地缩小想要或地数据地范围来筛选处最终想要地结果,同时把随机地事件变成顺序地事件

要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独立索引会占用磁盘空间建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
主键,唯一,普通,联合

三范式

  • 第一范式(确保每列保持原子性)
  • 第二范式(确保没列都和主键相关)
  • 第三范式(确保每列都和主键列直接相关,而不是间接相关)
上一篇:Hive的分区和分桶


下一篇:SqlServer触发器的创建与使用