mysql is双竖线_MySql学习与总结(一)

再小的帆也能远航,不断学习,不断进步!

具体文档参考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

在分组之前过滤数据,条件中不能使用聚合函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值