一、创建表
格式:
CREATE TABLE [IF NOT EXISTS] `表名`( `字段名` 列类型 [属性] [索引] [注释], `字段名` 列类型 [属性] [索引] [注释], `字段名` 列类型 [属性] [索引] [注释], .... `字段名` 列类型 [属性] [索引] [注释] )[表类型][字符集设置][注释]
比如:创建一个学生表,字段分别是学号,登录密码,姓名,性别,出生日期,家庭地址
CREATE DATABASE IF NOT EXISTS westos; --创建数据库 USE westos; --使用数据库 创建student表 CREATE TABLE IF NOT EXISTS `student`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号', `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码', `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别', `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址', `eamil` VARCHAR(50) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8
注意:
1、AUTO_INCREMENT :自增
2、使用英文的()
3、表名称和字段尽量适应·· 括起来
4、字符串使用单引号括起来
5、所有的语句后面都要加上英文的 , 逗号
6、最后一个语句不用加逗号
7、PRIMARY KEY 主键 一般一个表只有一个唯一的主键
二、修改与删除表
1、修改表 (alter)
#修改表名
#格式:alter table 旧表名 rename as 新表名; ALTER TABLE student RENAME AS student1; #格式:Alter table 表明 add 字段名 列属性;
ALTER TABLE student1 ADD hobby VARCHAR(20); #增加表的字段
#删除表字段
#格式:alter table 表名 drop 字段名
ALTER TABLE student1 DROP hobby;
#修改表的字段
#格式 : alter table 表名 modify 字段名 列属性[]; ALTER TABLE student1 MODIFY eamil VARCHAR(55); #修改列属性的值(约束)
#格式 : alter table 表名 change 旧字段名 新字段名 列属性[]; ALTER TABLE student1 CHANGE eamil email VARCHAR(55); #修改字段名 区别: MODIFY :不用来字段重命名,只能修改字段类型和约束 change : 用来字段重命名,不能修改字段约束和类型
2、删除表(drop)
Drop Table student1; --删除数据表
DROP TABLE IF EXISTS student1; --如果表存在在删除
注意:所有的创建和删除操作尽可能的使用判断,以免报错
三、DML 语言
数据库的意义:数据存储,数据管理
DML语言:数据操作语言(insert、update、delete)
1、添加/插入 (insert)
#插入语句(添加)
#格式:insert into 表名([字段名1,字段名2,字段名3,..])values('值1','值2','值3'..) #插入一条字段 INSERT INTO `student1`(`name`) VALUES('张三'); #插入多条字段 INSERT INTO `student1`(`name`) VALUES('张三'),('李四'); #插入一个数据 INSERT INTO `student1`(`name`,`pwd`,`sex`,`birthday`,`address`,`email`) VALUES('张三','1234587','男','2020-2-10','中国','15239867@qq.com');
#插入多条数据 INSERT INTO `student1`(`name`,`pwd`,`sex`,`birthday`,`address`,`email`) VALUES('张三','1234587','男','2020-2-10','中国','15239867@qq.com'), ('王五','1152587','男','1998-5-28','上海','1965867@qq.com'), ('王二','9854587','女','1820-11-10','北京','1523523@qq.com');
#注意:1、一般插入数据,我们一定要数据和字段一 一对应
2、字段与字段之间,以英文状态下的逗号隔开,
3、可以同时插入多条数据,values后面的值,需要使用英文状态下的逗号隔开,即可 。如:values(),()...
2、修改/更新(update)
# 修改学员的名字 指定条件 UPDATE `student1` SET NAME ='小花' WHERE id=1; # 不指定条件,会改动所有的表的字段名 UPDATE `student1` SET NAME ='小明' ;
#修改多个属性,逗号隔开
UPDATE `student1` SET `name`='小明',`address`='重庆' WHERE id=3;
#修改id=3和id=6之间的数据
UPDATE `student1` SET `name`='小明',address='重庆' WHERE id BETWEEN 3 AND 6;
#语法:
update 表名 set colnum_name=value where [条件];
注意:
colnum_name是数据库的列,尽量带上
条件 where :筛选的条件,如果没有指定,则会修改所有的列
value :是一个具体的值,也可以是一个变量
多个设置的属性之间,使用英文逗号隔开
条件:where 子句
运算符 :id等于某个值、id 小于某个值,id 大于某个值 在某个区域内修改...
操作符 | 含义 |
= | 等于 |
<>或 != | 不等于 |
> | 大于 |
< | 小于 |
<= | 小于等于 |
>= | 大于等于 |
between...and... | 在...范围之间 |
and | 和 |
or | 或 |
3、删除(delete / truncate)
语法:delete from 表名 [ where 条件];
#删除指定数据
DELETE FROM `student1` WHERE id=6;
#删除数据 (避免这样写,会全部删除)
delete from `student1`;
truncate 命令:
作用:完全清空一个数据表,表的结构和索引约束不会变!
#清空student 表 TRUNCATE `student1`;
delete / truncate 区别:
相同点:都能删除数据,都不会删除表结构
不同点:
1、truncate 可以重新设置,自增列计数器会归零
delete 不会影响自增列计数器会归零
2、truncate 不会影响事务
delete删除的问题:可以重启数据库
现象:
如果有lnnodb ,自增列会从1开始(存在内存当中,断电即失)
如果有myism ,继续从上一个自增量开始(存在文件当中,不会丢失)
四、DQL语言(数据查询语言)
数据库最核心的语言,最重要的语句,使用最频繁的语句
SELECT [ALL | DISTINCT] {* |table.* | [table.fiel1[AS alias1][,[table.field2[AS alias2]][,[table.field3[AS alias3]][,...]] FROM table_name [AS table_alias] [LEFT | RIGHT | INNER JOIN table_name2] #联合查询 [WHERE ...] #指定结果需满足的条件 [GROUP by...] #指定结果按照哪几个字段来分组 [HAVING] #过滤分组的记录必须满足的次要条件 [ORDER by...] #指定查询记录按一个或多个条件排序 [LIMIT {[offset.]roe_count | row_countOFFSET OFFSET}]; #指定查询记录从那条到那条
[] 括号代表可选
{} 括号 代表必选
创建了几个表
CREATE DATABASE `school`; USE `school`; CREATE TABLE `grade`( `GradeID` INT(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号', `GradeName` VARCHAR(50) NOT NULL COMMENT '年级名称', PRIMARY KEY (`GradeID`) )ENGINE=INNODB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; INSERT INTO `grade` (`GradeID`,`GradeName`) VALUES(1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班'); CREATE TABLE `result`( `StudentNO` INT(4) NOT NULL COMMENT '学号', `SubjectNo` INT(4) NOT NULL COMMENT '课程编号', `ExamDate` DATETIME NOT NULL COMMENT '考试日期', `StudentResult` INT(4) NOT NULL COMMENT '考试成绩', KEY `SubjectNo` (`SubjectNo`) )ENGINE=INNODB DEFAULT CHARSET=utf8; INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1000,1,'2013-11-11 16:00:00',75); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1001,4,'2013-11-11 16:00:00',89); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1003,5,'2013-11-11 16:00:00',90); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1005,2,'2013-11-11 16:00:00',62); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1007,4,'2013-11-11 16:00:00',86); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1004,1,'2013-11-11 16:00:00',93); INSERT INTO `result` (`StudentNO`,`SubjectNo`,`ExamDate`,`StudentResult`) VALUES(1008,3,'2013-11-11 16:00:00',80); CREATE TABLE `student`( `StudentNO` INT(4) NOT NULL COMMENT '学号', `LoginPwd` VARCHAR(20) DEFAULT NULL, `StudentName` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名', `Sex` TINYINT(1) DEFAULT NULL COMMENT '性别,取值0或者1', `GradeId` INT(11) DEFAULT NULL COMMENT '年级编号', `Phone` INT(50) DEFAULT NULL COMMENT '联系电话,允许为空,即可选输入', `Address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空,即可选输入', `BornDate` DATETIME DEFAULT NULL COMMENT '出生时间', `Email` VARCHAR(50) NOT NULL COMMENT '邮件账户,允许为空,即可选输入', `IdentityCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号', PRIMARY KEY (`StudentNo`), UNIQUE KEY `IdentityCard`(`IdentityCard`), KEY `Email` (`Email`) )ENGINE=MYISAM DEFAULT CHARSET=utf8; INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1001,'1111','张三',1,1,'135205278','上海','1985-02-12 00:00:00','12589654@qq.com','52369875412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1002,'1236','李四',0,1,'152638752','杭州','1998-05-16 00:00:00','5689254@qq.com','8952875412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1003,'1125','王二',1,5,'186320148','武汉','1923-09-12 00:00:00','357959654@qq.com','89521475412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1004,'5234','夏利',1,3,'185632479','北京','1986-03-26 00:00:00','7892654@qq.com','55624775412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1005,'5867','明和',0,5,'135698742','石家庄','1979-07-24 00:00:00','1856972@qq.com','8629875412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1006,'4523','金萨',0,4,'147895234','广州','1968-09-18 00:00:00','848569@qq.com','125875412'); INSERT INTO `student`(`StudentNO`,`LoginPwd`,`StudentName`,`Sex`,`GradeId`,`Phone`,`Address`,`BornDate`,`Email`,`IdentityCard`) VALUES(1007,'1895','明霞',1,2,'169774524','深圳','1959-06-09 00:00:00','1956487@qq.com','5157875412'); TRUNCATE `student`; SELECT * FROM student; CREATE TABLE `subject`( `SubjectNo` INT(11) NOT NULL AUTO_INCREMENT COMMENT '课程编号', `SubjectName` VARCHAR(50) DEFAULT NULL COMMENT '课程名称', `ClassHour` INT(4) DEFAULT NULL COMMENT '学时', `GradeId` INT(4) DEFAULT NULL COMMENT '年级编号', PRIMARY KEY(`SubjectNo`) )ENGINE=INNODB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8; INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(1,'c语言',110,2); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(5,'java',110,4); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(4,'c语言',110,2); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(2,'java',110,3); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(3,'c语言',110,2); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(6,'java',110,4); INSERT INTO `subject`(`SubjectNo`,`SubjectName`,`ClassHour`,`GradeId`) VALUES(7,'c语言',110,2); SELECT * FROM `subject`;
1、简单的查询
USE school; #查询student的所有数据 SELECT * FROM student; #查询学生的学生的学号和名字 SELECT `StudentNo`,`StudentName` FROM student; #查询学生的学生的学号和名字,并给查询的结果起一个别名,用AS (可以给字段其别名,也可以给表名起别名) SELECT `StudentNo`AS '学号',`StudentName` AS '名字' FROM student; #函数 Concat(a,b) 让a和b进行拼接 SELECT CONCAT('姓名:',StudentName) AS 新名字 FROM student;
#查询StudentResult为59分的学号,并且给59分成绩加1分
SELECT `StudentNo` ,`StudentResult`+1 AS '加分后的分数' FROM result WHERE StudentResult=59;
2、去重 (distinct)
#查看全部同学的成绩 SELECT * FROM result; #查看哪些同学参加了考试 SELECT `StudentNo` FROM result; #发现数据重复,去重 SELECT DISTINCT `StudentNo` FROM result;
3、where条件
#查询StudentResult为59分的学号,并且给59分成绩加1分 SELECT `StudentNo` ,`StudentResult`+1 AS '加分后的分数' FROM result WHERE StudentResult=59; #查询考试成绩在80~100分之间 SELECT `StudentNo`,`StudentResult` FROM result WHERE StudentResult>=80 AND StudentResult <=100; #使用between查询考试成绩在80~100分之间 SELECT `StudentNo`,`StudentResult` FROM result WHERE StudentResult BETWEEN 80 AND 100;
4、模糊查询
运算符 | 语法 |
is null | a is null |
is not null | a is not null |
between ... and... | a between b and c |
like | a like b |
in | a in (a1,a2,a3) |
#查询姓张的同学 #解析:利用like结合 % 代表0到任意一个字符 _ 代表一个字符 SELECT `StudentNo`,`StudentName` FROM student WHERE StudentName LIKE '张%'; SELECT `StudentNo`,`StudentName` FROM student WHERE StudentName LIKE '张_'; #查询名字中间带有“二”的同学的全部信息 SELECT * FROM student WHERE StudentName LIKE '%二%'; #查询1001,1002,1003号的学生 SELECT * FROM student WHERE StudentNo IN(1001,1002,1003); #查询地址为空的同学的信息 SELECT `StudentNo`,`StudentName` FROM student WHERE address=' ' OR address IS NULL; #查询有出生日期的同学(不为空的) SELECT `StudentNo`,`StudentName` FROM student WHERE BornDate IS NOT NULL;
5、联表查询(join)
步骤:a、分析需求,分析查询的字段来自哪里 (连接查询)
b、确定使用哪种连接查询(inner join 、left join 、right join)
c、确定交叉点(这两表中哪个数据是相同的)
d、判断条件
操作 | 描述 |
inner join | 如果表中至少有一个匹配,就返回匹配的数据 |
left join | 会从左表中返回所有的值,即使右表中没有匹配 |
right join | 会从右表中返回所有的值,即使左表中没有匹配 |
#查询参加了考试的同学的信息 #inner join 内联查询 SELECT s.studentNo,studentName,SubjectNo,StudentResult FROM student AS s INNER JOIN result AS r WHERE s.studentNo=r.studentNo; #left join SELECT s.studentNo,studentName,SubjectNo,StudentResult FROM student AS s LEFT JOIN result AS r ON s.studentNo=r.studentNo; #right join SELECT s.studentNo,studentName,SubjectNo,StudentResult FROM student AS s RIGHT JOIN result AS r ON s.studentNo=r.studentNo;
#查询缺考的同学的信息
join(连接的表) on (判断的条件):连接查询
where 等值查询
SELECT s.studentNo,studentName,SubjectNo,StudentResult
FROM student AS s
LEFT JOIN result AS r
ON s.studentNo=r.studentNo
WHERE StudentResult IS NULL;
#查询参加考试的同学的科目和分数
SELECT s.studentNo,studentName,Subjectname,StudentResult
FROM student AS s
RIGHT JOIN result AS r
ON s.StudentNo=r.StudentNo
INNER JOIN `subject` AS su
ON r.SubjectNo=su.SubjectNo;
#查询学生所属的年级
SELECT studentNo,studentName,GradeName
FROM student s
INNER JOIN grade g
ON s.GradeID=g.GradeID;
#查询课程所属的年级
SELECT SubjectName,GradeName
FROM `subject` sub
INNER JOIN grade g
ON sub.GradeID=G.GradeID;
#查询参加了java考试的学生信息
SELECT s.`StudentNO`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN result r
ON s.StudentNo=r.StudentNo
INNER JOIN `subject` sub
ON r.SubjectNo=sub.SubjectNo
WHERE subjectName='java';
步骤:要查哪些数据 select .....
从那几个表中查 from 表 xxx join 连接的表 on 交叉条件
假设存在一种多张表查询,慢慢来,先查询两张表,然后再慢慢的增加
6、自连接
自己的表和自己的表连接
核心:一张表拆为两张一样的表即可
CREATE TABLE `category`( `categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id', `pid` INT(10) NOT NULL COMMENT '父id', `categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字', PRIMARY KEY (`categoryid`) )ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; INSERT INTO `category`(`categoryid`,`pid`,`categoryName`) VALUES ('2','1','信息技术'), ('3','1','软件开发'), ('4','3','数据库'), ('5','2','美术设计'), ('6','1','web开发'), ('7','5','ps技术'), ('8','5','办公信息');
#查询父子信息 SELECT a.`categoryName` AS '父栏目', b.`categoryName` AS '子栏目' FROM `category` AS a,`category` AS b WHERE a.`categoryid`=b.`pid`;
7、分页和排序
排序 :利用order by ,通过查询哪一个字段排序,排序的方式
升序 :ASC
排序 :DESC
#查询的结果根据成绩降序排序 SELECT s.`StudentNO`,`StudentName`,`SubjectName`,`StudentResult` FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo INNER JOIN `subject` sub ON r.SubjectNo=sub.SubjectNo WHERE subjectName='java' ORDER BY StudentResult ASC;
分页:limit
语法 :limit 起始值,页面的大小
( limtit (n-1)*pageSize,pageSize) ==>pageSize :页面大小、 (n-1)*pageSize :起始值 、 n:当前页 、 数据总数/页面大小 =总页数
#每页只显示3条数据 SELECT s.`StudentNO`,`StudentName`,`SubjectName`,`StudentResult` FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo INNER JOIN `subject` sub ON r.SubjectNo=sub.SubjectNo WHERE subjectName='c语言' ORDER BY StudentResult ASC LIMIT 0,3;
#查询C语言 课程成绩排名前3的学生,并且分数要大于80的学生信息
SELECT s.`StudentNO`,s.`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN result r
ON s.`StudentNO`=r.`StudentNO`
INNER JOIN `subject` sub
ON sub.`SubjectNO`=r.`SubjectNO`
WHERE `SubjectName` ='c语言' AND StudentResult>=80
ORDER BY StudentResult DESC
LIMIT 0,3
8、子查询
本质:在where语句中嵌套一个字查询语句
#查询java的所有考试成绩,并且考试成绩降序排列 #第一种方式:利用连接查询 SELECT `StudentNO`,r.`SubjectNo`,`StudentResult` FROM result r INNER JOIN `subject` s ON r.SubjectNo=s.SubjectNo WHERE SubjectName='java' ORDER BY StudentResult DESC; #方式二:使用子查询 SELECT StudentNO,SubjectNo,StudentResult FROM `result` WHERE SubjectNo =( SELECT SubjectNo FROM `subject` WHERE SubjectName='java' ) ORDER BY StudentResult DESC; #查询分数不小于80分的学生的学号和姓名 SELECT `StudentNO`,`StudentName` FROM student WHERE StudentNo=( SELECT StudentNo FROM result WHERE StudentResult>80 );
9、常用函数
常用函数 | 描述 |
ABS() | 绝对值 |
CEILING() | 向上取整 |
FLOOR() | 向下取整 |
RAND | 返回一个0-1之间的随机数 |
SIGN | 返回参数的符号 。负数返回-1,整数返回 1 |
CHAR_LENGTH() | 字符串的长度 |
CONCAT | 拼接字符串 |
INSERT(某个位置,替换的长度) | 替换,插入 |
LOWER() | 转小写字母 |
UPPER() | 转大写字母 |
INSTR() | 返回第一个出现的字串的索引 |
REPLACE() | 替换出现的指定字符串 |
SUBSTR(原字符串,截图的位置,截取的长度) | 返回指定的字符串 |
REVERSE() | 字符串反转 |
CURRENT_DATE(),CURDATE() | 获取当前日期 |
NOW() | 获取当前时间 |
10、聚合函数
函数名称(常用) | 描述 |
COUNT | 计数 |
SUM() | 就和 |
AVG() | 平均值 |
MAX() | 最大值 |
MIN() | 最小值 |
#Count(指定列)
SELECT COUNT(StudentName) FROM student; SELECT COUNT(*) FROM student; SELECT COUNT(1) FROM result;
COUNT(字段名)、COUNT(*)、COUNT(列行) 它们都能够统计表中的数据,但它们之间有什么区别?
1、COUNT(字段名) ,会忽略所有的null 值,但COUNT(*)、COUNT(列行),不会忽略所有的null 值
10、分组
group by .... having....
#查询不同的课程的平均分、最低分、最高分
SELECT sub.SubjectName,AVG(StudentResult),MAX(StudentResult),MIN(StudentResult)
FROM result r
INNER JOIN `subject` sub
ON r.SubjectNo=sub.SubjectNo
GROUP BY r.SubjectNo; #通过什么字段来分组
#查询不同的课程的平均分、最低分、最高分,并且平均分大于80分
SELECT sub.SubjectName,AVG(StudentResult) 平均分,MAX(StudentResult) 最大值,MIN(StudentResult) 最小值 FROM result r INNER JOIN `subject` sub ON r.SubjectNo=sub.SubjectNo GROUP BY r.SubjectNo #通过什么字段来分组 HAVING 平均分>80;
拓展:
数据库级别的MD5加密
MD5主要是增强算法和不可逆性
USE school; CREATE TABLE `testmd5`( `id` INT(4) NOT NULL, `name` VARCHAR(20) NOT NULL, `pwd` VARCHAR(40) NOT NULL, PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8; #明文密码 INSERT INTO `testmd5` VALUES(1,'张三','12346'); INSERT INTO `testmd5` VALUES(2,'李四','147852'); INSERT INTO `testmd5` VALUES(3,'王二','258963'); INSERT INTO `testmd5` VALUES(4,'麻子','369852'); SELECT * FROM testmd5; #加密 UPDATE testmd5 SET pwd=MD5(pwd) WHERE id = 1; #加密一条 UPDATE testmd5 SET pwd=MD5(pwd) #加密全部的密码 #插入的时候加密 INSERT INTO testmd5 VALUES(5,'小明',MD5('89745612')); #如何校验:将用户传递进来的密码,进行md5加密,然后比对加密的值 SELECT * FROM testmd5 WHERE `name`='小明' AND pwd=MD5('89745612');