MySQL数据库知识点
1.MySQL数据库的常用命令
--启动MySQL服务 net start mysql --连接数据库 mysql -u root -p123456 --创建数据库 create database 数据库名 --查看所有的数据库 show databases --切换数据库 use 数据库名 --删除数据库 drop database [if exists] 数据库名 --创建数据库表 CREATE TABLE [IF NOT EXISTS] '表名' ( '字段名' 列类型 [属性][索引][注释], '字段名' 列类型 [属性][索引][注释], ... '字段名' 列类型 [属性][索引][注释], [PRIMARY KEY ('字段名')] )[表类型][字符串设置][注释]--其中[表类型]ENGINE=INNODB [字符串设置]DEFAULT CHARSET=utf8[]表示可选操作 --查看数据库表 show tables --退出连接 exit --终止MySQL服务 net stop mysql
2.数据库的列类型
(1)数值
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节 常用的
bigint 较大的数据 8个字节
float 浮点数 4个字节
double 浮点数 8个字节
varchar 可变字符串 0-65535 常用的变量 String
tinytext 微型文本 2^8-1
text
datetime YYY-MM-DD HH:mm:ss 最常用的时间格式
timestamp 时间戳 1970.1.1到现在的毫秒数
通常用来设计唯一的主键--index,必须是整数类型
假设设置为not null,如果不给它赋值,就会报错
INNODB 默认使用
MYISAM 早些年使用
| MYISAM | INNODB | |
|---|---|---|
| 事务支持 | 不支持 | 支持 |
| 不支持 | 支持 | |
| 外键约束 | 不支持 | 支持 |
| 全文索引 | 支持 | 不支持 |
| 表空间的大小 | 较小 |
常规使用操作
MYISAM 节约空间 速度较快
INNODB 安全性高,事务的处理,多表多用户操作
在物理空间存在的位置
例子:
1)修改约束:alter table 表名 modify 字段名 列属性[]
例子:alter table teacher1 modify age varchar(11)
2)字段重命名:alter table 表名 change 旧名字 新名字 列属性[]
例子:
例子:
例子:
--插入语句 insert into ‘表名’(‘字段名1’,‘字段名2’,...) values(‘值1’),(‘值2’),... --例:insert into ‘grade’ (‘gradename’) values('大四')
--一般写插入语句,一定要数据和字段一一对应
--插入多个字段
insert into 'grade'('gradename')
values('大二'),('大三')
insert into 'student'('name','pwd','sex')
values('张三','123456','男'),('李四','aaaa','男')
(2)updata(修改)
--修改学员的名字,带了条件 updata 'student' set 'name'='张三' where id=1; --不指定条件的情况下,会改动所有表 updata 'student' set 'name'='狂神'; --语法 updata '表名' set '属性'=‘new_value’,... [where 条件] --修改多个属性,用,隔开 updata 'student' set 'name'='狂神',‘email’='152462455@qq.com' where id=1;
条件:where 子句 运算符 id等于某个值,大于某个值,在某个区间内修改
| 含义 | 范围 | 结果 | |
|---|---|---|---|
| = | 等于 | ||
| <>或!= | 不等于 | ||
| > | |||
| < | |||
| <= | |||
| >= | |||
| between...and... | 在某个范围内 | [2,5] | |
| and | &&与 | ||
| or | ||或 |
--通过多个条件定位数据 updata 'student' set 'name'='长江七号' where 'name'='狂神' and 'sex'=‘女’; --修改的新值,可以是一个具体的值,也可以是一个变量 updata 'student' set 'birthday'=current_time where 'name'='长江七号'
and 'sex'=‘女’;
(3)delete(删除)
语法:
delete from '表名' [where 条件]
--删除数据,没有条件,会全部删除 delete from 'student' --删除指定数据 delete from 'student' where id=1;
truncate命令
作用:完全清空一个数据库表,表的结构和索引约束不会变
语法:truncate table ‘表名’
delete和truncate的区别
相同点:都能删除数据,都不会删除表的结构
不同点:truncate重新设置自增列,计数器会归零
truncate不会影响事务
delete不会影响自增
7.DQL语言
数据查询语言
所有的查询操作都用它 select
简单的查询,复杂的查询都能做
数据库中最核心的语言,最重要的语句
(1)指定查询字段
--查询全部的学生 select 字段 from 表 select * from student --查询指定字段 select 'StudentNo','StudentName' from student --别名, 给结果取一个名字 as 可以给字段起别名,也可以给表起别名 select 'StudentNo' as 学号,'StudentName' as 学生姓名 from student as s --函数 concat(a,b)(连接字符串) select concat('姓名:',StudentName) as 新名字 from student
语法:
select 字段,... from 表名
有的时候,列名字不是那么见名知意,我们会起别名,字段名 as 新名字或表名 as 新名字
(2)distinct(去重)
作用:去除查询出来的结果中重要的数据,只显示一条
--查询一下有哪些学生参加了考试,成绩 select * from result --查询全部的考试成绩 select 'StudentNo' from result --查询有哪些学生参加了考试 select distinct 'StudentNo' from result --发现重复数据,去重
select version() --查询系统版本(函数) select 100*3-1 as 计算结果 --用来计算表达式(表达式) select @@auto_increment --查询自增的步长(变量) --学员考试成绩+1分查看 select 'StudentNo','StudentResult'+1 as '提分后' from result 数据库中的表达式:文本值,列,null, 函数,计算表达式,系统变量... select '表达式' from 表名
(3)where条件子句
作用:检索数据中符合条件的值
搜索的条件由一个或者多个表达式组成!结果为布尔值
逻辑运算符
| 语法 | 描述 | |
|---|---|---|
| and && | a and b a&&b | 逻辑与 |
| or || | a or b a||b | 逻辑或 |
| not ! | not a !a | 逻辑非 |
--where select 'StudentNo','StudentResult' from result --查询考试成绩在95-100分之间的 select 'StudentNo','StudentResult' from result where StudentResult>=95 and studentResult<=100 --and && select 'studentNo','studentresult' from result where studentResult>=95 && studentResult<=100 --模糊查询 select 'studentNo','studentResult' from result where studentResult between 95 and 100 --除了1000号学生以外的同学的成绩 select 'studentNo','studentName' from result where studentNo!=1000 select 'studentNo','studentName' from result where not studentNo=1000
模糊查询:比较运算符
| 语法 | 描述 | |
|---|---|---|
| is null | a is null | |
| is not null | a is not null | |
| between | a between b and c | 若a在b和c之间,结果为真 |
| like | a like b | SQL匹配,如果a 匹配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 'studentNo','studentName' from student where studentName like '%嘉%' --in(具体的一个或者多个值) --查询1001,1002,1003号学员 select 'studentNo','studentName' from student where studentNo in(1001,1002,1003) --查询学生 select 'studentNo','studentName' from student where address in ('安徽','河南洛阳'); --null not null --查询地址为空的学生 为空 select 'studentNo','studentName' from student where address='' or address is null --查询有出生日期的同学 不为空 select 'studentNo','studentName' from student where BornDate is not null --查询没有出生日期的同学,为空 select 'studentNo','studentName' from student where BornDate is null
(4)联表查询
--链表查询 join --查询参加了考试的同学(学号,姓名,科目编号,分数) select * from student select * from result /*思路 1.分析需求,分析查询的字段来自那些表,(多个表——连接查询) 2.确定使用那种连接查询 7种 确定交叉点(两个表中那个数据是相同的) 判断条件:学生表中的studentNo=成绩表中的studentNo */ --内连接 select s.studentNo,studentName,subjectNO,studentResult from student as s inner 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 --left join 左连接 select s.studentNo,studentName,subjectNO,studentResult from student as s left join result as r on s.studentNo=r.studentNo --查询缺考的同学 select s.studentNo,studentName,subjectNO,studentResult from student as s left join result as r on s.studentNo=r.studentNo where studentResult is null --思考题(查询参加考试的同学信息,学号,学生姓名,科目名,分数) /*思路 1.分析需求,分析查询的字段来自那些表,student, result , subject(连接查询) 2.确定使用那种连接查询 确定交叉点 判断条件 */ select s.studentNo,studentName,subjectName,studentResult from student as s right join result as r on r.studentNo=s.studentNo inner join subject as sub on r.subjectNo=sub.subjectNo
--排序:升序 asc, 降序 desc --order by 通过那个字段排序 --查询的结果根据成绩降序排序 select s.studentNo,studentName,subjectName,studentResult from student as s inner join result as r on r.studentNo=s.studentNo inner join subject as sub on r.subjectNo=sub.subjectNo where subjectName='数据库结构-1' order by studentResult desc
select完整的语法
select [all | distinct] (*| table.* | [table.field1[as alias1][.table.field2][as alias2]][...]) from table_name[as table_alias] [left|right|inner join table_name] --联表查询 [where....] --指定结果需满足的条件 [group by...] --指定结果按照哪几个字段来分组 [having] --过滤分组的记录必须满足的次要条件 [order by...] --指定查询记录按什么排序 [limit ([offset.]row_count | row_countOFFSET offset)]; --指定查询的记录从哪条至哪条

浙公网安备 33010602011771号