MySQL数据库

2020-07-11  本文已影响0人  极速魔法

windows 命令行

net start mysql57 // 关闭
net stop mysql57 // 停止

mysql语句

-- 短划线后面空格+注释内容
/* mysql注释*/
# 注释
use db1 -- 切换数据库
SELECT DATABASE() -- 查看当前数据库
CREATE DATABASE DB1 CHARACTER SET utf8 -- 设置字符集
CREATE TABLE new LIKE old -- 复制表
DESC test  -- 查看表结构
SHOW CREATE TABLE test -- 查看创建表语句

mysql数据类型

修改表

RENAME TABLE old TO new; -- 修改表名

ALTER TABLE test CHARACTER SET uft8 -- 修改表字符集

ALTER TABLE test ADD name VARCHAR(20); -- 向表添加字段

ALTER TABLE test MODIFY name VARCHAR(50); -- 修改表字段name的类型

ALTER TABLE test CHANGE old new CHAR(30); -- 修改表字段old为 new new CHAR(30)  

ALTER TABLE test DROP name; -- 删除表字段 name

插入数据

char,varchar,date 类型数据用单引号或双引号包裹

删除数据

TRUNCATE TABLE test -- 删除表中所有数据,整个表删除,再创建一个一样的新表

查询操作不会对数据表的数据进行修改

条件查询 先取出表中每条数据,满足的就返回,不满足的就过滤。

!= ,<> -- 不等于
BETWEEN a AND b -- [a,b]
IN(a,b,c) -- 包含元素a,b,c

LIKE '%a%' -- % 表示匹配任意多个字符
     _ -- 匹配一个字符
... WHERE name IS NULL -- 查询字段空值
... WHERE name IS NOT NUL -- 查询字段不为空值

排序

-- 组合排序
... ORDER BY id DESC,salary DESC 

聚合

count() 忽略空值

分组

分组返回的是第一条数据

SELECT * FROM emp GROUP BY sex

分组之后过滤 having

SELECT XX,AVG(salary) FROM xx WHERE xx HAVING AVG(salary) > 6000

limit

limit offset,lenght 格式 offset从 0 开始,数据库 id从1 开始

Primary key 唯一,非空约束

ALTER TABLE test ADD PRIMARY KEY(id) -- 添加主键
ALTER TABLE test DROP PRIMARY KEY -- 删除主键

CREATE TABLE xx (   
    ...
)AUTO_INCREMENT=100 -- 自定义自增的起始位置

delete删除对自增没有影响,truncate 自增从1开始

唯一约束对null值不做唯一判断,也就是可以有多条记录为null值

事务

mysql 默认开启自动事务提交

事务特性

外键约束

外键可以是空值,但为空的数据跟与之相关联的表就没有关系了

-- 新加表 外键约束
...
constraint emp_dept_fk FOREIGN KEY(dept_id) references depart(id);

-- 删除外键约束
ALTER TABLE emp DROP FOREIGN KEY emp_dept_fk;

-- 添加外键
ALTER TABLE emp ADD 【constraint emp_dept_fk】 FOREIGN KEY(dept_id) references depart(id);

删除数据,先删除从表中数据,再删主表数据

级联删除

ON DELETE CASCADE
删除主表的同时,关联的从表数据也删除

多表关系

一对多 ,多的一方建立外键,一的一方建立主键

一对一,任意一方设置外键,外键设置为 unique

多表查询给表起别名简化 书写

隐式内连接

, 连接两张表 where 条件

显示内连接

INNER join 连接两张表

查询步骤

外连接

左外接

以左表为基准
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

右外接

以右表为基准
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件

子查询

1.where型,一个字段
2.from型,多个字段,子查询结果作为一张表要起别名
3.exist,单列多行,配合in 使用
select 字段 from 表 where 字段 in (子查询)

索引

-- 创建uniqu索引
create unique index ind on demo1(hobby);
-- 删除索引
alter table demo1 drop index ind;

视图

查询结果形成的一张虚拟的表,当做只读表

删除表,视图不起作用了

create view 视图名[字段] as select 查询语句;

存储过程

一堆sql语句的合并,加入一些逻辑控制

delimiter $$ -- 声明语句的结束符合
create procedure 存储名称() -- 声明存储过程
create procedure 存储名称(in 参数名称 参数类型) -- 声明存储过程带参数
begin
  -- sql语句
end $$

-- 调用存储过程
call 存储名称;

-- 变量赋值
set @变量名 = 值
-- 返回值定义
out 变量名 类型
-- 返回数据
select @out_num;

call(1,2,3,@out_num);

触发器

执行sql语句,自动触发其他sql语句执行

delemeter $
-- 创建触发器
create triger t1
-- 触发的时间,监视的事件,表
after insert on orders
-- 行触发器
for each row
begin
    update goods set num= num -1 xxx;
end $

用户权限

-- 授权
grant 权限 on 数据库.表 to ‘用户名’@‘主机名’;
-- 查看授权
show grants for ‘用户名’@‘主机名’;

数据库备份

mysqldump -uroot -p1234 db2 > 文件路径
命令行导出没有创建数据库语句,手动创建

进入mysql命令行
source 文件路径

上一篇下一篇

猜你喜欢

热点阅读