MySQL学习笔记(1)之数据库的增删改查、存储引擎、数据类型、约束条件
进入数据库:
mysql -h localhost -u root -p
1.数据库的增删改查
1)创建数据库(在配置mysql的配置文件中文件中默认是utf-8):
create database db1;
2)使用数据库:
use db1
3)显示数据库中的表:
show databases;(全部数据库)
show create database db1;(单个数据库)
4)修改数据库:
alter database db1 charset='gbk';
5)删除数据库(慎用)
drop database db1;
2.表的增删改查
1)创建表:
create table t1(id int,name char(6)); create table t2( ######## 完整的语句 字段名1 类型(宽度)约束条件, ######## 只有整型(int)里面的数字不是表示限制 字段名2 类型(宽度)约束条件, ######## 位数而是显示长度,不都位数用0补充 字段名3 类型(宽度)约束条件 ) ### #注意 1在同一张表中字段名不能重复 2宽度和约束条件是可选的字段名和字段类型是必须的3最后一个字段后面不能加逗号I 3宽度一般情况下是对存储数据的限制#约束条件可以有多个是额外的限制
2)查看表:
show tables;(全部表)
show create table t1;(单张表)
describe t1;(或 desc t1 查看表的信息)
3)修改表的属性:
alter table t1 modify name char(16);
4)删除表:
drop table t1;
5)数据的删改查
#1.插入数据 insert t1 values(1,'jack'),(2,'tom'),(3,'alex'),(4,'wxd'); insert t1(name,id) values('vava',5); #2.查看数据 select * from t1;#(数据量特别大的时候不建议使用) select name from t1; #3.修改数据 update t1 set name='DSB' where id < 1; #4.删除数据 delete from t1 where id < 1;#(有条件) delete from t1;#(所有的数据)
#如何查看严格模式 show variables like "%mode"; ''' 模糊匹配/查询 关键字1ike%:匹配任意多个字符 _:匹配任意单个字符 #修改严格模式 ''' set session ###只在当前窗口有效 set globa1 ###全局有效 set global sql_mode = 'STRICT_TRANS_TABLES';
3.存储引擎
''' 针对不同的数据应该有不同的处理机制 查看MySQL所有的存储引擎: show engines; Innodb MySQL5.5版本之后的默认存储引擎 支持事务 行锁 外键 。数据更加安全 创建表会生成两个文件: 表结构文件 表数据文件 MyIsam MySQL5.5版本之前的默认存储引擎 数据安全上没有Innodb可靠,但是查询速度更快 创建表会生成两个文件: 表结构文件 表数据文件 表索引文件 memory 内存引擎,不会存到硬盘上 临时数据存储,重启就没了 创建表会生成一个文件: 表结构文件 blackhole 黑洞,存啥都没 创建表会生成一个文件: 表结构文件 '''
#如何查看严格模式
show variables like "%mode"; ''' 模糊匹配/查询 关键字1ike%:匹配任意多个字符 _:匹配任意单个字符 #修改严格模式 ''' set session ###只在当前窗口有效 set globa1 ###全局有效 set global sql_mode = 'STRICT_TRANS_TABLES';
4.数据类型
1)浮点型:float(身高)、double(体重)、decimal(薪资)
## 存数限制 float(255,30) # 总共255位,小数占30位 ## 精确度低 double(255,30) # 总共255位,小数占30位 ## 精确度较高 decimal(65,30) # 总共65位,小数占30位 ## 精确度非常高
2)字符类型
''' char 定长 :char(4) 数据超过四个字符直接报错,不够补全 varchar(节省空间,慢,但也很快了) 变长: varchar(4) 数据超过四个字符直接报错,不够有几个存几个 存的时候需要制作报头,去的时候先读取报头,之后才能读取真实数据 char硬盘上存的绝对是真正的数据带有空格的 但是在显示的时候MySQL会自动将多余的空格剔除 不自动处理操作: set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH'; ''' select char_lenth(name) from t1;
3)时间类型
date:年月日 2050-1-1
datetime:年月日分秒 2050-1-1 11:11:11
time:时分秒 11:11:11
year: 2050
create table student( id int, name varchar(16), born_year year, birth date, study_time time, reg_time datetime ); insert into student valies(1,'tom','1980','1980-11-11-11','11:11:11','2020-11-11 11:11:11');
4)枚举与集合类型
''' 枚举(enum) 多选一 集合(set) 多选多 ''' create table user( id int, name varchar(16), gender enum('male','femal','others) default 'male' ); insert user values(1,'tom','male'); insert user value(2,'jack','xxx'); ### 枚举存数据的时候只能从枚举里面选择一个存储 #### create table teacher( id int, name varchar(16), gender enum('male','femal','others'), hobby set('read','sport') ); insert teacher values(1,'tom','male','read'); insert teacher value(2,'jack','femal','read,sport'); insert teacher value(2,'vava','femal','read,sport,睡觉'); # 集合可以写一个,但是不能写没有列举的
5.约束条件
1)default默认值
create table user( id int, name varchar(16), gender enum('male','femal','others') default 'male' # 默认为male );
2)
#单列唯一 create table user( id int not null unique, # id列非空且唯一 name varchar(16), gender enum('male','femal','others') ); # 联合唯一(如ip和port单独一列可以重复,但一起不能重复) create table t1( id int, ip char(16), port int, unique(ip,port) );
3)primary key主键 与auto_increment自增
'''单单从约束效果上来看primary key等价于not nu11 + unique 非空且唯一!!! 2.它除了有约束效果之外它还是Innodb存储引擎组织数据的依据Innodb存储引擎在创建表的时候 必须要有primary key因为它类似于书的目录能够帮助提示查询效率并且也是建表的依据 特例: #1一张表中有且只有一个主键如果你没有设置主键那么会从上往下搜索直到遇到一个非空且唯一的字段 将它自动升级为主键 # 2如果表中没有主键也没有其他任何的非空且唯一字段那么Innodb会采用自己内部提供的一个隐藏字段 作为主键,隐藏意味着你无法使用到它,就无法提升查询速度 ''' ### 以后创建表的时候id字段一定加上primary key, ###一般只给主键加auto_increment(删除数据后id不会重置),使用truncate t1 清空数据并且重置主键 create tale t1( id int primary key auto_increment #单个主键 ); create table t1( ip char(16), port int, primary key(ip,port) # 联合主键(多个字段联合起来作为表的主键 本质还是一个主键) ); insert t1 values(null); #报错 insert t1 values(1),(1); #报错 insert t1 values(1),(1);