命令行连接
连接数据库:mysql -uroot -p密码;
修改用户密码:update mysql.user set authentication_string=password(‘密码’) where user=‘root’ and Host = ‘localhost’;
刷新权限:flush privileges;
查看所有的数据库:show databases;
使用数据库:use 数据库名
查看数据库中所有的表:show tables;
查看表中的信息:describe 表名;
创建数据库:create database 数据库名;
退出连接:exit;
数据库语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
外键
创建表成功后,有外键约束
ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY('作为外键的列') REFERENCES '另一张表名'(‘某个字段’)
举例:ALTER TABLE 'student' ADD CONSTRAINT 'FK_gradeid' FOREIGN KEY('gradeid') REFERENCES 'grade' (‘gradeid’);
外键很少使用:
删除外键关系的表的时候,必须要先删除引用别人的表(从表)(student),再删除被引用的表(主表)(grade)
DML 操作
insert
insert into 表名([字段名1,字段名2.。。])values ('值1','值2',。。。);
由于主键自增 我们可以忽略;
一个字段对应一个值
插入多个字段:
如:insert into ‘grade’ (‘gradename’,‘age’) values(‘大一’,23),(‘大二’,21);
update
updat 表名 set ‘某个字段名’=值 where 天剑
如果不指定条件的情况下,会改动所有表
如:update 表名 set ‘某个字段名’ = 值;
修改多个属性:
如:`update 表名 set colnum_name = value,colnum_name1 = value1,.....where 条件`
条件:where子句 ,操作符会返回布尔值
操作符==,>=,between … and…,AND,OR等等
delete
delete from 表名 where 条件
清空表用truncate命令
truncate 表名,保留表的结构和索引约束不会变和delete 唯一不同就是truncate可以重新设置自增列,计数器会归0;
delete删除的问题(了解)
重启数据库,现象
InnoDB 自增列会重1开始(存在内存当中,断电即失)
MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)
DQL 查询(重要)
所有的查询操作都用它 select
简单查询和复杂查询
指定查询字段:
select * from 表名
select ‘字段名’,‘字段名’ from 表名
可以给字段起个别名,也可以给表起个别名
select '字段名' as 别名,'字段名' as 别名。。。 from 表名 as 别名;
函数Concat(a,b)
select Concat(‘姓名:’,字段名) as 别名 from 表名
SELECT CONCAT("新姓名:",name) as '自己设置新名字' FROM s_student
去重
作用:去除查询出来的结果中重复的数据,只显示一条
selcect distinct ‘字段名’ from 表名
查询系统版本
SELECT VERSION()
用来计算(表达式)
SELECT 100*9 AS 计算结果
查询自增的步长(变量)
SELECT @@auto_increment_increment
模糊查询
SELECT * FROM account where mobile LIKE ‘136%’
SELECT * FROM account where realName LIKE ‘张__’
SELECT * from account where realName LIKE ‘%五%’
-- 查询id 为 2 3 5人物的信息
SELECT * FROM account WHERE id in (2,3,5);
in (具体的一个或多个值)
-- 查询南京 北京人物的信息
SELECT * from account where address in ('南京','上海 浦东');
-- 查询remark不为空的学生信息
SELECT s_score.score,s_score.course_id FROM s_score where s_score.remark !='' AND s_score.remark IS Not NULL;
-- 查询remark为空的学生信息
SELECT s_score.score,s_score.course_id FROM s_score where s_score.remark ='' OR s_score.remark IS NULL;(null查不出来)
如果要单纯查NULL值列,则使用 is NULL去查,单纯去查空值(’’)列,则使用 =’’。
建议查询方式:NULL值查询使用is null/is not null查询,而空值(’’)可以使用=或者!=、<、>等算术运算符。**
联表查询
分析:
要查询的字表段来自哪些 (连接查询)
确定用哪种连接查询(7种)
确定交叉点(两个表中哪个数据是相同的)
条件:某张表.stuId = 另张表.stuId
inner join 如果表中至少有一个匹配,就返回性
left join 会从左表中返回所有的值,即使右表中没有匹配
right join 会从右表中返回所有的值,即使左表中没有匹配
-- 查询学生的爱好(学生姓名、爱好)
-- SELECT t_student.`name`,t_hobby.hobbyname FROM t_hobby,t_student WHERE t_student.id=t_hobby.id
SELECT t_student.`name`,t_hobby.hobbyname
FROM t_student
INNER JOIN t_hobby
ON t_student.id = t_hobby.id
自连接
把一张表看成是两张一模一样的表
select完整语法
顺序不要搞乱
select [选项 all | distinct]
字段表达式
from 数据源
left|right|inner join 数据源2(联合查询)
where 字段表达式(指定结果满足的条件)
group by 子句(指定结果按照哪个字段来分组)
having 子句(过滤分组的记录必须满足的次要条件)
order by 子句(指定查询记录按一个或多个条件排序)
limit 子句(指定查询的记录从哪条到哪条)
排序
order by 排序字段 desc 降序
order by 排序字符 asc 升序
分页
数据库分页是有公式的
每页显示5条数据 pageSize = 5;
第一页 limite 0,5 (1-1)*5
第二页 limite 5,5 (2-1)*5
第三页 limite 10,5 (3-1)*5
第n页 limite (n-1)*pageSize,5
pageSize:页面大小
(n-1)*pageSize:起始值
n:当前页
数据总记录数/页面大小 = 总页数
子查询
where语句中嵌套一个子查询语句
嵌套查询
函数
SELECT MOD(10,3);#1 返回10除以3的余数
select SQRT(100);#10 返回10的平方根
select ABS(-10);#10 返回-10的绝对值
SELECT PI();#3.141583返回圆周率
SELECT CEIL(1.5);#2 返回大于或等于1.5的最小整数
SELECT CEIL(-1.56);#-1
select CEILING(1.5);#2 返回大于或等于1.5的最小整数
SELECT CEILING(-1.5);#-1
SELECT FLOOR(1.5);#1 返回小于或等于1.5的最大整数
SELECT FLOOR(-1.5);#-2
SELECT RAND();#返回一个0,1之间的随机数
SELECT RAND(100);#返回一个0~x之间的随机数
SELECT ROUND(10.82);#11 四舍五入
SELECT ROUND(10.32);#10
SELECT ROUND(10.82,1);#10.8
SELECT ROUND(10.325,2);#10.333 四舍五入 保留指定后面的小数位
SELECT `TRUNCATE`(10.352,2);#10.333 四舍五入 保留指定后面的小数位
SELECT sign(12),sign(234);#返回参数的符号
select pow(12,3);#乘方
SELECT POWER(2,3);#乘方
SELECT EXP(2);#7.38905609893065 计算e的乘方
SELECT log(2);
SELECT LOG10(100);#以10为底的对数
SELECT RADIANS(360);#将角度转换为弧度
SELECT DEGREES(6.28);#将弧度转换为角度
SELECT sin(1);#计算正弦值
SELECT ASIN(3);#计算反正弦值
SELECT COS(10);#计算余弦值
SELECT ACOS(3);#计算反余弦值
SELECT TAN(12);#计算正切值
SELECT ATAN(12);#计算反正切值
SELECT cot(12);#计算余切值
MySQL:字符串函数:
SELECT ASCII('A');#65 返回字符串'A'的ASCII码
SELECT CHAR_LENGTH("laoshuaidami");#12 返回字符串s的字符数
SELECT CHARACTER_LENGTH("laoshuaidami");#12 返回字符串s的字符数
SELECT CONCAT("sql","java","php");#sqljavaphp 字符串的合并
SELECT FIELD("d","d","d","3");#1
SELECT FIELD("c","2",",","c","d");#3返回第一个字符串s在字符串列表中的位置
SELECT FIND_IN_SET("c","i,love,c");#3 返回在字符串s2中与s1匹配的字符串的位置
SELE