mysql简单增删改查

SQL的基本规则


1)SQL 语句要以分号(;)\G结尾
RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。我们通常在句子的句尾加注标点表示这句话结束,中文句子以句号。结尾,英文以点号.结尾,而 SQL 语句则使用英文分号;结尾。

2)SQL 语句不区分大小写
SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。

提示:关键字是数据库事先定义的,有特别意义的单词。
虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易。
关键字大写
数据库名、表名和列名等小写

需要注意的是,插入到表中的数据是区分大小写的。例如,向数据库中插入单词 Computer、COMPUTER computer,这三个是不一样的数据。

 

基本sql语句之库操作

# 增
   create database db;
   create database db charset="gbk";
# 查
   show databases;
   show create database db;
# 改
   alter database db charset="utf8"; # 修改编码
# 删
   drop database db;

基本sql语句之表库操作

"""
操作表(文件)的时候,需要指定所在库(文件夹)

1.查看当前所在库名称
select database();
2.切换数据库
use 数据库名称;
"""
查看当前所在库名称
select database;

# 增
create table t1(id int,name char(4)); # 创建表一定要给字段
# 查
   show tables;
   show create table t1;
   describle t1; #(简写:desc t1;)
# 改
alter table t1 modify name char(16);
# 删
drop table t1;

基本sql语句之表库操作

# 增
insert into table t1(1,"lhs"),(2,"jason"); # 在t1表中新增两行(必须按照表的规范)

   select * from t1; # 查看t1中所有数据
   如果数据太多会出现一页显示不全的问题,我们可以只查找我们需要的数据;
   select id,name from t1; # 也可以通过库民.表名的方式跨库查找 eg:select name from db1.t2;
   '''如果字段过多导致展示错乱,还可以使用\G结尾来进行分行显示'''

# 改
   update 表名 set 字段名=新值 where 字段名=存在的值  # where筛选条件
   update t1 set name="lhs" where name="qq";
# 删
delete from 表名 where 字段名=存在的值

存储引擎

"""
简单的理解为:存储引擎就是处理数据底层逻辑,不同的引擎底层处理方式有所不同
"""

# 查看存储引擎信息
show engines;
   
# 需要掌握的有四个
MyISAM
  是MySQL5.5版本之前默认的存储引擎
      该引擎存取数据的速度都很快
           但是安全性较低 不支持很多额外的功能
   InnoDB
  是MySQL5.5版本之后默认的存储引擎
      该引擎支持事务、行级锁、外键
           存取数据的速度没有MyISAM快但是功能和安全性更高
   
   
   这两个数据都是存在内存中
   memory
  数据全部存储在内存中 速度很快但是断电立刻丢失
   blackhole
  黑洞 任何放入其中的数据都会消失(类似于垃圾处理站)
   
# 比较存储引擎之间的差异
'''创建表可以指定存储引擎
create table t1(id int) engine=存储引擎;
'''
create table t2(id int) engine=MyISAM;
create table t3(id int) engine=InnoDB;
create table t4(id int) engine=memory;
create table t5(id int) engine=blackhole;

# 不同存储引擎文件后缀名
MyISAM
三个文件
      .frm 表结构
          .MYD 表数据
          .MYI 表索引
  InnoDB
两个文件
  .frm 表结构
      .ibd     数据与索引
  memory
.frm 表结构
  blackhole
.frm 表结构

# 插入数据演示
insert into t2 values(1);
insert into t3 values(1);
insert into t4 values(1);
insert into t5 values(1);

创建表的完整语法

create table 表名(字段名1 字段类型(数字)约束条件,
字段名2 字符类型(数字)约束条件,
  字段名3 字符类型(数字)约束条件)

# 注意事项
1.字段名和字段类型是必须的 数字和约束条件是可选
   2.约束条件可以有多个
   3.最后一个字段结尾不能有逗号(不容易发现)

数据类型

# 整形
1bytes=8bit
   
   分类: 默认范围
tinyint 1bytes -128〜127   0 〜255
   smallint 2bytes -32768〜32767    0〜65535
   mediumint 3bytes -8388608〜8388607 0〜16777215
   int 4bytes -2147483648〜2147483647 0〜4294967295
   bigint 8bytes -9223372036854775808〜9223372036854775807 0〜18446744073709551615
   
'''不同类型的int能够存储的数字范围不一样'''
# 验证不同类型的int是否会空出一个存储正负号
   create table t7(id tinyint);
   insert into t7 values(256),(-129);
   
   create table t7(id tinyint unsigned);
   insert into t7 values(256),(-129);
   mysql> insert into t6 values(-2002),(260);
   Query OK, 2 rows affected, 2 warnings (1.76 sec)
   Records: 2  Duplicates: 0  Warnings: 2

   mysql> select * from t6;
   +------+
   | id   |
   +------+
   | -128 |
   |  127 |
   +------+
   2 rows in set (0.00 sec)
   
   # 得出结论:tinyint默认就会空出一位存储正负号
   """其实所有的int类型默认都是空出一位存储正负号"""
   
   #修改默认的范围
   unsigned把默认的(-128〜127)修改至(0 〜255)
   
   create table t7(id tinyint unsigned);
   insert into t7 values(256),(-129);
   
   
# MySQL小数类型


MySQL 中使用浮点数和定点数来表示小数。
"""
浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。
浮点类型和定点类型都可以用(M, D)来表示,其中M称为精度,表示总共的位数;D称为标度,表示小数的位数。

浮点数类型的取值范围为 M(1~255)和 D(1~30,且不能大于 M-2),分别表示显示宽度和小数位数。M 和 D 在 FLOAT 和DOUBLE 中是可选的,FLOAT 和 DOUBLE 类型将被保存为硬件所支持的最大精度。DECIMAL 的默认 D 值为 0、M 值为 10。

下表中列出了 MySQL 中的小数类型和存储需求。
类型名称 说明 存储需求
FLOAT 单精度浮点数 4 个字节
DOUBLE 双精度浮点数 8 个字节
DECIMAL (M, D) 压缩的“严格”定点数 M+2 个字节

DECIMAL 类型不同于 FLOAT 和 DOUBLE。DOUBLE 实际上是以字符串的形式存放的,DECIMAL 可能的最大取值范围与 DOUBLE 相同,但是有效的取值范围由 M 和 D 决定。如果改变 M 而固定 D,则取值范围将随 M 的变大而变大。

从上表中可以看到,DECIMAL 的存储空间并不是固定的,而由精度值 M 决定,占用 M+2 个字节。

FLOAT 类型的取值范围如下:
● 有符号的取值范围:-3.402823466E+38~-1.175494351E-38。
● 无符号的取值范围:0 和 -1.175494351E-38~-3.402823466E+38。

DOUBLE 类型的取值范围如下:
● 有符号的取值范围:-1.7976931348623157E+308~-2.2250738585072014E-308。
● 无符号的取值范围:0 和 -2.2250738585072014E-308~-1.7976931348623157E+308。
"""

float(255,30)
总共255位小数位占30位
double(255,30)
总共255位小数位占30位
decimal(65,30)
总共65位小数占30位

create table t8(id float(255,30));
       
'''三者精确度不同
decimal > double > float
具体使用结合实际情况
'''

# 字符类型
char(4)  # 定长
  最多存储四个字符 超出了则报错 没超出则用空格填充
   varchar(4)  # 变长
  最多存储四个字符 超出了则报错 没超出有几个存几个
   create table t11(id int,name char(4));
   create table t12(id int,name varchar(4));
   insert into t11 values(1,'jason');
   insert into t12 values(1,'jason');

SQL_MODE

1.模糊查询
show variables like '%mode%';
2.修改配置文件
set session sql_mode = 'strict_trans_tables'
   set global sql_mode = 'strict_trans_tables' # 全局修改

研究数字在数字类型与字符类型中的区别

# 验证数字在数字类型中是否是用来限制存储长度
create table t13(id int(3));
   insert into t13 values(111111);

'''数字在数字类型中并不是用来限制存储长度 而是用来控制展示长度'''
create table t14(id int(8) unsigned zerofill);
   insert into t14 values(1111);
   insert into t14 values(111111111);
结论:以后遇到数字类型不要指定数字 让他使用自带的即可
   create table t15(id int);

char与varchar差异

# 1.验证char定长特性
create table t16(id int,name char(5));
   insert into t16 values(1,'tom');
   create table t17(id int,name varchar(5));
   insert into t17 values(1,'tom');

1.统计某个字段数据对应的长度
char_length()
2.上述方法还是无法验证 需要先取消底层优化操作
set global sql_mode='strict_trans_tables,pad_char_to_full_length'
 
# 2.到底哪个好
char
  优势:整存整取 速度快
    劣势:浪费存储空间
   varchar
  优势:节省存储空间
  劣势:存取数据的时候都需要先考虑报头 速度较于char慢
   char(6)  varchar(6)
   1bytes+jason1bytes+tony1bytes+jack1bytes+kevin

 

 

 

 

 

 

 

 

 

 

posted @ 2021-11-20 14:57  一叶松  阅读(69)  评论(0编辑  收藏  举报