MySQL 基本语法
基本sql语句
对数据的增删改查
sql书写错误,只要没加分号,可以加\c使前面的sql语句失效
-
针对文件夹的(库)
# 增 create database db1 charset utf8; # 改 alter database db1 charset gbk; # 查 show databases; show create database db1; # 删 drop database db1;
-
针对文件的(表)
文件首先需要在文件夹下面,所以在操作文件之前,应该先确定操作的是哪个文件夹下面的文件
# 切换文件夹 user db1; select database(); # 查看当前所在的库 # 增 create table t1(id int,name char); # 创建出来的可能是多个文件,解耦管理 # 改 alter table t1 modify name char(16); # 查 show tables; show create table t1; # 查看表的详细信息 describe t1; == desc t1; # 查看表结构 # 删 drop table t1;
-
针对(记录)
# 增 insert into db1.t1 values (1,'egon'),(2,'kevin'),(3,'jason'); # into可加可不加,db1可以不指定,默认就是在当前库下 # 改 update db1.t1 set name='DSB' where id > 1; update db1.t1 set name='DSB' where id = 2 or id = 3; # 查 select id,name from db1.t1; # db1可不指定,默认当前库下 select * from t1; # 删 delete from db1.t1 where id >3; delete from db1.t1 where name='egon' # 这里注意如果少了一个引号,后面无论敲什么都没有用了需要将引号补全
库相关操作参考egon博客即可
表操作
存储引擎
文件格式有很多种,对应的软件也有很多种txt,pdf等
针对不同类型的文件,需要对应有不同的软件帮助我们去操作
# 查看所有的存储引擎 show engines; # 查看不同存储引擎存储表结构文件特点 create table t1(id int)engine=innodb; create table t2(id int)engine=myisam; create table t3(id int)engine=blackhole; create table t4(id int)engine=memory; insert into t1 values(1); insert into t2 values(1); insert into t3 values(1); insert into t4 values(1);
创建表的完整语法:
#语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
# 在创建表的时候有三点你需要注意的地方
1.在一张表内字段名不能重复
2.字段和类型是必须要有的,而宽度和约束条件是可选的
3.最后一个字段后面不能加逗号!!!
# 宽度:对存储数据的限制
create database day38;
use day38;
create table t1(name char);
insert into t1 values('jason');
# 1.能够成功但是显示的时候只显示一位
# 2.第二种情况,直接报错
select * from t1;
# 约束条件
create table t2(name char(16) not null);
# 字段类型与约束条件之间的关系
字段类型限制的是存储数据的类型
约束条件是基于字段类型之上的附加的额外限制
整型
分类:TINYINT SMALLINT MEDIUMINT INT BIGINT
作用:年龄,等级等信息
TINYINT 默认有正负号
create table t3(id tinyint);
create table t4(id tinyint unsigned);
int类型
create table t5(id int);
alter table t5 modify id int unsigned;
# 给整型设置宽度 特例:唯独整型字段在设置宽度的时候,限制不是存储宽度而是显示宽度
create table t6(id int(8)); # 如果存入的数字够8位 正常显示,如果不够8位默认用空格填充
create table t7(id int(8) zerofill);
特例:唯独整型字段在设置宽度的时候,限制不是存储宽度而是显示宽度
在创建整型字段的时候,不需要指定字段宽度(整型的显示宽度)
mode
like模糊查询
%:匹配任意数量的任意字符
_:匹配单个数量的任意字符
show variables like "%mode%";
# 设置严格模式
set session:当前窗口下有效
set global:全局有效,终生受用!
set global sql_mode = "STRICT_TRANS_TABLES";
# 设置完成后需要退出客户端,重新登录客户端即可,不需要重启服务端
浮点型
分类:
float
double
decimal
作用:薪资,体重,身高
浮点类型(5,3) # 总长度为5位其中小数位占3位整数位两位
float(255,30)
double(255,30)
decimal(65,30)
三者区别:
精度不同:
精度由低到高
float
double
decimal
create table t10(id float(255,30));
create table t11(id double(255,30));
create table t12(id decimal(65,30));
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);
insert into t12 values(1.111111111111111111111111111111);
字符类型
char:定长
varchar:变长
create table t13(name char(4)); # name字段固定存储四个长度,如果超了直接报错,如果不够默认用空格填充
create table t14(name varchar(4)); # name字段如果超了直接报错,如果不够按实际长度存储
insert into t13 values('a'); 'a '
insert into t14 values('a'); 'a'
char_length(name) # 统计字段值所对应的长度
select char_length(name) from t13;
select char_length(name) from t14;
# 这个是修改操作
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
char VS varchar char(4) 定长 优点:存取速度都快,简单粗暴 缺点:浪费空间 egonjxx lxx ow
varchar(4) 变 给varchar类型的数据自动加上报头用来标识数据的长度 报头通常占1~2bytes 缺点:存取速度都慢 优点:节省空间 1bytes+egon1bytes+jxx1bytes+lxx1bytes+oow
日期类型 date 年月日 time 时分秒 datetime 年月日时分秒 year 年
create table t15( id int, birth date, class_time time, reg_time datetime, yy year ); insert into t15 values(1,"2000-01-21","11:11:11","2019-01-21 11:11:11","2019");
枚举与集合 枚举(enum):多选一
create table t16( id int, name char(6), gender enum('male','female','others') ); insert into t16 values(1,'egon','xxx');
集合(set):多选多 虽然是多选多但是你可以只选一个
create table t17( id int, name char(6), gender enum('male','female','others'), hobby set('read','DJ','DBJ','run') ); insert into t17 values(1,'tank','male',"read,DBJ,DJ"); insert into t17 values(1,'tank','male',"DBJ");
约束条件 """ PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值
UNSIGNED 无符号 ZEROFILL 使用0填充 """
not null:限制字段不能为空
create table t20(id int,name char(4) not null);
default:设置字段默认值
create table t21( id int, name char(4), gender enum('male','female','others') default 'male' ); insert into t21 values(1,'egon'); # 报错 insert into t21(id,name) values(1,'egon');
通常情况下not null和default是配合使用的
unique 某个字段对于的值在当前表中是唯一的
单列唯一
create table t22( id int unique, # 单个字段 name char(16) ); insert into t22 values(1,'egon'),(1,'tank');
服务器ip和port
联合唯一
create table t23( host char(16), port int, unique(host,port) # 多个字段 ); insert into t23 values('127.0.0.1',8080),('127.0.0.1',8081); insert into t23 values('127.0.0.1',8080),('127.1.1.1',8080); insert into t23 values('127.0.0.1',8080),('127.0.0.1',8080);
primary key 主键 单从限制条件上来说,它就相当于not null + unique非空且唯一 create table t26( id int primary key, name char(16) )engine=innodb;
innodb引擎中,所有的表都必须有且只有一个主键,它是innodb引擎用来组织数据的依据
强调(**): 1.一张表中必须有且只有一个主键,如果你没有设置主键, 那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键
create table t25(
id int,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t25;
2.如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键, 隐藏意味着你在查询的时候无法根据这个主键字段加速查询了 索引:类似于书的目录,没有主键就相当于一页一页翻着查
3.一张表中通常都应该有一个id字段,并且通常将改id字段作成主键
auto_increment:自增
create table t27( id int primary key auto_increment, name char(16) );
联合主键
create table t28( ip char(16), port int, primary key(ip,port) ); desc t28;

浙公网安备 33010602011771号