mysql小结
时间:2021-07-01 10:21:17
帮助过:5人阅读
1、搜索引擎
1.InnoDB:支持事务、行级锁、外键,保持事务的完整性,在修改数据的效率比较快
MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。
InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。
2.MyISAM:表级锁,查询速度快,但是插入和修改效率慢
MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。
3.Memory:数据都存在内存中,处理数据的速度快,但是对内存要求高,重启服务和断电消失
在内存中存储所有数据,应用于对非关键数据由快速查找的场景。Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失,
长用于数据量小的数据库,并对服务器的内存有要求,一般应用于每个用户的登录状态。
4.BLACKHOLE:放进去的所有数据都不会存储,但有一个日志记录着插入的数据,利用日志分流数据
黑洞存储引擎,类似于 Unix 的 /dev
/null,Archive 只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。这种表可以应用于 DML 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。
2、相关sql语句
1.查看当前的默认存储引擎:
mysql> show variables
like "default_storage_engine";
2.查询当前数据库支持的存储引擎
mysql> show engines \G;
8、指定存储引擎建表
1.在建表时指定
mysql> create table t1(id
int,name
varchar(
20)) ENGINE
=MyISAM;
mysql> create table country(id
int,cname
varchar(
50)) ENGINE
=InnoDB;
2.也可以使用alter table语句,修改一个已经存在的表的存储引擎。
mysql> alter table country engine
= MyISAM;
9、在配置文件中指定
#my.ini文件
[mysqld]
default-storage
-engine
=INNODB
三、各种定义语言的区别
DDL语句数据库定义语言:操作的是数据库、表的结构、视图、索引、存储过程
1、
create:创建
create database 数据库名 charset utf8;
// 创建数据库
create table 表名(id
int,name
char);
// (列名1 数据类型,列名2,数据类型...) 这个是创建表和表头,还没有内容的
2、
alter:跟新
alter database 数据库名 charset latin1(要修改的内容);
// 修改数据库
ALTER表的操作
1. 修改表名
ALTER TABLE 表名 RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型
[完整性约束条件…];
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段:modify 修改数据类型和约束,change修改字段名并重新定义数据类型和约束
ALTER TABLE 表名 MODIFY 字段名 数据类型
[完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型
[完整性约束条件…];
5.修改字段排列顺序
/在增加的时候指定字段位置
ALTER TABLE 表名
ADD 字段名 数据类型
[完整性约束条件…] FIRST; # 放在首位
ALTER TABLE 表名
ADD 字段名 数据类型
[完整性约束条件…] AFTER 字段名; # 在某个字段后
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型
[完整性约束条件…] FIRST;
ALTER TABLE 表名 MODIFY 字段名 数据类型
[完整性约束条件…] AFTER 字段名;
6.增加
/删除约束
ALTER TABLE 表名
ADD PRIMARY KEY (字段);
ALTER TABLE 表名
ADD UNIQUE (字段);
ALTER TABLE 表名
DROP PRIMARY KEY;
3、
drop:删除
drop database 数据库名;
// 删除数据库
drop table 表名;
// 删除表
4、show
/desc:查询
show databases; // 查询所有的数据库
show tables; // 查询所有表
desc 表名;
// 查看表的结构
describe 表名; //查看表的结构
show create table 表名 \G; 查看当前表更详细的信息
DML语句数据库操纵语言: 操作的是表的具体的记录
1、
insert:插入数据
1. 插入完整数据(顺序插入)
语法一:
INSERT INTO 表名(字段1,字段2,字段3…字段n)
VALUES(值1,值2,值3…值n);
语法二:
INSERT INTO 表名
VALUES (值1,值2,值3…值n);
2. 指定字段插入数据
语法:
INSERT INTO 表名(字段1,字段2,字段3…)
VALUES (值1,值2,值3…);
3. 插入多条记录
语法:
INSERT INTO 表名
VALUES (值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);
4. 插入查询结果
语法:
INSERT INTO 表名(字段1,字段2,字段3…字段n)
SELECT (字段1,字段2,字段3…字段n)
FROM 表2
WHERE …;
2、
update:跟新数据
语法:
UPDATE 表名
SET 字段1
=值1,字段2
=值2,
WHERE CONDITION;
示例:
UPDATE mysql.
user SET password
=password(‘
123’)
where user=’root’
and host
=’localhost’;
注:mysql库的user表存储的是用户的信息
3、
delete:删除数据
语法:
DELETE FROM 表名
WHERE CONITION;
示例:
DELETE FROM mysql.
user WHERE password
=’’;
4、
select:查询数据
查看所有列的数据
select * from staff_info;
查看指定列的数据
select name,age
from staff_info;
4-1单表查询语法
SELECT [DISTINCT] 字段1,字段2...
FROM 表名
WHERE 条件
GROUP BY 字段
HAVING 筛选
ORDER BY 字段
[ASC/DESC]
LIMIT 限制条数
1、关键字执行的优先级
1.找到表:
from
2.拿着where指定的约束条件,去表中取出一条条记录
3.将取出的一条条记录进行分组group
by,如果没有group
by,则整体作为一组
4.将分组的结果进行having过滤
5.执行select
6.distinct去重
7.将结果按条件排序:
order by
8.限制结果的显示条数
DCL语句数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
1、权限::
usage 无权限
all 全部权限
select 查
create 增
drop 删
2、授权具体语句:
grant 权限
on 库.表
to 用户
mysql> grant all on *.
* to ‘ming‘@
‘%‘; # all表示授予所有权限,第一个
*代表所有库,第二个
*代表所有表,
‘ming‘@
‘%‘代表用户和客户端主机,
%代表任意主机
mysql> grant select on db1.
* to ‘ming‘@
‘localhost‘; # select代表只给查的功能,db1.
* 代表库db1的所有表,localhost代表本地主机
# 给未存在的用户授权,会创建再授权
mysql> grant all on *.
* to ‘dong‘@
‘%‘ identified
by ‘123456‘ # 创建账号并授权
# 刷新权限
mysql> flush
privileges; # 刷新使授权立即生效
# 查看用户权限
show grants for ‘ming‘@
‘%‘;
3、回收权限:
revoke 权限
on 库.表
from 用户
mysql> revoke select on *.
* from ‘ming‘@
‘%‘;
其他SQL语句:
1、 启动server端
- 可以在service服务中操作,也可以打开cmd窗口
> net start mysql
2、停止服务
- 可以在service服务中操作,也可以打开cmd窗口
> net stop mysql
3、登录用户
> mysql
-u root
-p # mysql5.6默认是没有密码的,遇到password直接按回车键
4、查看所有的库
mysql> show databases;
5、查看当前用户
mysql> select user();
6、查看当前使用的数据库
mysql> select database();
7、退出当前用户
mysql> exit # 也可以用\q或者quit退出
8、给当前用户设置密码
mysql> set password
= password(
‘newpassword‘);
9、给其他用户设置密码
mysql> set password
for ‘username‘@
‘host‘ = password(
‘newpassword‘)
10、在输入sql语句的过程中 如果想要放弃本条语句
mysql> \c
11、创建账号
# %表示这个网段内所有ip都可以连接,identified
by ‘123‘表示给这个用户设置密码123
mysql> create user ‘ming‘@
‘192.168.16.%‘ identified
by ‘123‘;
mysql> create user ‘ming‘@
‘192.168.16.5‘ # 表示某机器可以连接
mysql> create user ‘ming‘@
‘%‘ # 表示所有机器都可以连接
12、远程登陆
mysql> mysql
-u ming
-p123
-h
192.168.
16.31 # u是user p是password h是localhost的ip地址
13、使用某个数据库(切换到文件夹)
use 数据库名;
14、交叉连接:不适用任何匹配条件。生成笛卡尔积
mysql> select * from employee,department;
15、内连接:只连接匹配的行
说明:
找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来
mysql> select employee.id,employee.name,employee.age,employee.sex,department.name
from employee
inner join department
on employee.dep_id
=department.id;
16、外链接之左连接:优先显示左表全部记录
说明:
以左表为准,即找出所有员工信息,包括没有部门的员工
本质就是:在内连接的基础上增加左表有而右表没有的结果
mysql> select employee.id,employee.name,department.name
as depart_name
from employee
left join department
on employee.dep_id
=department.id;
17、外链接之右连接:优先显示右表全部记录
说明:
以右表为准,即找出所有部门信息,包括没有员工的部门
本质就是:在内连接的基础上增加右表有而左表没有的结果
mysql> select employee.id,employee.name,department.name
as depart_name
from employee
right join department
on employee.dep_id
=department.id;
18、全外连接:显示左右两个表全部记录
说明:
在内连接的基础上增加左表有右表没有的和右表有左表没有的结果
注意:mysql不支持全外连接 FULL JOIN
但是:mysql可以使用UNION这种方式间接实现全外连接,需要注意的是union与union all的区别:union会去掉相同的纪录
select * from employee
left join department
on employee.dep_id
=department.id
union
select * from employee
right join department
on employee.dep_id
=department.id;
mysql小结
标签:red taf 主服务器 企业 没有 客户 int 设置密码 文件