再小的帆也能远航,不断学习,不断进步!
具体文档参考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 | 在分组之前过滤数据,条件中不能使用聚合函数 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。