mysql基础一

数据库相关操作

--登录
PATH=$PATH:/usr/local/mysql/bin
mysql -u帐号 -p密码
mysql -uroot -p123456

--远程登录
MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格)

C:\>mysql -h localhost -u root -p123
MySQL 连接远程数据库(192.168.0.201),端口“3306”,用户名为“root”,密码“123”

C:\>mysql -h 192.168.0.201 -P 3306 -u root -p123

--创建数据库
create database 数据库名字
create database hb character set utf8;

--删除数据库
drop database 数据库名字;
drop database hb;

--修改数字库编码
alteer database 数据库名字 character set  编码
alter database hb character set gbk;


--查看数据库
show databases; 查看所有数据库列表

show create database 数据库名字; 查看数据库结构
show create database hb;




表结构的操作

--创建表
create table 表名(
列1,类型1,约束1,
列2,类型2,约束2,
列3,类型3,约束3
);

约束:
     主键约束:primary key
     维一约束:unique
     非空约束:not null
     外键约束:foreign key
     
     自动增长:auto_increment
外键约束:
 alter table product add foreign key(cno)  references  category(cid);
      
      
     
选择hb数据库: use hb;
    
    create table stu(
    sid int primary key auto_increment,
    sname varchar(20),
    sage int
    );   
 
   create table category(
  cid int primary key auto_increment,
    time timestamp,
  cname varchar(20)
  );
  
  create table product(
  pid int primary key auto_increment,
  name varchar(20),
  price double ,
  time timestamp,
  pdesc varchar(100),
  cno int,
  foreign key(cno) references category(cid)
  );
  

--删除表
drop table 表名;
drop table stu;

--修改表(add ,modify,change)
   
   新增列
   alter table 表名 add 列的名字 列的类型  列的约束
   alter table stu add sex varchar(2); 
  
   
   修改列
   alter table 表名 modify 列名 列的类型 列的约束;
   alter table stu modify sex int;
   
   修改列名
   alter table 表名 change 旧列名  新列名 列的类型 列的约束;
   alter table stu change sex ssex varchar(2);
   
   删除列
   alter table 表名 drop 列名
 
   修改表的编码
   alter table 表名 character set 编码
   
   修改表名
   rename table 旧表名 to 新表名

--查看表
	查看所有表
  show tables;
  
  查看表创建语句
  show create table 表名;
  show create table stu;
  
  查看结构
  desc 表名
  desc stu;
  
  

表的CRUD

--插入数据
  
insert into 表名(列1,列2) values(列1值,列2值);

insert into category(cname) values('手机');
insert into category(cname) values('箱包'); 
insert into category(cname) values('烟酒'); 
insert into category(cname) values('饼干'); 
  
 insert into product values(null,'小米mix',1999,null,1);
 insert into product values(null,'小米平板',1599,null,1);
 insert into product values(null,'爱马仕皮箱',112,null,2);
 insert into product values(null,'利群',15,null,3);
 insert into product values(null,'中华',50,null,3);
 insert into product values(null,'呵呵饼干',12,null,4);
 
--修改数据
update 表名 set 列名=值,列名=值;

--删除数据
delete from 表名  [where 条件]

truncate table 表名;先删除表,再重建表


--查询
  能用格式
   select [distinct] [*] [例1,例2] from 表名 where 条件 group by ..having 条件过滤 order by 排序

   查询所有列
   select * from  product; 
   
   只查询price
   select price from product; 
   
   //给price起个别名
   select price as 商品价格 from product ;
   
   //给product表起个别名
   select p.price as 商品价格 from product as p;

   聚合函数
   求和:sum
   select sum(price)  from product;
   
   求平均值:avg()
    select avg(price)  from product;
   
   统计数量:count()
   select count(*) from product;
   
   求最大值:max()
   求最小值:min();
   当前使用的数据库: select database();
   
   排序 order by 
     降序:desc 
     升序:asc
   
   select * from product  order by price desc;
   select * from product  order by price asc;
   
   
   

建表原则

 1.一对一(班级和班长,国家和国旗)
 
   方案一:合并成一张表,
   方案二:转成一对多
   
 2.一对多(商品和分类)
   在多的一方添加一个外键,指向一的一方的主键

 3.多对多 (老师和学生,学生和课程)
   创建中间表,将多对多的关系拆成一对多的关系,中间表至少要有两个外键,分别指向原来的那两张表

网上商场实例


表一:用户表(用户id,用户名,密码。手机号)
表二:分类表(分类id,分类名称)
表三:商品表(商品id,商品名称,商品描述,商品价格,商品库存,外键分类id)
表四:订单表(订单编号,外键用户id,总价,地址)
表五:订单项(中间表)(订单编号,商品id,订单项总价,商品数量)

--用户表
create table user(
 uid int primary key auto_increment,
 username varchar(10) ,
 password varchar(10) ,
 phone varchar(20) ,
 create_time timestamp
);
insert into user values(null,'huangbao','123456','13076948788',null);


--分类表
create table category(
cid int primary key auto_increment,
cname varchar(20),
create_time timestamp
);
insert into category values(null,'手机数码',null);
insert into category values(null,'鞋靴箱包',null);
insert into category values(null,'香烟酒水',null);
insert into category values(null,'酸奶饼干',null);
insert into category values(null,'馋嘴零食',null);

--商品表(商品id,商品名称,商品描述,商品价格,商品库存,外键分类id)
create table product(
 pid int primary key auto_increment,
 pname varchar(10),
 pdesc varchar(30),
 price double ,
 create_time timestamp,
  cno int ,
 foreign key(cno) references category(cid)
 
);
insert into product values(null,'小米mix4',null,998,null,1);
insert into product values(null,'锤子',null,2888,null,1);
insert into product values(null,'阿迪王',null,99,null,2);
insert into product values(null,'老村长',null,88,null,3);
insert into product values(null,'劲酒',null,35,null,3);
insert into product values(null,'小熊饼干',null,1,null,4);
insert into product values(null,'卫龙辣条',null,1,null,5);
insert into product values(null,'旺旺大饼',null,1,null,5);
INSERT INTO product VALUES(NULL,'耐克帝',null,10,null,null);
--表四:订单表(订单编号,外键用户id,总价,地址)
create table orders(
 oid int primary key auto_increment,
 sum double,
 address varchar(100),
 uno int ,
 create_time timestamp,
 foreign key(uno) references user(uid)
);

insert into orders values(null,200,'广东省深圳市',1,null);
insert into orders values(null,250,'江西省南昌市',1,null);


--表五:订单项(中间表)(订单编号,商品id,订单项总价,商品数量)
create table orderitem(
ono int ,
pno int ,
subsum double,
ocount int,
foreign key(pno) references product(pid),
foreign key(ono) references orders(oid)
);

--给1号订单添加商品 200块钱的商品
insert into orderitem values(1,7,100,100);
insert into orderitem values(1,8,101,100);

--给2号订单添加商品 250块钱的商品 ()
insert into orderitem values(2,5,35,1);
insert into orderitem values(2,3,99,3);


查询专题


--交叉连接查询 笛卡尔积

笛卡尔积 ,查出来是两张表的乘积 ,查出来的结果没有意义

select * from product,category;

过滤才有意义
select * from product,category where cno=cid;

--内联接查询

隐式内连接
select * from product p ,category c where p.cno =c.cid;

显示内联接
select * from product p inner join category c on p.cno =c.cid;

隐式内连接:在查询出结果后where
显示内联接:准备好条件再去查询。效率要高。

--左外连接
会将左表的数据全部查出来。如果右表没有数据会用null代替
select * from product p left outer join category c on p.cno=c.cid;

--右外连接
会将右表的数据全部查出来。如果左表没有数据不会显示
select * from product p right outer join category c on p.cno=c.cid;



-- 查询分类名称为手机数码的所有商品

子查询
select * from product where cno =(select cid from category where cname='手机数码');

-- 查询出(商品名称,商品分类名称)信息

//左连接
select p.pname,c.cname from product p left outer join category c on p.cno =c.cid;

//子查询
select p.pname,(select c.cname from category c where p.cno=c.cid) as 商品分类 from product p;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值