关于库的操作
进行数据库的备份和还原:
备份
Mysql -uroot -proot --database 数据库名 > G:\ \ 文件名.sql;
还原
Mysql -uroot -proot < G:\ \文件名.sql;
创建库:
create database 数据库名 default charset utf8 collate utf8_general_ci; (default 后面定义的是数据库的字符集).
删除库:
drop database 数据库名;
查所有的数据库
show databases;
切换数据库
use 数据库名;
关于表的操作
创建表
create table 表名(
id int(11),
name varchar(40)
)
char和varchar在数据库中的区别:
char(40)在存储的时候,占用的空间不到40的时候,后面用空格替代, varchar(40) 占用不到40的空间的时候,就按占用的空间算.
删除表:
drop table 表名;
查看数据库中的表
show tables;
查看表结构
desc 表名称;
添加表字段:
alter table 表名 add column 字段名 int(11) not null (在字段名后面可以跟字段的的类型和字段约束)
删除表字段
alter table 表名 drop column 字段名;
修改表名:
alter table 表名 rename 修改后的表名;
面试中高危考点:索引
索引的原理:索引就像一本字典加入了目录,加快了查询的速度。
索引的优点:
1。大大加快速度检索的速度。
2.创建唯一性索引,保证数据库中每一行数据的唯一性。
3.加速表和表之间的连接。
4.在使用分组或者排序字句进行数据检索的时候,能够明显查询的时间。
什么时候使用索引:频繁调用where字句的时候
索引的缺点:
1.索引需要占用物理空间
2.当对表中数据进行增加、删除和修改的时候,索引也要动态维护,降低了数据的维护速度。
添加单列索引:
alter table 表名 add index 索引名(关联的字段名)
添加唯一索引
alter table 表名 add unique 索引名 (关联字段名);
添加主键:
alter table 表名 add primary key 索引名 (索引的字段名);
添加联合索引
alter table 表名 add index 索引名 (索引的字段名1,字段2);
删除索引:
alter table 表名 drop index 索引名;
添加外键约束
alter table 表名 add foreign key 外键名
创建一个表复制该表的结构和约束,不复制数据
create table 表名 like 复制的表名
创建一个表复制表的结构和数据,不复制约束
create table 表名 as select * from 复制的表名
添加外键
alter table 表名 add foreign key 外键名(外键字段) references 关联表(主键);
删除外键
我用的是MySQL 5.5 ,根据外键名无法直接删除外键
解决步骤
1.输入 show create table 表名 (查看表的具体属性)
2.查看外键之前的外键约束名
3.根据约束名删除外键 alter table 表名 drop foreign key 外键约束名
修改表字段的名字(注意存储类型,不要改变之后,类型不兼容)
alter table 表名 change column 字段名 新字段名 字符类型
修改字段类型
alter table 表名 modify column 字段名 修改后字段类型
修改字段约束
alter table 表名 alter column 字段名 set default 默认值 ;
删除字段约束
alter table 表名 alter column 字段名 drop default;
启动约束
alter table 表名 enable keys;
禁用约束
alter table 表名 disable keys;
插入语句
Insert :向表中写入数据 Insert into <表名>(<列名>,<列名>……<列名>) values(<值>……)
多段插入
insert into 表名(<列名>,<列名>……<列名>) values(<值>……),(<值>……).......
Select 查询语句
作用 获取表中的数据
基本语法
Select <字段列表/表达式列表> [from 表名] [where <条件>] [group by <字段列表>] [having <条件>] [order by <字段> asc/desc][limit <行数>]
goup by 字段名:表示结果按照字段分行
having:1. 能够使用统计函数,但是where不能使用 例如having count(*) >5
2. having子句中可以使用字段别名,而where不能使用
3. where是判断数据从磁盘读入内存的时候 ,having是判断分组统计之前的所有条件
order by 字段名 desc/asc 表示按字段 desc 降序 asc 升序
limit 表示显示的行数
select 语句中的关于连接查询的语句 参考网站 :https://www.cnblogs.com/cs071122/p/6753681.html (区别)
具体讲解 :https://blog.csdn.net/plg17/article/details/78758593
内连接 (无论怎们样对应的东西会会显示出来,没有对应的东西就不会显示了)
select 查询的字段 from 表A 表的变量名 inner join 表B 表变量名 on A.id=B.id;
左连接(以左边的位参考,右边的少的加null,多的不要)
select 查询的字段 from 表A 表变量 left join 表B 表变量 on A.id=B.id;
右连接(以右边的为参考,左边少的加null,多的不要)
select 查询的字段 from 表A 表变量 right join 表B 表变量 on A.id=B.id;
全外连接:
全外连接 完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 注:MYSQL中没有全外连接的语法,要实现全外连接的效果需要使用左外连接和右外连接一起实现
Select * from tb01 left join tb02 on tb01.f1=tb02.f1 union select * from tb01 right join tb02 on tb01.f1=tb02.f1
小练习(数据库三表查询)
有三个表 a b c
c.aid对应a.aid
c.bid对应b.bid
现在要查出a.aname,b.bname,c.value怎么写sql语句?
select a.aname,b.bname,c.value
from c
inner join a
on c.aid=a.aid
inner join b
on c.bid=b.bid
模糊查询(主要作用是针对一个特定条件的查询,例如查询姓王的人,这是笔试数据库中常用到的部分)
下面介绍mysql中模糊查询的四种用法:
1 .%:
表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'
若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2 ._:
表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE '三__'; 只找出“三脚猫”这样name为三个字且第一个字是“三”的;
使用 like '%王_%'能查出所有王姓的人,无论它是几个字的名字
使用 SELECT * FROM [user] WHERE u_name LIKE '%三__%';
无论是三脚猫,还是三娃,只要一开始的字是三的都可以被使用.
.
修改语句
update 表名 set 字段=值 where 字段=值(条件)
删除语句
delete from 表名 where 字段=值(后面跟条件)