MySQL(上)

1、数据库分类:

1.1、关系型数据库(SQL)

  • MySQL,Oracle,SQL Server,DB2
  • 通过表和表之间,行和列之间的关系进行数据存储

1.2、非关系型数据库(NoSQL)

  • Redis,,MongDB
  • 以键值对存储,且结构不固定,每一个元组可以有不一样的字段,每个元组可以根据需要增加一些自己的键值对。

2、SQLyog

这里只为了记录细节

创建数据库的固定样式。

在这里插入图片描述

创建表的固定样式

在这里插入图片描述

Unsigned:不能为负数。
Zerofill:使用0填充,例如int(3),5填充为005

在这里插入图片描述

一般来说每个表都存在以下字段:

id				主键
'version'		乐观锁
is_delete		伪删除
gmt_create		创建时间
gmt_update		修改时间

3、命令行操作数据库

net start mysql				--启动服务
mysql -uroot -p123456		--连接数据库
show databases				--查看数据库
use 数据库名称				--更换数据库
show tables					--查看表
describe 表名称			  --显示表的所有信息

4、SQL操作数据库

CREATE DATABASE 数据库名称		--创建数据库
DROP DATABASE 数据库名称			--删除数据库
USE 数据库名称					--使用数据库
SHOW DATABASES					--查看所有数据库

5、SQL操作表

5.1、创建表

CREATE TABLE `表名称` (
`字段名称` 数据类型 NOT NULL(非空?) AUTO_INCREMENT(自增?) COMMENT(注释) '注释内容',
`sex` VARCHAR(4) NOT NULL DEFAULT(默认) '默认为',
PRIMARY KEY(`id`)		--主键
)ENGINE=INNODB(搜索引擎) DEFAULT CHARSET=utf8(默认编码)		--这行基本都是固定的

CREATE TABLE `teacher` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '教师编号',
`name` VARCHAR(10) NOT NULL COMMENT '教师名称',
`sex` VARCHAR(4) NOT NULL DEFAULT '男',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

5.2、修改表和字段

--修改表名	
ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
--增加字段
ALTER TABLE 表名 ADD 字段名 字段类型
ALTER TABLE teacher1 ADD age INT(4)
--修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新字段类型
ALTER TABLE teacher1 MODIFY age VARCHAR(4)
--修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名
ALTER TABLE teacher1 CHANGE age age1
--删除字段
ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1
--删除表(如果表存在)
DROP TABLE IF EXISTS 表名
DROP TABLE IF EXISTS teacher1
--IF EXISTS	可以用在很多操作中,用于判断是否存在

6、DML

6.1、外键

一般要使用多张表由程序实现,不建议使用外键

ALTER TABLE `表名` 
ADD CONSTRAINT `FK_外键名称` FOREIGN KEY(`外键名称`) REFERENCES `外键连接的表`(`连接的表字段名称`)
ALTER TABLE `student` 
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`geadeid`) REFERENCES `grade`(`gradeid`)

6.2、条件子句操作符

常见的省略

操作符含义实例结果
<>或!=不等于5<>6false
BETWEEN…AND…范围BETWEEN 2 AND 5[2,5]
AND 或 &&5>1 AND 1>2false
OR或 ||5>1 OR 1>2true
NOT或 !取反,非NOT 10
IS NULL是否为空‘NULL’ IS NULL0
IS NOT NULL是否不为空NOT NULL IS NOT NULL1
LIKE匹配‘abcd’ LIKE ‘_b%’1
IN匹配

备注:

  • LIKE有两个匹配符,%代表存在多个字符,_代表存在一个字符。

  • IN关键字的实例:

    IN关键字通常可以用于一条语句查询多个数据。
    IN是精确查找,不能使用%或_。
    SELECT gradeid FROM grade WHERE gradeid IN(1,2,3)	//查询在grade表中gradeid字段分别为1,2,3的数据
    

6.3、添加

INSERT INTO `表名`(`字段1`,`字段2`) VALUE ('值1','值2'),('值3','值4')
自增和有默认值的字段可以不写
--插入多个对象
INSERT INTO `teacher`(`name`) VALUE ('a'),('b')

--插入单个对象多个字段
INSERT INTO `teacher`(`name`,`sex`) VALUE ('c','女')

--插入单个对象多个字段
INSERT INTO `teacher`(`name`,`sex`) VALUE ('a','女'),('b','男')

6.4、修改

UPDATE `表名` SET `字段1`='值1',`字段2`='值2' WHERE 条件

UPDATE `student` SET `name`='王五' WHERE id = 1
UPDATE `student` SET `name`='张三',`age`='20' WHERE id = 1

6.5、删除

DELETE FROM `表名` WHERE 条件
DELETE FROM `student` WHERE id=1

delete清空表后,重启数据库不同引擎自增量会不一样

  • InnoDB 自增列会从1开始,因为存在内存中,断电即失
  • MyISAM 继续冲上一个自增量开始,存在文件中,不会丢失

6.6、清空数据

TRUNCATE `表名`
TRUNCATE `student`

与delete区别

  • 清空自增计数器
  • 不会影响事务

7、DQL

7.1、查询全部

SELECT * FROM 表名(WHERE 条件)
SELECT * FROM student

7.2、查询指定字段

SELECT `字段1`,`字段2` FROM 表名(WHERE 条件)
SELECT `studentno`,`loginpwd` FROM student

7.3、给字段起别名

SELECT `字段` AS 别名 FROM 表名(WHERE 条件)
SELECT `studentno` AS 学号 FROM student

7.4、拼接字符函数

CONCAT('str1','str2',...)
SELECT CONCAT('学号',studentno) FROM student

7.5、去除重复数据

SELECT DISTINCT 字段 FROMSELECT DISTINCT name FROM student

7.6、查询更改表数据后结果

SELECT `studentresult`+1 FROM result
显示更改后数据,但不改变数据库原数据

7.7、模糊查询

SELECT `字段` FROMWHERE `字段` LIKE '值'
SELECT `studentno` FROM student WHERE `studentname` LIKE '_佳%''值'中可以写 % 代表存在多个字符,_ 代表存在一个字符。

7.8、联表查询

--两表交集部分INNER JOIN
SELECT s.`sid`,`sname`,`sresult`
FROM student AS s
INNER JOIN result AS r
ON s.`sid`=r.`sid`
--左表数据LEFT JOIN
SELECT s.`sid`,`sname`,`sresult`
FROM student s
LEFT JOIN result r
ON s.`sid`=r.`sid`
--右表数据RIGHT JOIN
SELECT s.`sid`,`sname`,`sresult`
FROM student s
RIGHT JOIN result r
ON s.`sid`=r.`sid`
WHERE `sresult` IS NOT NULL
--可以加上WHERE筛选数据
--多表查询
SELECT s.`sid`,`sname`,`sresult`,`subject`
FROM student AS s
INNER JOIN result AS r
ON s.`sid`=r.`sid`
--先查询其中两张表关系,生成临时表,再和第三张表联表查询
RIGHT JOIN subject sub
ON sub.`sid`=r.`sid`
WHERE `subject` IS NOT NULL
  • AS可以省略

  • 在使用left jion时,on和where条件的区别如下:

    1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

7.9、自连接

一张表看为两张进行查询

在这里插入图片描述

SELECT a.`categoryname` AS '父栏目',b.`categoryname` AS '子栏目'
FROM `category` AS a,`category` AS b
WHERE a.`categoryid`=b.`pid`

在这里插入图片描述

7.10、排序

--ORDER BY 字段 DESC
--DESC降序
--ASC升序
SELECT * FROM student ORDER BY result DESC

7.11、分页

--LIMIT 当前页-1 显示数据数量
--从第1条数据开始显示4条数据(包括第1条数据)
SELECT * FROM student LIMIT 0,4
--从第6条数据开始显示8条数据
SELECT * FROM student LIMIT 5,8

7.12、子查询

在WHERE内嵌套查询语句

--查询`subjectname`='高等数学-1'的学生信息
SELECT `studentno`,`subjectno`,`studentresult` FROM result
WHERE `subjectno`=(		--这里的'='也可以用IN
	SELECT `subjectno` FROM `subject` 
    WHERE `subjectname`='高等数学-1'
)

8、MySQL函数

8.1、常用函数

函数解释实例结果
ABS绝对值ABS(-5)5
CEILING向上取整CEILING(1.23)2
FLOOR向下取整FLOOR(3.5)3
RAND0~1间的随机数RAND()

8.2、字符串函数

函数解释实例结果
CHAR_LENGTH()字符串长度CHAR_LENGTH(‘abc’)3
CONCAT()拼接字符串CONCAT(‘a’,1,‘c’)a1c
INSERT(‘str’,pos,len,‘newstr’)替换字符串INSERT(‘abc’,1,2,‘efg’)efgc
LOWER()大写转小写LOWER(‘Abc’)abc
UPPER()小写转大写UPPER(‘abC’)ABC
REPLACE(‘str’,‘from_str’,‘to_str’)替换字符串REPLACE(‘abc’,‘a’,‘de’)debc
SUBSTR(‘str’,pos,len)截取字符串SUBSTR(‘abcde’,3,2)cd
REVERSE()反转字符串REVERSE(‘abc’)cba

8.3、时间和日期

函数解释结果
CURDATE()查询当前日期yyyy-mm-dd
NOW()查询当前日期和时间yyyy-mm-dd hh:mm:ss
LOCALTIME()查询本地时间yyyy-mm-dd hh:mm:ss
SYSDATE()查询系统时间yyyy-mm-dd hh:mm:ss

8.4、聚合函数

函数解释
COUNT()计数
SUM()求和
AVG()平均数
MAX()最大值
MIN()最小值
SELECT COUNT(`sid`) FROM student	--计数指定字段会忽略所有NULL
SELECT COUNT(*) FROM student		
SELECT COUNT(1) FROM student

8.5、分组

--根据科目名称进行分组查询每个科目最高分
SELECT `subjectname`,MAX(`studentresult`)
FROM result r
INNER JOIN `subject` sub
GROUP BY `subjectname`

8.6、MD5加密

UPDATE `user` SET pwd=MD5(pwd)

平均数 |
| MAX() | 最大值 |
| MIN() | 最小值 |

SELECT COUNT(`sid`) FROM student	--计数指定字段会忽略所有NULL
SELECT COUNT(*) FROM student		
SELECT COUNT(1) FROM student

8.5、分组

--根据科目名称进行分组查询每个科目最高分
SELECT `subjectname`,MAX(`studentresult`)
FROM result r
INNER JOIN `subject` sub
GROUP BY `subjectname`

8.6、MD5加密

UPDATE `user` SET pwd=MD5(pwd)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值