数据库知识补充
exists 存在 engine 引擎 comment注释
创建数据库时,如果数据库已经存在就报错
那就创建数据库的时候,判断数据库是否存在,不存在就创建
create database if not exists student;
特殊字符,关键字做数据库名,使用反引号将数据库名括起来
create database 'create';
create database '$%';
如果对这种数据库进行删除也要加引号
删除数据库
drop database if exists 'create'; 如果存在就删除,不存在也不会报错
//select *from stu where sno=(select sno from score group by sno having count(*)>=3);
默认创建的数据库是utf8类型的,创建别的类型的
create database xxx charset=gbk; 这样就创建了一个gbk类型的
数据库保存目录 一个数据库就是一个文件夹
PHPTutorial/Mysql/data/xxxxxx 在文件夹中有一个吧db.opt文件,此文件中设置数据库的字符集和校对集.
如果修改数据库保存路径
可以到PHPTutorial/Mysql 里面的 my.ini修改 这歌路径
datadir="D:/phpstudy/PHPTutorial/MySQL/data/"
只能修改数据库选项,数据库的选项只有字符编码
alter database student charset=字符编码;
alter database student charset=utf8; 数据库里没有杠 -
show create database student;
每个表必须只能有一个主键,主键的值不能重复,不能为空 不同的引擎存储和获取方式不一样 comment '备注'
create table students(
id int auto_increment primary key,
name varchar(20) not null,
'add' varchar(20) not null default '地址不详' /*如果什么也不输入默认插入地址不详*/
)engine=innodb;
default默认输入
如果不指定引擎 默认是innodb
如果不指定字符编码,默认和数据库编码一致
伪表 dual 作用 有些特定情况.没有表的参与,但是为了保证select语句的完整又必须要一个表名,这个时候就用伪表
select 10*10 as 结果 from dual;
union 将多个select语句结果集纵向联合起来
union的选项有两个 all显示所有数据 distinct去除重复的数据(默认)
结果自动合并的重复的记录
select cname from stu union select name from teacher; //默认去重
select cname from stu union all select name fron teacher; //加了all就是显示所有数据
union两边的select语句的字段个数必须一致
union两边的select语句的字段可以不一致,最终按select语句的字段名
union两天的select语句中的数据类型可以不一致
查询语句中选项有两个
1.all 显示所有数据
2.distinct 去除结果集中的重复数据
select all name from stu; //默认不去重
---去除重复的项
select distinct name from stu;
内连接 规则:返回两个表的公共记录
语法: select * from 表1 inner join 表2 on 表1.公共字段=表2.公共字段
定义另类名称 as可以省略不写 inner也可以不写省略 where写最后
select * from student t inner join score s on t.sno=s.sno where t.sname='王丽';
左外连接 以左边的表为准 (表一)
select * from 表1 left join 表2 on表1.公共部分=表2.公共部分;
右外连接 以右边的表为准 (表二)
select * from 表1 right join 表2 on表1.公共部分=表2.公共部分;
交叉连接 如果没有连接条件 返回笛卡尔积
如果有连接条件和内连接是一样的
语法:select * from 表1 cross join 表2;
例题:select * from stu cross join teacher;
[
自然内连接 natural join
自动判断条件连接,判断的条件是依据同名字段
select * from stu natural join score;
小结:1.表连接是通过同名字段来连接的
2.如果没有同名字段就返回笛卡尔积
3.同名的连接字段只显示一个,并且都放到最前面
]
using用来连接指定连接字段
select * from stu join score using(cno);
select * from student join score using(sno); /*取公共部分*/
using 的结果也会对公共字段进行优化,优化规则和自然连接一样
删除索引
drop index 索引名 on 表名
函数
数字类
--取随机数
select rand();
select * from stu order by rand();
--四舍五入round() 截取数据truncate() 向上取整ceil() 向下取整floor()
随机获取一条记录
select * from stu order by rand() limit 1;
浙公网安备 33010602011771号