再小的帆也能远航,不断学习,不断进步!
具体文档参考mysql官网文档,官方文档是学习的最好方式!
https://dev.mysql.com/doc/ref...

总结一下工作中常用的基本sql和命令

基本的命令行操作

命令行连接数据库
mysql -h地址 -u用户名 -P端口 -p密码 
查看当前数据库的版本
select version();
显示当前数据库中的所有表
show tables;
查看表结构
desc 表名;
查看建表语句
show create table 表名\G;

操作数据库语句

创建数据库
create database if not exists 数据库名;
删除数据库 
drop database if exists 数据库名;
使用数据库 
use `数据库名`;
查看数据库 
show databases;  查看所有的数据库
select database(); 查看当前位于哪个数据库
show create database 数据库名\G; 查看建库语句

数据库的列类型

数值
int 标准的整数
decimal 字符串形式的浮点数

字符串
varchar 可变字符串 0-65535 常用的变量
text 文本串 2^16-1 保存大文本

时间
datatime YYYY-MM-DD HH:mm:ss 最常用的时间格式
timestamp 时间戳 1970.1.1 到现在的毫秒数
year

Null
空值

操作数据表语句

创建表

CREATE TABLE IF NOT EXISTS `student`(
 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
 `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT'姓名',
 `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
 `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
 `birthday` DATETIME DEFAULT NULL COMMENT'生日',
 `address` VARCHAR(100) DEFAULT NULL COMMENT 'j家庭地址',
  `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

修改表

修改表名 
alter table `旧表名`  rename as `新表名`;
增加表的字段 
alter table `表名` add `字段名` 列属性;
修改表的字段
alter table `表名`  modify  `字段名` 新约束;    只能修改约束
alter table `表名`  change `旧字段名`  `新字段名` [新|旧约束];   既可以修改字段名也可以修改约束
删除表的字段
alter table `表名` drop `字段名`;

删除表

drop table if exists `表名`;

查看表

查看表结构
desc `表名`;
查看建表语句
show create table `表名`\G;

MyISAM和INNODB的区别

MyISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
全文索引 支持 不支持
外键索引 不支持 支持
表空间的大小 较小 较大,约为2倍

数据库级别的外键(物理外键)

DROP TABLE IF EXISTS `student`;
DROP TABLE IF EXISTS `grade`;
-- 创建年级表(主表)
CREATE TABLE IF NOT EXISTS `grade`(
 `grade_id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
 `grade_name` VARCHAR(20) NOT NULL COMMENT '年级名称',
  PRIMARY KEY(`grade_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 创建学生表,创建表的时候添加外键引用
-- 学生表(从表)的grade_id字段要去引用年级表(主表)的grade_id字段
CREATE TABLE IF NOT EXISTS `student`(
 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
 `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT'姓名',
 `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
 `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
 `birthday` DATETIME DEFAULT NULL COMMENT'生日',
 `address` VARCHAR(100) DEFAULT NULL COMMENT 'j家庭地址',
  `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
  `grade_id` INT(4) NOT NULL  COMMENT '年级id',
  PRIMARY KEY(`id`),
  KEY `FK_id` (`grade_id`),   -- 定义学生表的grade_id为key
  -- 约束 定义的grade_id 为外键同时引用年级表的grade_id字段
  CONSTRAINT `FK_id` FOREIGN KEY (`grade_id`) REFERENCES `grade`(`grade_id`) 
  )ENGINE=INNODB DEFAULT CHARSET=utf8; -- constraint 约束  foreign key  外键  refrences 引用  
-- 删除有外键引用的表时,必须先删除从表再删除主表
DROP TABLE IF EXISTS `student`;
-- 创建表后添加外键引用
CREATE TABLE IF NOT EXISTS `student`(
 `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
 `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT'姓名',
 `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
 `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
 `birthday` DATETIME DEFAULT NULL COMMENT'生日',
 `address` VARCHAR(100) DEFAULT NULL COMMENT 'j家庭地址',
  `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
  `grade_id` INT(4) NOT NULL  COMMENT '年级id',
  PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 添加外键约束
ALTER TABLE `student` 
ADD CONSTRAINT `FK_id` FOREIGN KEY (`grade_id`) REFERENCES `grade` (`grade_id`);
DESC `student`;

DML语言(数据操作语言)

insert语句
INSERT INTO `grade`(`grade_name`) VALUES('大一');
-- 插入的时候字段和值要一一对应,字段是自增的时候可以省略
update语句
-- update 修改 
UPDATE `grade` SET `grade_name`='大二' WHERE grade_id=1;
-- 需要修改多个字段,使用逗号隔开
delete语句
-- delete 删除 
DELETE FROM `grade` WHERE grade_id = 1;
delete和truncate的区别
  • 相同点
    都能删除数据,都不会删除表结构
  • 不同点

    • truncate重新设置自增列,计数器会归零
    • truncate 不会影响事务

DQL(数据查询语言)

基本的Select语句
-- 查询所有数据  
SELECT * FROM `student`;
-- 查询指定字段 
SELECT `name` ,`pwd` FROM `student`;
-- 起别名 ,结果、字段、表都可以起别名,可以使用as,也可以省略 
SELECT `name` AS 姓名,`pwd` AS 密码 FROM `student`;
SELECT s.name AS 姓名 , s.pwd AS 密码 FROM `student` AS s;
-- 函数concat(a,b)
SELECT CONCAT("学生姓名:",`name`) AS 新姓名  FROM `student`;
-- 去重  
SELECT DISTINCT `name` FROM `student`;
Where子句

算术运算符

算术运算符 含义
= 等于
> 大于
< 小于
>= 大于等于
<= 小于等于
!= <> 不等于
and
or
between ...and 在某个区间内

逻辑运算符

逻辑运算符 含义
&&
双竖线
not

模糊查询-比较运算符

比较运算符 含义
is null null值
is not null 不为null值
like 匹配
in 集合
-- like 模糊查询  
-- like 结合 %(0-任意个字符) _(一个字符) 
SELECT `name` ,`pwd` FROM `student` WHERE `name` LIKE '刘%';
SELECT `name` ,`pwd` FROM `student` WHERE `name` LIKE '刘_';
-- in  集合  
SELECT `name`,`pwd` FROM `student` WHERE `id` IN (1,2,3);
-- is null   空  
SELECT `name` ,`id` FROM `student` WHERE `psd` IS NULL;
-- is not null  不为空 
SELECT `name` ,`id` FROM `student` WHERE `psd` IS NOT NULL;

联表查询

操作 描述
inner join 等值联结 只显示符合条件的记录
left join 左联结 左表的记录会全部显示,右表只会显示符合搜索条件的记录
right join 右联结 右表的记录会全部显示,左表只会显示符合搜索条件的记录
1:分许查询的字段都来自哪些表
2:确定交叉点(两个表中的哪些数据是相同的)
3:找到判断的条件

分页和排序

order by 排序的字段    asc 升序  desc  降序
limit 起始值,页面大小    
起始值=(n-1)*页面大小   n为当前页  
数据总数/页面大小 = 总页数  

聚合函数

聚合函数 含义
count() 统计
sum() 求和
max() 最大值
avg() 平均值
min() 最小值
三者的比较
count(*) 包括了所有列,相当于行数 统计结果不会忽略列值为null的
count(1) 忽略了所有列,用1代表代码行 统计结果不会忽略列值为null的
count(列名) 只包括列名那一列 统计结果会忽略列值为null的

分组函数
group by 有一个原则,就是select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)

区别
having 在分组之后过滤数据,条件中可以使用聚合函数
where 在分组之前过滤数据,条件中不能使用聚合函数

踏雪无痕恋
0 声望0 粉丝

Java开发 Linux运维