狂神说MySQL学习笔记

MySQL学习笔记

1.操作数据库

1.1数据库的列类型

数值:

  • tinyint 1个字节

  • smallint 2个字节

  • mediumint 3个字节

  • int 4个字节

  • bigint 8个字节

  • float 浮点数 4个字节

  • double 浮点数 8个字节

  • decimal 字符串形式的浮点数,金融计算是用到

字符串:

  • char 字符串固定大小 0-255

  • varchar 可变字符串 0-65535

  • tinytext 微型文本 0-255

  • text 文本串 0-65535

时间日期

  • date YYYY-MM-DD 日期格式

  • time HH: mm: ss 时间格式

  • datetime YYYY-MM-DD HH: mm: ss 常用的时间格式

  • timestamp 时间戳

  • year 年份

1.2数据库的字段属性

Unsigned:无符号整数,声明该列不能为负数.

zerofill:0填充,不足的位数使用0填充.

Auto_Increment自增长:自动在上一条记录基础上加1

拓展

-- 每一个表都应该存在以下五个字段
​
id    主键
varsion      乐观锁
is_delete    伪删除
gmt_create   创建时间
gmt_update   修改时间

1.3创建数据库表

CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
    `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '学生名字',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    PRIMARY KEY (`id`)-- 主键
)ENGINE=INNODB DEFAULT CHARSET=utf8 -- 引擎和字符集编码

常用查询创建语句:

SHOW CREATE DATABASE kuang;  -- 查看创建数据库的语句
SHOW CREATE TABLE student; -- 查看student数据表的定义语句
DESC student; -- 查看表结构

1.4数据库的类型

数据库引擎:

INNODB 默认使用

MYISAM 早些年使用5.5之前

MYISAM INNODB
事务支持 不支持 支持
数据行锁定 不支持 支持
外键约束 不支持 支持
全文索引 支持 不支持
表空间的大小 较小 较大,约为2倍
  • MYISAM 节约空间,速度较快

  • MYISAM 对应文件

    .frm 表结构的定义文件

    .MYD 数据文件(data)

    .MYI 索引文件(index)

  • INNODB 安全性高,事务的处理,多表多用户操作

  • INNODB 在只有一个.frm文件,以及上级目录下的ibdata1文件

1.5修改删除表

修改

-- 修改表名,ALTER TABLE 旧表名 RENAME AS 新表名;
ALTER TABLE student RENAME AS student1;
​
-- 添加表字段,ALTER TABLE 表名 ADD 字段名 属性;
ALTER TABLE student ADD age INT(3);
​
-- 修改表的字段  (重命名,修改约束)
ALTER TABLE student MODIFY age VARCHAR(11);-- 修改约束
ALTER TABLE student CHANGE age age1 INT(3);-- 既能重命名也能修改约束
​
-- 删除字段
ALTER TABLE student DROP age1;

删除表:

-- 删除表
DROP TABLE IF EXISTS teacher;-- 如果存在

2.数据管理

2.1 外键

创建时添加外键:

key 外键名称 (添加外键的字段名)

CONSTRAINT 外键名 FOREIGN KEY (添加外键的字段名) REFERENCES 被引用的表名(被引用的字段名)

-- 定义外键key
-- key `外键名称` (`添加外键的字段名`)
​
-- 给这个外键添加约束(执行引用) references 引用
-- CONSTRAINT `外键名` FOREIGN KEY (`添加外键的字段名`) REFERENCES `被引用的表名`(`被引用的字段名`)
​
CREATE TABLE `grade`(
  `grade_id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `grade_name` VARCHAR(20) NOT NULL DEFAULT '一年级' COMMENT '年级名字',
  PRIMARY KEY (`grade_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
​
CREATE TABLE `student1` (
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '学生名字',
  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `grade_id` INT(4) NOT NULL COMMENT '年级id',
  PRIMARY KEY (`id`),
  KEY `FK_gradeid` (`grade_id`),
  CONSTRAINT `FK_gradeid` FOREIGN KEY (`grade_id`) REFERENCES `grade`(`grade_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

删除表示要先删除引用表,再删除被引用表

已经创建表后再添加外键:

ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (添加外键的字段名) REFERENCES 被引用的表名(被引用的字段名);

CREATE TABLE `grade`(
  `grade_id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `grade_name` VARCHAR(20) NOT NULL DEFAULT '一年级' COMMENT '年级名字',
  PRIMARY KEY (`grade_id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
​
​
CREATE TABLE `student1` (
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
  `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '学生名字',
  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `grade_id` INT(4) NOT NULL COMMENT '年级id',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
​
-- ALTER TABLE `表名` ADD CONSTRAINT `外键名` FOREIGN KEY (`添加外键的字段名`) REFERENCES `被引用的表名`(`被引用的字段名`);
ALTER TABLE `student1`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`grade_id`) REFERENCES `grade`(`grade_id`);
​
​

2.2 DML(数据操作语言)

数据库意义:数据存储,数据管理

DML语言:数据操作语言

  • insert

  • update

  • delete

2.21添加

  • insert into 表名(字段名1,字段名2,....) values('值1','值2',...)字段名和值要一一对应

-- 插入数据 insert into 表名(字段名1,字段名2,....) values('值1','值2',...)   字段名和值要一一对应
INSERT INTO `grade` (`grade_name`) VALUES('大一');
​
-- 不写字段名则自动匹配
INSERT INTO `grade` VALUES(2,'大二');
​
-- 插入多个值  INSERT INTO 表名 (字段名1,字段名2) VALUES(值1,值2),(值1,值2),(值1.值2)....;
INSERT INTO `grade` (`grade_name`) VALUES('大三'),('大四');
INSERT INTO `grade` (`grade_id`,`grade_name`) VALUES(5,'大五'),(6,'大六');
​

2.22修改

  • update 表名 set 字段名1=值1 where 作为条件的字段名=值;

UPDATE `grade` SET `grade_name`='研一' WHERE `grade_id`=5;
​
UPDATE `grade` SET `grade_name`='研二' WHERE `grade_name`='大六';
​
  • 修改多个值 update 表名 set 字段名1=值1,字段名2=值2,字段名3-值3 where 作为条件的字段名 = 值;

UPDATE `grade` SET `grade_id`=7,`grade_name`='研三' WHERE `grade_name`='研二';
  • 不指定条件会改变整个表的所有的数据!(不建议使用)

  • 操作符

操作符 含义
= 等于
<>或!= 不等于
> 大于
< 小于
<= 小于等于
>= 大于等于
BETWEEN ... AND ... 在某个范围
AND && 同时为真,结果才为真
OR || 一个为真,结果为真
Not !

2.23删除

  • delete from 表名 where 条件

DELETE FROM `grade` WHERE `grade_id`=7;
  • 不写条件则删除所有数据(不建议)

  • 清空表数据 TRUNCATE 表名

TRUNCATE `grade`;

DELETE 和 TRUNCATE 区别:

  • 相同点: 都能删除数据且不会删除表结构

  • 不同:

    • TRUNCATE 重新设置自增长 计数器会归零

    • TRUNCATE 不会影响事务

    • DELETE 自增长不变

    • DELETE 会影响事务

  • DELETE 删除重启数据库现象:

    • InnoDB 自增长会从1开始 (存在内存当中的,断电即失)

    • MyISAM 继续从上一个自增长开始 (存在文件中的,不会丢失)

3. DQL(Data Query LANGUAGE)查询数据

3.1 简单查询

-- 查询全部信息
SELECT * FROM `grade`;
​
-- 查询指定字段
SELECT `grade_id`,`grade_name` FROM `grade`;
​
-- 别名,给结果字段另起一个名字 AS
SELECT `grade_id` AS 年级编号,`grade_name` AS 年级名字 FROM `grade`;
​
-- 函数 Concat(a,b)拼接字符串
SELECT CONCAT('年级: ',`grade_name`) AS 新名字 FROM `grade`;-- 结果  年级: 大一

去重 DISTINCT

-- 去掉查询出来的结构中重复的数据,重复的数据只显示一条
SELECT DISTINCT `grade_name` FROM `grade`;

模糊查询

like 结合 %(代表任意字符) _(代表一个字符)

-- 查询名称包含'一'的数据
SELECT * FROM `grade` WHERE `grade_name` LIKE '%一%';
​
-- 查询名称以&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值