数据库3

84 阅读10分钟

数据的增删改查

插入数据

insert into 表名(字段1,字段2) values (值1,值2)
示例:
create table if not exists stu(
    id int,
    name varchar(20)
);
insert into stu (id,name) values(1,'yk')
//注意点:在插入数据的时候指定的字段名称的顺序不用和表中的字段名称的顺序一致
insert into stu (name,id) values ('zs',2)
//注意点:在插入数据的时候指定的取值顺序必须和指定的字段名称的顺序一致
insert into stu values (3, 'ls');
//注意点:如果插入指定的数据时,指定的取值顺序和表中字段的顺序是一致的,那么可以不用指定字段名称
insert into stu values (4,'ww'),(5,'zl')
//注意点:我们可以通过values插入多条数据

更新数据

update 表名 set 字段名称=值 [where 条件]
实例 :
update stu score=77
//如果在更新数据时没有指定条件,那么就会更新整张表中的数据
update stu  set score=88 where name='ls'
//如果在更新数据的时候指定了条件,那么只会更新满足条件的数据
update stu  set score=100 where name='zs' AND id=5;
//在指定条件是我们可以通过AND来指定多个条件,AND===&&&
update stu  set score=60 where name='zs'OR name='ls';
//在指定条件的时候,我们可以通过OR来指定多个条件 OR=== ||
update stu set name='yy' ,score=22 where id=5;
//在更新数据的时候,可以同时更新多个字段

查询表

注意点:以下方式会将表中的所有数据都查询出来,所以性能比较差

注意点:以下方式会将表中的所有数据都查询出出来,不能查询特定字段的值

select * from 表名

以下是查询数据完整的写法

select 字段名称1 ,字段名称2 from 表名 [where 条件]
查询特定字段的数据
select name from stu
查询满足条件的数据
select * from where score >60
select id, name from stu where score >60
select * from stu where score==77 || score==88
select *  from stu where in (77,88)
select * from stu where score BETWEEN 77 AND  88
select * from stu where score IS NOT NULL;
select * from stu where score IS NULL;

where支持的运算符

=(等于)、!=(不等于)、<>(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于);
IN(set);固定的范围值
BETWEENAND;值在什么范围
IS NULL;(为空) IS NOT NULL(不为空)
AND;与
OR;或
NOT;非
LIKE: 模糊查询

删除数据

delete from 表名 [where 条件];
​
//删除满足条件的数据
delete from stu where score > 60;
//删除所有的数据
delete from stu;

数据类型

mysql为什么要提供数据类型?

  • 如果没有数据类型,那么mysql就不知道需要分配多大的内存空间来储存你的数据过大的内存会造成资源浪费,体积变大,效率变低,过小导致数据溢出不能完整的保存数据所以有数据类型是为了我们合理的分配储存空间,降低数据库的体积为了我们更合理的分配空间,完整的保存数据为了更好的对我们数据库的优化

mysql中有哪些数据类型

  • 整型类型
  • 浮点类型
  • 定点类型
  • 字符类型
  • 文本类型
  • 枚举类型
  • 集合类型
  • 日期类型
  • 日期类型
  • 布尔类型

1.整型类型

  • TINYINT 1 字节 (-128,127) (0,255) 小整数值
  • SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
  • MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
  • INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
  • BIGINT 8 字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值

注意点:mysql中的整型和其他编程的整型一样,也区分符号和无符号,默认情况下整型就是有符号的,我们可以在数据类型的后面加上unsigned 来将数据类型变成无符号的

在设计数据库的时候一定要合理的使用数据类型

例如:我们要保存一个人的年龄(整数),我们应该用TINYINT类型,因为人最多活到255也已经上天了,所以我们可以用最小的整型

在保存数据的时候如果超出了当前数据类型的范围,那么就会报错

在设置数据的时候可以设置整型数据将来显示的位宽

+例如: 现在设置将来显示整型的位宽是2, 现在存储的数据1, 那么将来查询出来的数据就会显示成 1;

\2020-2-3 -- 2020-02-03

注意点: 如果存储的数据没有指定的位宽宽, 那么就会自动补空格或者0, 如果大于或者等于了指定的位宽, 那么毛都不做

create table person(
    id int,
    age tinyint
);
insert into person values (1, -128);
insert into person values (1, 127);
insert into person values (1, 128); #报错
​
create table person2(
    id int,
    age tinyint unsigned
);
insert into person values (1, -128); #报错
insert into person values (1, 127);
insert into person values (1, 128);
​
create table person3(
    id int,
    age tinyint(2) zerofill
);
insert into person values (1, 1);   #01
insert into person values (1, 12);  #12
insert into person values (1, 123); #123

2.浮点类型 (专门用来保存小数)

FLOAT(m,d) 4字节 单精度

DOUBLE(m,d) 8字节 双精度

m总数为数, d小数位数

folat和double的区别

占用空间大小不一样

默认保留小数的小数位数不同

保存数据的有效精度也不一样

浮点类型特点

和其他编程一样,浮点类型是不精确的

所以在企业开发中千万 不要用浮点数保存用户的精确信息

实例1:默认保留的小数位数不同
create table person (
id int ,
weight FLOAT,
height DOUBLE    
)
insert into person values (1,1.12345678901234567890, 1.12345678901234567890)
weight: 1.12346
height: 1.1234567890123457
示例二: 手动指定小数的总位数和小数部分的位数
create table person1(
id int ,
weight FLOAT(10,6),
height DOUBLE(10,6)
)
insert into person2 values (1, 1.12345678901234567890, 1.12345678901234567890);
weight: 1.123457
height: 1.123457
示例三: 保存数据的有效精度也不同
creat table person2(
id int ,
weight FLOAT(20,19) ,
height DOUBLE(20,19)    
)
insert into person3 values (1, 1.12345678901234567890, 1.12345678901234567890);
weight: 1.123456-8357467651000
height: 1.123456789012345-7000

3.定点类型-也是用于储存小数的

decimal(m,d)

m总位数 d小数位数

定点类型的本质:是将数据分为两个部分来储存,每个部分都是中暑,所以不要乱用定点类型,非常消耗资源

create tbale person4(
id int ,
weight decimal(21,20),
height deciamal(21,20)    
)
insert into person4 values (1, 1.12345678901234567890, 1.12345678901234567890);
weight: 1.12345678901234567890
height: 1.12345678901234567890

4.字符类型 专门用来储存字符的

CHAR(size) 0-255 字节 定长字符串

VARCHAR(size) 0-65535字节 变长字符串

char 和varchar 区别

能够保存数据的容量不一样

char 不会回收多余的字符,要多少给多少

varchar 会回收多余的字符,用多少给多少

例如:通过 char(2)储存数据'a',储存的结果是' a';

例如:通过varchar(2)储存数据'a'储存结果是'a';

实例一:
create table person (
id int,
 name1 char(2),
 name2 varchar(2)
)
insert into person values (1, 'a', 'b');
insert into person values (1, '12', '34');
insert into person values (1, 'abc', 'def'); #只要超出申请的范围就会报错
示例2:
注意点:由于是字符串类型,所以传递至建议用单引号''
注意点:varchar理论上可以支持65535个字符串,但是实际会随着当前数据库的字符集改变
create table person2(
    id int,
    name1 char(255),
    name2 varchar(255)
);
# 65535 / 3 = 21845, 由于utf8一个字符占用3个字节, 所以varchar在utf8的表中最多只能存储21845个字符
# 65535 / 2 = 32767, 由于gbk一个字符占用2个字节,所以varchar在gbk的表中最多只能存储32767个字符
creat table person3(
id int ,
name1 char(255),
name2 varchar(65535)
)chrset=gbk
Column length too big for column 'name2' (max = 21845); use BLOB or TEXT instead
Column length too big for column 'name2' (max = 32767); use BLOB or TEXT instead

5 大文本类型

mysql中每一行储存的数据是有大小限制的,每一行最多只能储存65535个字节

creat table person (
#name1 char(3),
name2 varchar(21844) #在ut-f8中相当于65535个字节    
)chrset=utf8
​

TINYTEXT 0-255字节 短文本字符串

TEXT 0-65535字节 长文本数据

MEDIUMTEXT 0-16777215字节 中等长度文本数据

LONGTEXT 0-4294967295字节 极大文本数据

 create table person2(
    name1 char(3),
    name2 TEXT #不会报错, 因为没有超出显示, 实际只占用10个字节
)charset=utf8;
注意点:大文本类型在表中并不会实际占用所能保存的字节数,而是利用10个字节引用了实际保存数据的地址

6枚举类型

和其他编程语言一样,如果某个字段只能是几个固定的值中的一个,那么就可以使用枚举enum(值1,值2,值3)

create table person (
id int
gender enum ('男','女')    
)
insert into person values (1, '火'); #会报错
insert into person values (1, '男'); #不会报错
insert into person values (2, '女'); #不会报错
​

注意点:

mysql中的枚举类型和其他的编程语言一样,底层都是使用整型来实现的,和其他编程不一样的是其他语言的枚举是从0开始的而mysql是从1开始的

由于mysql的枚举底层是使用整型实现的,所以我们在赋值的时候除了可以赋值固定的几个值中的一个还可以赋值对应的整数

insert into person values (4, 1); #不会报错
insert into person values (4, 4); #会报错

7集合类型

和编程开发中一样,如果某个字段的取值只能是固定值中的几个,那么就可以使用集合类型set(值1,值2,。。)

create table person (
id int ,
hobby set('篮球''足球','高尔夫球''足浴')    
)
insert into person values (1, '篮球,足球,高尔夫球'); #不会报错
insert into person values (1, '橄榄球');  #会报错
insert into person values (2, '篮球'); #不会报错  1
insert into person values (3, '足球'); #不会报错  2
insert into person values (4, '高尔夫球'); #不会报错  4
insert into person values (5, '足浴'); #不会报错  8

注意点:

mysql的集合类型也是使用整型来实现的

mysql 的集合类型是按照2(n)的方式来实现的

2(0)=1

2(1)=2

2(2)=4

2(3)=8

8 布尔类型-专门保存真假的

create table person (
id int ,
flag boolean    
)
insert into person values (1, '男'); #会报错
insert into person values (1, true); #不会报错
insert into person values (2, false); #不会报错

注意点:

mysql中的布尔类型也是使用整型来实现的,0就是表示假,1就表示真

底层的本质是因为mysql是使用的c/c++来实现的,所以就是非零即真

insert into person values (3, 1); #不会报错
insert into person values (4, 0); #不会报错
insert into person values (5, 2); #不会报错

9 日期类型-专门用来保存时间的

DATE 3字节 YYYY-MM-DD 日期值

TIME 3字节 HH:MM:SS 时间值或是持续时间

DATETIME 8字节 YYYY-MM-DD HH:MM:SS 混合日期和时间值

注意点:在存储时间的时候,需要用单引号将时间括起来

creat table person (
id int ,
filed1 DATE,
filed2 TIME,
filed3 DATETIME    
)
insert into person values (1, '2020-02-02', '14:18:23', '2020-02-02 14:18:23');

\