mysql基本操作
SQL的基本规则
1)SQL 语句要以分号(;)或\G结尾
在 RDBMS (关系型数据库)当中,SQL 语句是逐条执行的,一条 SQL 语句代表着数据库的一个操作。我们通常在句子的句尾加注标点表示这句话结束,中文句子以句号。结尾,英文以点号.结尾,而 SQL 语句则使用英文分号;结尾。
2)SQL 语句不区分大小写
SQL 不区分关键字的大小写。例如,不管写成 SELECT 还是 select,解释都是一样的。表名和列名也是如此。
提示:关键字是数据库事先定义的,有特别意义的单词。
虽然可以根据个人喜好选择大写还是小写(或大小写混杂),但为了理解起来更加容易。
● 关键字大写
● 数据库名、表名和列名等小写
需要注意的是,插入到表中的数据是区分大小写的。例如,向数据库中插入单词 Computer、COMPUTER 或 computer,这三个是不一样的数据。
基本sql语句之库操作
# 增
create database db;
create database db chasret="gbk";
# 查
show databases;
show create database db;
# 改
alter database db chasret="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 中的小数类型和存储需求。
类型名称 说明 存储需求