文档章节

MySQL 基础

华山猛男
 华山猛男
发布于 07/21 00:28
字数 2239
阅读 12
收藏 0

学院视频简单汇总

一、常用命令

    在命令行中,配置好环境变量后,通过cmd可以直接进入mysql命令行模式,同时列举几种常用命令

# 进入mysql数据库,密码可以先不写,打完-p后再输入,防止被别人看到
mysql -u账号 -p密码

-u 用户名
-p 密码
-h 服务器名称
-p 端口号
-D 打开指定数据库
--prompt=name 设置命令提示符
--delimiter=name 指定分隔符
-V,--version 输出版本信息并且退出

exit,quit,\q 退出

# 创建数据库
CREATE {DATABASE|SCHEMAS} [IF NOT EXISTS] db_name DEFAULT CHARACTER SET = 'UTF8|GBK|...';

CREATE DATABASE IF NOT EXISTS myWebSite;

# 修改数据库编码方式
ALTER {DATABSE|SCHEMAS} db_name [DEFAULT] CHARACTER SET [=] charset_name;

ALTER DATABSE myWebSiteDEFAULT CHARACTER SET = utf8;

# 数据库列表
SHOW DATABASE;
SHOW SCHEMAS;

# 查看指定数据库定义
SHOW CREATE {DATABASE|CEHMAS} db_name;

SHOW CREATE DATABASE myWebSite;

# 查看上条数据库警告
SHOW WARNINGS;

# 打开指定数据库和查看当前打开的数据库(如果忘记了)
USE db_name;
SELECT DATABASE()|SCHEMAS();

# 删除指定数据库
DROP {DATABASE|CEHMAS} [IF EXISTS] db_name;

DROP DATABASE IF EXISTS myWebSite;

# 查看数据表结构
DESC db_name;
DESCRIBE db_name;
SHOW COLUMNS FROM db_name;

# UNSIGNED 无符号,移除负数范围,即无法填充负数范围的数值
CREATE TABLE table_name(num1 INT UNSIGNED);

# ZEROFILL 自动补充0,创建数据表时,会根据其位数自动在前面补0,如int,默认十位数范围,填充1数字,会变成0000000001
CREATE TABLE table_name(num1 INT ZEROFILL);

二、配置mysql输出日志到指定位置

    在sql命令行中,输入以下命令即可

\T D:\SQLlog\syslog.txt

三、数据类型(需要注意的)

  • 字符串-枚举类型 ENUM
ENUM(temp1,temp2,temp3)

注意:设置的字符串中含有空格将自动忽略

栗子:CREATE TABLE IF NOT EXISTS test(sex ENUM('男','女','保密'));

测试:INSERT test VALUES('男');

错误:存入的值与枚举中地值不一致时会报错

测试:INSERT test VALUES('男1');

特殊1:存入的值可以为序号,序号值从1开始,即男为1,女为2,保密为3

测试1:INSERT test VALUES(1);

特殊2:如果设置的字段可以为NUll,则也可以键入

测试2:INSERT test VALUES(NULL);
  • 字符串-集合类型 SET
SET(temp1,temp2,temp3)

注意:设置的字符串中含有空格将自动忽略

栗子:CREATE TABLE IF NOT EXISTS test(favour SET('A','B','C','D'));

测试:INSERT test VALUES('A,C,D');INSERT test VALUES('D,B,A');

特殊1:存入的值是以2进制来保存,可以使用2进制来控制值,ABCD分别以1、2、4、8来表示,这里键入3,则表示保存AB,15则表示保存所有

测试1:INSERT test VALUES(3);INSERT test VALUES(15);

四、完整性约束条件

  • PRIMARY KEY 主键,可简写为KEY,复合主键可写为PRIMARY KEY(字段1,字段2)
  • AUTO_INCREMENT 自增长,配合主键使用,可以指定值也可以不指定,特殊指定为NULL或DEFAULT也会增长,创建表结构时设置AUTO_INCREMENT为100则从100开始增长
  • FOREIGN KEY 外键
  • NOT NULL 非空
  • UNIQUE KEY 唯一
  • DEFAULT 默认值,插入为默认值可使用DEFAULT进行设置
CREATE TABLE [IF NOT EXISTS] tbl_name(
字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOT NULL] [DEFAULT 默认值] [[PRIMARY] KEY| UNIQUE [KEY]] [AUTO_INCREMENT]
)

五、数据表操作

  • 列出所有表
SHOW TABLES;
  • 修改表名
规范
ALTER TABLE tbl_name RENAME [TO|AS] new_name;
RENAME TABLE tbl_name TO new_name;

ALTER TABLE tbl_name RENAME TO tbl_name1;
或者
ALTER TABLE tbl_name RENAME AS tbl_name1;
或者
ALTER TABLE tbl_name RENAME tbl_name1;
  • 添加字段
ALTER TABLE tbl_name ADD 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]

--栗子--
ALTER TABLE test ADD card CHAR(18);
ALTER TABLE test ADD card1 VARCHAR(100) NOT NULL UNIQUE;
ALTER TABLE test ADD card2 VARCHAR(18) NOT NULL FIRST;
ALTER TABLE test ADD card3 INT NOT NULL DEFAULT 100 AFTER card;

--选中一次表,完成多个操作--
ALTER TABLE test
ADD card4 INT NOT NULL DEFAULT 123 AFTER card3,
ADD card5 FLOAT(6,2) FIRST,
ADD card6 SET('A','B','C');
  • 删除字段
ALTER TABLE tbl_name DROP 字段名称

--栗子--
ALTER TABLE test DROP card; 

--删除多个--
ALTER TABLE test 
DROP card,
DROP card1; 
  • 修改字段
ALTER TABLE tbl_name MODIFY 字段名称 字段类型 [完整性约束条件] [FIRST|AFTER]

--栗子--
ALTER TABLE test MODIFY card VARCHER(20) NOT NULL DEFAULT '123';

--修改类型并移动字段位置--
ALTER TABLE test MODIFY card VARCHER(20) AFTER card1;
  • 修改字段名称
ALTER TABLE tbl_name CHANGE 旧字段名称 新字段名称 字段类型 [完整性约束条件] [FIRST|AFTER 字段名称]

--栗子--
ALTER TABLE test CHANGE card card1 CHAR(32) NOT NULL DEFAULT '123';
  • 添加默认值
ALTER TABLE tbl_name ALTER 字段名称 SET DEFAULT 默认值
  • 删除默认值
ALTER TABLE tbl_name ALTER 字段名称 DROP DEFAULT
  • 添加主键
ALTER TABLE tbl_name ADD [CONSTRAINT[symbol]] PRIMARY KEY[index_type](字段名称,...)

--栗子--
ALTER TABLE test ADD PRIMARY KEY(id);

--复合主键--
ALTER TABLE test ADD PRIMARY KEY(id,card);

--完整--
ALTER TABLE test ADD CONSTRAINT symbol PRIMARY KEY index_type(id);
  • 删除主键
ALTER TABLE tbl_name DROP PRIMARY KEY

--特殊,删除自增长主键(先取消自增长属性)--
ALTER TABLE test MODIFY id INT UNSIGNED;
ALTER TABLE test DROP PRIMARY KEY;
  • 添加唯一
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [索引名称](字段名称,...)

--栗子--
ALTER TABLE test ADD UNIQUE(card);
ALTER TABLE test ADD CONSTRAINT symbol UNIQUE KEY uni_card(card);

--复合唯一--
ALTER TABLE test ADD CONSTRAINT symbol UNIQUE INDEX nul_uni_card(card1,card2);
  • 删除唯一
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name
  • 修改表的存储引擎
ALTER TABLE tbl_name ENGINE=存储引擎名称
  • 设置自增长的值(确定表中有自增长值)
ALTER TABLE tbl_name AUTO_INCREMENT=值
  • 删除表
DROP TABLE [IF EXISTS] tbl_name[,tbl_name...]
  • 添加数据、更新数据、删除数据(略)
  • 查询数据(特殊,可输出前置固定的列数据)
SELECT 1,2,3,4,5,id,username FROM cms_user;
  • 查询表达式LIKE
  • %,任意字符不限长度
  • _,1个任意字符
栗子:

username中含有1:
SELECT * FROM cms_user WHERE username LIKE '%1%';

username中含有有3个任意字符:
SELECT * FROM cms_user WHERE username LIKE '___';

username中含有第1位为1个任意字符,第2位为字符a,后面位任意字符:
SELECT * FROM cms_user WHERE username LIKE '_a%';
  • 分组查询GROUP BY
  • 配合GROUP_CONCAT()得到分组详情
# 分组查询
SELECT * FROM cms_user GROUP BY sex;
# 配合分组详情
SELECT id,sex,GROUP_CONCAT(username) FROM cms_user GROUP BY sex;

  • 聚合函数
  • COUNT()
  • MAX()
  • MIN()
  • AVG()
  • SUM()
  • 配合WITH ROLLUP记录上面所有记录的总和
SELECT id,sex,COUNT(*) AS totalUsers,MAX(age) AS max_age,MIN(age) AS min_age FROM cms_user GROUP BY sex WITH ROOLUP;

  • 针对查询结果做二次筛选HAVING,配合GROUP BY使用
SELECT sex,GROUP_CONCAT(username) AS users,COUNT(*) AS totalUsers,MAX(age) AS max_age,MIN(age) AS min_age FROM cms_user GROUP BY sex HAVING COUNT(*)>2 AND MAX(age)>60;

  • 对查询结果排序ORDER BY
  • 默认升序ASC,降序DESC
  • RAND(),随机排序,产生随机排序结果
# 简单排序
SELECT * FROM cms_user GROUP BY age ASC,id DESC;
# 随机排序
SELECT * FROM cms_user GROUP BY RAND();
  • LIMIT限制查询结果显示条数
  • 用作分页
  • 用作更新时,LIMIT只能带一个参数值,没有起始参数
# 查询操作
SELECT * FROM cms_user LIMIT 0,1;
# 更新前三条记录age的值
UPDATE cms_user SET age=age+10 LIMIT 3;
  • 内连接查询
  • JOIN|CROSS JOIN INNER JOIN
  • 通过ON连接条件
# 该内连接操作与使用下面第二行的WHERE条件查询一致
SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u INNER JOIN provinces AS p ON u.proId = p.id;

SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u,provinces AS p WHERE u.proId = p.id;
  • 外连接查询
  • 左外连接 LEFT [OUTER] JOIN 显示左表的全部记录及右表符合连接条件的记录
  • 右外连接 RIGHT [OUTER] JOIN 显示右表的全部记录及左表符合连接条件的记录
# 略
  • 外键关联
  • CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行
  • SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL
  • RESTRICT:拒绝对父表的删除或更新操作(默认),设置该外键关联后,必须确保数据完整性的前提下才能执行删除或更新操作,否则会报错
  • NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同(默认)
# RESTRICT 默认
# 部门表
CREATE TABLE IF NOT EXISTS department(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
departName VARCHAR(20) NOT NULL UNIQUE
) ENGINE=INNODB;

# 员工表
CREATE TABLE IF NOT EXISTS employee(
id SMALLINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
depId TINYINT UNSIGNED,
FOREIGN KEY(depId) REFERENCES department(id)
) ENGINE=INNODB;

# 栗子解释1:
# 如果员工表中,A1员工属于A部门,直接删除部门表中A部门这条数据会报错,必须先将员工表中,属于A部门的所有员工数据先删除,才能删除部门表中地A部门这条数据;

# 栗子解释2:
# 插入员工表数据,如果插入数据中departId不存在部门表中,也会插入失败;

 

 

 

 

 

 

 

 

 

 

 

© 著作权归作者所有

上一篇: Intellij IDEA 插件
下一篇: Vue-Ueditor
华山猛男

华山猛男

粉丝 11
博文 188
码字总数 94011
作品 0
海口
程序员
私信 提问
centos7作为Docker基础镜像须知

centos7基础镜像Dockerfile来构建mysql镜像可能会有问题,在Docker hub上构建失败: Build failed: The command '/bin/sh -c /etc/init.d/mysqld start && mysql -e "grant all privileges o......

chenyufeng1991
2018/04/07
0
0
自制mysql的docker镜像

去官网下mysql-5.6.22-linux-glibc2.5-x86_64.tar.gz安装包 方法一:使用 commit命令创建 1.先启动一个centos的容器 这儿使用的centos基础镜像和制作rabbitmq的基础镜像一样 可以看的到本地的...

双月通天
2016/07/07
6
0
linux从小白到linux资深专家之路

linux从小白到linux资深专家之路 为什么学Linux,理由如下: Linux是免费; Linux是开源的,你可以修改源代码; Linux是开放的,有广泛的社区; 学习Linux可以更好的掌握计算机技术; Linux是...

lxm111111
2016/07/16
0
0
51CTO学院风哥MySQL DBA数据库高级工程师视频教程套餐1.0(上部 )

51CTO学院风哥MySQL DBA数据库高级工程师培训专题1.0(上部 ) 内容如下: MySQL数据库基础入门与项目实战; MySQL数据库SQL语言开发与应用实战; MySQL数据库基础深入与核心解析系列; MySQ...

风哥Oracle
2018/06/29
0
0
MySQL入门教程系列-1.5 如何学习MySQL

在这里持续更新 MySQL入门教程系列-1.5 如何学习MySQL 如何学习 MySQL 这是一个伪命题,每个人都有适合自己的一套学习方法,各

同一种调调
2016/09/28
36
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在做 Taro 适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 解决跨域问题 h5 发请求会报跨域问题,需...

dkvirus
今天
4
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部