JavaWeb_day8_MySQL单表和多表

1.关闭和启动mysql

在命令行窗口输入:net   start   mysql(启动mysql)

                                 net   stop   mysql(关闭mysql)

2.登录mysql

在命令行窗口输入:mysql    -u  root(用户名)  -p(注意不要带分号;)

再输入密码

3.SQL语句

是什么:结构化查询语句。关系数据库语言的国际标准

分类:

         数据定义语言DDL:用来定义数据库对象:数据库database,表table,列colum等。关键字:创建create,修改alter,删除drop等(结构)

          数据操作语言DML:用来对数据库中表的记录进行更新。关键字:插入insert,删除delete,更新update等(数据)

         数据查询语言DQL:用来查询数据库中表的记录。关键字:select,from,where等

          数据控制语言DCL:用来定义数据库的访问权限和安全级别及创建用户,关键字:grant等

4.数据库的操作

(1)创建数据库

create database 库名;

create database 库名 character set 编码(中文utf8);

(2)删除数据库

drop database 库名;

(3)查看所有数据库

show databases;

(4)查看一个数据库结构(可以看到表的字符集)

show  create database  库名;

(5)使用数据库

use 库名;

(6)查看当前正在操作的数据库

select database();

5.表的操作

(1)创建表

create table 表名(

字段名   类型(长度)  [约束],

字段名   类型(长度)  [约束],

字段名   类型(长度)  [约束]

);

单表约束:

主键约束:primary key,要求被修饰的字段:唯一和非空

唯一约束:unique,要求被修饰的字段:唯一

非空约束:not null,要求被约束的字段:非空

(2)查看表

查看数据库中的所有的表:show tables;

(3)查看表的结构

查看表的结构:desc 表名;

(4)删除表

drop table 表名;

(5)修改表

添加一列(也就是添加一个字段)

alter table 表名  add   字段名  类型(长度)  [约束]

例:alter table user add usex varchar(2);

修改字段的类型(长度  约束)

alter  table  表名  modify  要修改的字段名  类型(长度) [约束]

例: alter table user modify usex varchar(4);

修改字段名

alter table  表名  change  旧字段名  新字段名  类型(长度) [约束]

例: alter table user change usex uage int(5) not null;

删除字段

alter table 表名  drop 字段名;

例:alter table user  drop uage;

修改表名

rename  table  表名  to  新表名;

例:rename  table user1  to  user;

修改表的字符集

alter  table  表名  character set 字符集;

6.对数据库表记录进行操作(修改):

插入记录:insert

语法:

(1)向表中某些字段插入值

insert  into  表名(字段名1,字段名2,字段名3...)values(值1,值2,值3...);

例:insert into user(uname,upassword,uid)values('王五','1234',null);         //uid为自增长,所以写null也可以

(2)向表中所有字段插入值

insert  into  表名   values(值1,值2,值3...);         //必须为每个字段设置值

查看表中所有的数据:

select * from 表名;

插入数据中文乱码问题的解决:

如果创建数据库时没有指定编码为utf8,那么向表格插入数据为中文时,会出现中文乱码问题,

解决办法:

在cmd中输入net   stop  mysql   关闭mysql

找到mysql安装目录下的my.ini文件(有的版本没有这个文件,只有my-default.ini文件,那么就将这个文件重命名为my.ini文件)在文件中在[mysqld]前加,

[mysql]

port=3306

default-character-set=gbk

后加

character-set-server=gbk

其他的不要动

重启mysql就可以了(在cmd中输入 net  start   mysql)

到Mysql安装目录下的My.ini文件,将里面的所有utf8编码改成gbk,保存,重启mysql,再插入中文数据,不会出现乱码了,OK了。

就可以解决中文乱码的问题了

更新(修改)记录:update

语法:

不带条件的:update  表名  set  字段名=值,字段名=值......;   //将该记录的所有的值都改变

带条件的:update  表名  set  字段名=值,字段名=值.....where 条件;

注意:值如果是字符串或者日期需要加‘’;

例: update user set uname='wang'where uname='王五';

删除记录:delete

语法:

带条件:delete   from  表名  where  条件;

例:delete from user where uid=4;

注意:删除后uid不会重置,也就是说如果被删除了,主键uid如果是自增长的不会从1开始,会接着以前的记录增长

不带条件:delete   from  表名;//将删除表中的所有记录

删除方式delete和truncate的区别:

delete删除是一条一条的删除记录,配合事物,可以将删除的数据找回。

例:

truncate删除是将表摧毁,然后新建一个一模一样的表,删除的数据无法找回。

用法:truncate table 表名;

用truncate删除表时,添加数据时,是从1开始的,但delete不是

数据库表查询操作

简单查询:

语法:

查具体的字段:select 字段名,字段名...from  表名 [where 条件];、

例:SELECT pid,pname from product WHERE pid=5;

查询所有的字段:select  *  from  表名 [where 条件];

使用别名:as可不写

SELECT * FROM product as p;(表别名)

SELECT pid,pname name from product;(字段(列)别名)

去掉重复值:

SELECT DISTINCT(price) FROM product;

将所有商品价格加10:

SELECT pid,pname,price+10 FROM product;

条件查询:where

SELECT * from product WHERE pid=11;

SELECT * from product WHERE pid<>1;  //<>代表的是不等于

SELECT * from product WHERE price>500;

SELECT * from product WHERE pname LIKE '%强%';

like使用占位符_和%(_代表一个字符,%代表任一个字符)

SELECT * from product WHERE pid IN(1,3,5);

in代表在某一个范围内获取值

就相当于SELECT * from product WHERE pid=1 OR pid=3 OR pid=5;  //or代表的是多个条件任意一个成立,and代表多个条件同时成立,not代表不成立

排序查询:order by

SELECT * FROM product ORDER BY price DESC;    //ORDER BY排序,asc -升序,desc-降序

例:SELECT * FROM product WHERE pname LIKE  '%士%'  ORDER BY price DESC;

聚合查询:

常用的聚合函数:求和sum()   平均avg()    最大值max()   最小值min()   计数count()

例:SELECT COUNT(*)FROM product;   //统计所有的个数

       SELECT avg(price)  FROM product;    //统计价格的平均数

       注:聚合函数不统计null值

分组查询:group by

SELECT cid,COUNT(*) FROM product GROUP BY cid;

SELECT cid,AVG(price) FROM product GROUP BY cid HAVING AVG(price)>2000;     //分组后,需要条件查询用having,不能使用where

查询操作的顺序:

select    //一般跟在这个后面的都是要查询的字段

from        //要查询的表

where

group by

having    //分组后带有条件只能使用having

order by    //必须放在最后面

Limit子句可以被用于强制 SELECT 语句返回指定的记录数。Limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。

  //初始记录行的偏移量是 0(而不是 1):
  mysql> SELECT * FROM table LIMIT 5,10; //检索记录行6-15

  //为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
  mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last

  //如果只给定一个参数,它表示返回最大的记录行数目。换句话说,LIMIT n 等价于 LIMIT 0,n:
  mysql> SELECT * FROM table LIMIT 5;     //检索前 5 个记录行

外键

语法:alter    table    从表   add foreign key(从表外键字段名)   references  主表名(主表的主键);

 alter table product add foreign key(category_id)references category(cid);

表关系:

一对多

多对多

两张表都是主表,第三张表为从表,提供两个字段,都是外键

 多表查询

交叉连接查询(得到的是两个表的乘积    -----一般不会用)

 select * from category,product;

内连接查询(使用的是关键字inner   join   ----inner可以省略)

      隐式内连接       select * from category,product where category_id=cid;

      显式内连接      select * from category  inner join product on cid=category_id;

外链接查询(使用的是关键字outer  join   ------outer可以省略)

      左外连接    select * from  category left join product on cid=category_id;

      右外连接     select * from  category right join product on cid=category_id;

内连接和外连接的区别

子查询

一条select语句作为另一条select语法一部分

 select * from product where category_id=(select cid from category where cname='化妆品');

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值