【Mysql】基本命令(一)
数据库:
show databases; #显示数据库
create database 数据库; #创建数据库
创建数据库时的编码制定:
DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
DEFAULT CHARACTER SET gbk COLLATE gbk_general_ci;
use 数据库名; #使用数据库
drop 数据库名; #删除数据库
数据表:
show tables; #显示表
desc 表名; #显示表的基本结构
drop table 表名 #直接删除表
delete from 表名 #清空表,自增会保留
truncate table 表名 #清空表,速度快,自增回到原点
select * from 表名; #查看表
创建表:
create table 表名(
字段名 类型 是否可以为空 默认值,
);
#创建表名 not null不可为空 null可以为空 defalut 默认值
ENGINE=InnoDB DEFAULT CHARSET=utf8
InnoDB引擎支持事务
事务 原子操作 回滚
两件事情同时操作就是一件事务 这个操作就叫做原子操作 任意一件事情失败则回滚
自增列(数字,必须是索引-主键)
主键索引:
一张表只能有一个主键,可以有多列,唯一不能重复,不能为null 一般情况下,自增列设置主键
id:1,2,3,4,5,6
唯一索引:
可以为null,一张表可以有多个唯一列
id:1,2,3,4,5,6,null
--约束
索引,加速查找
create table xxx(nid int primary key,)
一个主键多列:
create table xxx(nid int,name varchar(20)
name varchar(20), age int,
primary key (name, num)
);
一般用法
nid int auto_incrementprimary key
外键foreign key,一对多
两张表建立约束
如例:公司数据库中 部门字段:人事部,销售部,IT部等等
可以建立另外一张表,专门用来给部门建立一个索引 如:1=人事部,2=销售部
将两张表建立约束
create table b(nid int auto_increment primary key, department_name varchar(30))
create table a(nid int auto_increment primary key, name varchar(20),department int)
添加外键:alter table 从表 add constraint 外键名称 foreign key 从表(外键字段) references 主表(主键字段);
alter table a add constraint fk_a_b foreign key a(department) references b(nid);
删除外键:alter table 表名 drop foreign key 外键名称
alter table a drop foreign key fk_a_b
还可以建立表时直接建立外键:
create table b(nid int auto_increment primary key, department_name varchar(30))
create table a(nid int auto_increment primary key, name varchar(20),department int,
constraint fk_a_b foreign key(department) references b(nid))
修改表:
添加字段:alter table 表名 add 字段名 类型
删除字段:alter table 表名 drop column 字段
修改字段:alter table 表名 modify column 字段 类型 -# 类型
alter table 表名 change 原字段 新字段 类型 -# 字段,类型
添加主键:alter table 表名 add primary key(列名)
删除主键:alter table 表名 drop primary key
alter table 表名 modify 列名 int, drop primary key
添加外键:alter table 从表 add constraint 外键名称 foreign key 从表(外键字段) references 主表(主键字段);
删除外键:alter table 表名 drop foreign key 外键名称
添加默认值:alter table 表名 alter 列名 set default 数值
取消默认值:alter table 表名 alter 列明 drop default
基本命令:
增:
insert into tabl(name,age) values('',10),('',12) #可以像这样插入多行数据
insert into tab1(name,age) select(name,age) from tab2 #将表2中的name age字段插入到了表1中的name age字段 这样插入如果遇到可以转换的类型则转换插入,如果不能则报错
insert into tab1(name,age) select(name,age) from tab2 where nid<3 #添加一个条件
删:
delete from tab1 where nid>3 and age<13
改:
update tab1 set age=1
update tab1 set age=1,name='xxxx' where nid>3
查:
select * from tab1 where nid<3
select name,age,nid from tab1 where nid<3
其他:
条件:
and #并且
between x and y #范围
in(x,x,x,x) #包含
not in(x,x,x) #不包含
通配符:
% 任意多个字符
_ 任意一个字符
分页limit:
select * from tab1 limit 0,10 #从第0行开始取10条
select * from tab1 limit 10 offset 0 #从第0行开始取10条 推荐用这个
排序:
select * from tab1 order by nid asc #从小到大
select * from tab1 order by nid desc #从大到小
select * from tab1 order by nid desc,age desc #遇到相同的则以第二个排序为标准
分组:
group by 字段
聚合函数:对聚合条件筛选必须用 having
max()
min()
sum()
count()
组合:拿两张表的数据
select nid from a union select name from b #会去重
select nid from a union all select name from b #显示所有
链表:
select * from a,b where a.x = b.x #显示ab张表,条件a表x=b表x,意思是将b表x等于a表x的全部数据跟到a表后面 。
select * from a left join b on a.x = b.x
select * from a right join b on a.x = b.x
select * from a inner join b on a.x = b.x #不会显示NULL
导出现有数据库数据:
mysqldump -u 用户名 -p 数据库名称 > 导出文件路径 # 结构+数据
Enter password: # 密码
mysqldump -u 用户名 -p -d 数据库名称 > 导出文件路径 # 结构
Enter password: # 密码
导入现有数据库数据:
mysql -u 用户名 -p 数据库名称 < 文件路径
Enter password: # 密码