—创建数据库:
①最基本的创建方式:
create database 数据库的名
②创建数据库并设置字符集和校对规则:
create database 数据库的名 character set 字符集 collate 校对规则
eg:create database day10 character set utf8 collate utf8_general_ci
—删除数据库:
drop database 数据库的名
—修改数据库的字符集:
alter database 数据库的名 character set 字符集
eg: alter database day08 character set gbk;
—查看数据库:
①查看所有数据库:
show databases
②查看数据库的定义方式:
show create database 数据库的名字
③查看当前正在使用的数据库:
select database()
—选中数据库:
use 数据库的名字
—创建表:
create table 表名(
列名 列的类型 列的约束,
列名 列的类型 列的约束
)
eg:
create table test(
id int primary key auto_increment,
name varchar(20)
)
列的类型:
int char varchar() double timestamp 等(其实和java的基本类型差不多)
列的约束:
primary key 主键约束
unique : 唯一约束
not null 非空约束
自动增长 : auto_increment
—删除表:
drop table 表名
—修改表:
①添加列:
alter table 表名 add 列名 列的类型 列的约束条件
eg:alter table test add cd int not null
②修改列:
alter table 表名 modify 列名 列的类型 列的约束条件
eg:alter table test modify cd varchar(20) not null;
③修改列名:
alter table 表名 change 旧列名 新列名 列的类型 列的约束条件
eg:alter table test change cd ct varchar(20) not null;
④删除列:
alter table 表名 drop 列名
eg:alter table test drop ct;
⑤修改表的字符集:
alter table 表名 character set 字符集
eg:alter table test character set gbk;
⑥修改表名:
rename table 旧表名 to 新表名
eg:rename table test to tt
—查看表:
①查看所有表:
show tables
②查看表的定义结构:
show create table 表名
③查看表的结构:
desc 表名
插入:insert into 表名(列名,列名) values(值1,值2);
删除:delete from 表名 [where 条件]
修改:update 表名 set 列名='值' ,列名='值' [where 条件];
查询:select [distinct] * [列名1,列名2] from 表名 [where 条件]
as关键字: 别名
where条件后面:
关系运算符: > >= < <= != <>
--判断某一列是否为空: is null is not null
in 在某范围内
between...and
逻辑运算符: and or not
模糊查询: like
_ : 代表单个字符
%: 代表的是多个字符
分组: group by
分组之后条件过滤: having
聚合函数: sum() ,avg() , count() ,max(), min()
排序: order by (asc 升序, desc 降序)
分类表和商品表之间是不是有关系? 如果有关系,在数据库中如何表示这种关系
①分类表:
create table category(
cid int primary key auto_increment,
cname varchar(10),
cdesc varchar(31)
);
insert into category values(null,'手机数码','电子产品,黑马生产');
insert into category values(null,'鞋靴箱包','江南皮鞋厂倾情打造');
insert into category values(null,'香烟酒水','黄鹤楼,茅台,二锅头');
insert into category values(null,'酸奶饼干','娃哈哈,蒙牛酸酸乳');
insert into category values(null,'馋嘴零食','瓜子花生,八宝粥,辣条');
②商品表:
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp,
cno int
);
insert into product values(null,'小米mix4',998,null,1);
insert into product values(null,'锤子',2888,null,1);
insert into product values(null,'阿迪王',99,null,2);
insert into product values(null,'老村长',88,null,3);
insert into product values(null,'劲酒',35,null,3);
insert into product values(null,'小熊饼干',1,null,4);
insert into product values(null,'卫龙辣条',1,null,5);
insert into product values(null,'旺旺大饼',1,null,5);
我们可以通过添加外键的形式:
alter table product add foreign key(cno) references category(cid);
//无法插入进去
insert into product values(null,'好看的',1,null,12);
一对多 : 商品和分类
多对多: 老师和学生, 学生和课程
建表原则: 建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少要有两个外键,分别指向原来的那两张表
一对一: 班级和班长, 公民和身份证, 国家和国旗
主键约束: 默认就是不能为空, 唯一
唯一约束: 列面的内容, 必须是唯一, 不能出现重复情况, 为空
我们需要创建两个表:
create table class(
id int primary key auto_increment,
cname varchar(10)
)
insert into class value(null,'一班');
insert into class value(null,'二班');
insert into class value(null,'三班');
insert into class value(null,'四班');
create table student(
id int primary key auto_increment,
name varchar(10),
cid int
)
insert into student value(null,'张三',1);
insert into student value(null,'赵六',2);
insert into student value(null,'王五',3);
insert into student value(null,'小明',5);
查询:学生的全部信息:
隐示内连接:
select * from student as s,class as c where s.cid = c.id;
select * from student as s inner join class as c on s.cid = c.id;
显示查询的方式查询速度更快,原因是,显示内连接的查询条件和from一起得到查询后的结果,而where是from把所有的结果得到后,在根据where后面的条件进行筛选,所以速度慢一点
左外连接(关键字是: left outer join)
select * from student as s left outer join class as c on s.cid = c.id;
右外连接(right outer join)
select * from student as s right outer join class as c on s.cid = c.id;
什么是外连接:
如果是 左外连接(left outer join) 那么就以左边这个表为主,会把左边这个表的所有信息全部输出出来,然后在根据on后面的条件,如果条件成立,那么就在后面将内容输出,如果条件不成立,那么就以null输出,
右外连接(right outer join)跟上面一样,只不过是以右边那个表为主。
每页数据数据3
起始索引从0
第1页: 0
第2页: 3
起始索引: index 代表显示第几页 页数从1开始
每页显示3条数据
startIndex = (index-1)*3
第一个参数是索引
第二个参数显示的个数
select * from student limit 0,3;
select * from product limit 3,3;
sql语句的相关练习题
查看编码格式
SHOW VARIABLES LIKE 'character_set_%';
设置临时编码格式
set names 编码格式