[关闭]
@Beeder 2018-03-13T22:20:16.000000Z 字数 6419 阅读 712

MySql 基本指令

MySQL


  1. sql的分类:
  2. DDL:数据定义语言
  3. 操作对象:数据库和表
  4. 关键词:create alter drop
  5. DML:数据操作语言
  6. 操作对象:记录
  7. DQL:数据查询语言(非官方)
  8. DCL:数据控制语言
  9. 操作对象:用户 事务 权限

登入MySql

  1. //登录数据库
  2. mysql -uroot -p

DDL:数据定义语言

    操作对象:数据库和表
    关键词:create alter drop

关键字说明

  1. truncate 清空
  2. auto_increment 自增
  3. 要求:
  4. 1.被修饰的字段类型支持自增. 一般int
  5. 2.被修饰的字段必须是一个key 一般是primary key

常用指令

  1. //查看数据库列表
  2. show databases;
  3. //创建数据库
  4. create database 库名;
  5. //使用数据库
  6. use 库名;
  7. //查看数据表
  8. show tables;
  9. //创建表
  10. create table 表名(字段描述,字段描述);
  11. //例如:
  12. create table user(id int primary key auto_increment,
  13. username varchar(20));
  14. //查看表结构:
  15. desc 表名;
  16. //修改表名
  17. alter table 旧表名 rename to 新表名;
  18. //例如:
  19. alter table user1 rename to user2;
  20. //添加字段:
  21. alter table 表名 add [column] 字段描述;
  22. //例如:
  23. alter table user add password varchar(20);
  24. //删除字段:
  25. alter table 表名 drop 字段名;
  26. //例如:
  27. alter table user drop pwd;
  28. //删除表:
  29. drop table 表名;
  30. //例如:
  31. drop table user;

数据库操作

  1. //查看数据库列表
  2. show databases;
  3. //创建数据库
  4. create database 库名;
  5. //使用数据库
  6. use 库名;
  7. //删除数据库
  8. drop database 库名;

数据表操作

查看表结构

  1. //1、查看表结构:
  2. desc 表名;
  3. //例如:
  4. desc user;
  5. //2、查看建表语句:
  6. show create table 表名;
  7. //例如:
  8. show create table user;

创建数据表

  1. //创建表
  2. create table 表名(字段描述,字段描述);
  3. //例如:
  4. create table user(id int primary key auto_increment,username varchar(20),password varchar(20));

修改数据表

  1. //修改表
  2. //1、修改表名:
  3. alter table 旧表名 rename to 新表名;
  4. //例如:
  5. alter table user1 rename to user2;
  6. //2、添加字段:
  7. alter table 表名 add [column] 字段描述;
  8. //例如:
  9. alter table user add password varchar(20);
  10. //3、修改字段名:
  11. alter table 表名 change 字段名称 新字段描述;
  12. //例如:
  13. alter table user change password pwd varchar(20);
  14. //4、修改字段描述:
  15. alter table 表名 modify 字段名称 字段类型 [约束];
  16. //例如:
  17. alter table user modify pwd int;
  18. //5、删除字段:
  19. alter table 表名 drop 字段名;
  20. //例如:
  21. alter table user drop pwd;

清空数据表

  1. //清空表:
  2. //干掉表,重新创建一张空表
  3. truncate 表名;
  4. //例如:
  5. truncate user;

删除数据表

  1. //删除表:
  2. drop table 表名;
  3. //例如:
  4. drop table user;

DML:数据操作语言

操作对象:记录(行)
关键词:insert update delete

数据操作:

插入

  1. //格式1:
  2. insert into 表名 values(字段值1,字段值2...,字段值n);
  3. //注意:
  4. //默认插入全部字段,
  5. //必须保证values后面的内容的类型和顺序和表结构中的一致
  6. //若字段类型为数字,可以省略引号
  7. //例如:
  8. insert into user values(1,'tom');
  9. insert into user values('2','tom');
  10. insert into user values('3'); //错误的
  11. //格式2:
  12. insert into 表名(字段名,字段名1...) values(字段值,字段值1...);
  13. 注意:
  14. //插入指定的字段
  15. //必须保证values后面的内容的类型和顺序和表名后面的字段的类型和顺序保持一致.
  16. //例如:
  17. insert into user (username,id) values('jack',4);
  18. insert into user (username) values('jack',5); //错误的

修改

  1. //格式:
  2. update 表名 set 字段名=字段值,字段名1=字段值1... [where 条件];
  3. //例如:
  4. update user set username='jerry' where username='jack';

删除

  1. //格式:
  2. delete from 表名 [where 条件];
  3. //例如:
  4. delete from user where id = '2';

DQL:数据查询语言

    关键词:select

关键字说明

  1. distinct //去重复操作
  2. where //对分组前的数据进行过滤
  3. having //对分组后的数据进行过滤
  4. asc //升序
  5. desc //降序

查询操作:

  1. //格式:
  2. select ... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段 ase|desc

简单查询

  1. //例如:
  2. //查询所有信息:
  3. select * from user;
  4. //查询指定信息;
  5. select name,age from user;
  6. //去重查询
  7. select distinct age from user;
  8. //将年龄+10进行显示
  9. //-- 可以在查询的结果之上进行运算,不影响数据库中的值
  10. //-- 给列起别名 格式: 字段名 [as] 别名
  11. select age+10 '新年龄' from user;

条件查询

  1. /*
  2. where后的条件写法:
  3. * > ,<,=,>=,<=,<>,!=
  4. * like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
  5. */
  6. // * in在某个范围中获得值.
  7. select * from user where age in(38,68,98);
  8. select * from user where age = 38 or name = 小明 or name=小红;
  9. // * between 较小值 and 较大值
  10. select * from user where age between 50 and 70;
  11. /*
  12. -- 模糊匹配
  13. -- 格式: 字段名 like "匹配规则";
  14. -- 匹配内容 %
  15. "龙" 值为龙
  16. "%龙" 值以"龙"结尾
  17. "龙%" 值以"龙"开头
  18. "%龙%" 值包含"龙"
  19. -- 匹配个数 "__" 占两个位置
  20. */
  21. select * from user where name like "%新%";

排序查询

  1. //1.查询所有用户,按年龄进行排序.(asc-升序,desc-降序)
  2. select * from user order by age desc;
  3. //2.查询名字有“新”的用户的信息并且按年龄降序排序.
  4. select * from user where name like '%新%' order by age
  5. desc;

聚合函数

  1. /// 对一列进行计算 返回值是一个,忽略null值
  2. // * sum(),avg(),max(),min(),count();
  3. //1.获得所有用户的年龄的总和:
  4. select sum(age) from user;
  5. //2.获得用户表中年龄的平均数:
  6. select avg(age) from user;
  7. // -- round(值,保留小数位)
  8. select round(avg(age),2) from user;
  9. //3.获得用户表中有多少条记录:
  10. select count(*) from user;

分组

  1. 使用group by
  2. 1.根据cno字段分组,分组后统计商品的个数.
  3. select cno,count(*) from products group by cno;
  4. 2.根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
  5. select cno,sum(pnum) from products group by cno;
  6. select cno,sum(pnum) from products group by cno having sum(pnum)>200;
  7. /*
  8. 注意:
  9. where和having区别:
  10. 1.where 是对分组前的数据进行过滤 ;having 是对分组后的数据进行过滤
  11. 2.where 后面不能使用聚合函数,having可以
  12. *?

多表查询

笛卡尔积

  1. //多表联合查询
  2. select a.*,b.* from a,b;

内连接

  1. //格式1:显式的内连接
  2. select a.*,b.* from a [inner] join b on ab的连接条件
  3. //例如:查询用户的订单,没有订单的用户不显示
  4. select user.*,orders.* from user join orders on user.id=orders.user_id;
  5. //格式2:隐式的内连接
  6. select a.*,b.* from a,b where ab的连接条件
  7. //例如:
  8. select user.*,orders.* from user ,orders where user.id=orders.user_id;

外连接

左外连接

  1. //展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b)
  2. //符合条件则展示出来,不符合以null值展示.
  3. select a.*,b.* from a left [outer] join b on 连接条件;
  4. //例如:user在左
  5. select user.*,orders.* from user left join orders on user.id=orders.user_id;

右外连接

  1. //先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b)
  2. //符合条件则展示出来,不符合以null值展示.
  3. select a.*,b.* from b right [outer] join a on 连接条件;
  4. //例如: orders 在右
  5. select orders.*,user.* from user right join orders on user.id=orders.user_id;

子查询

    一个查询依赖另一个查询.

说明

数据类型

  1. java mysql
  2. byte tinyint
  3. short smallint
  4. int int
  5. long bigint
  6. char/String varchar|char
  7. varchar:可变长度 mysql的方言 varchar(20):
  8. 存放abc 只会占用三个
  9. char:固定长度 char(20) 存放abc 占用20
  10. boolean tinyint|int 代替
  11. float|double float|double
  12. 注意:
  13. double(5,2):该小数长度为5个,小数占2 最大值:999.99
  14. java.sql.Date date 日期
  15. java.sql.Time time 时间
  16. java.sql.Timestamp timestamp 时间戳
  17. 若给定值为null,数据库会把当前的系统时间存放到数据库中
  18. datetime 日期+时间
  19. java.sql.Clob(长文本) mysql的方言(text)
  20. java.sql.Blob(二进制) blob

需要注意的数据类型

  1. double(5,2): 该小数长度为5个,小数占2 最大值:999.99
  2. varchar|char
  3. varchar:可变长度 mysql的方言 varchar(20):
  4. 存放abc 只会占用三个
  5. char:固定长度 char(20) 存放abc 占用20
  6. timestamp 时间戳
  7. 若给定值为null,数据库会把当前的系统时间存放到数据库中
  8. datetime 日期+时间

约束

    作用:
    为了保证数据的有效性和完整性

主键约束(primary key)

    被修饰过的字段唯一非空
    注意:一张表只能有一个主键,这个主键可以包含多个字段      
  1. //方式1:建表的同时添加约束
  2. //格式: 字段名称 字段类型 primary key
  3. create table user(id int primary key ,
  4. username varchar(20));
  5. //方式2:建表的同时在约束区域添加约束所有的字段声明完成之后,就是约束区域了
  6. //格式: primary key(字段1,字段2)
  7. create table pk01(
  8. id int,
  9. username varchar(20),
  10. primary key (id) );
  11. //方式3:建表之后,通过修改表结构添加约束
  12. //格式:alter table pk02 add primary key(字段名1,字段名2..);
  13. create table pk02(
  14. id int,
  15. username varchar(20)
  16. );
  17. alter table pk02 add primary key(id,username);
  18. //测试
  19. insert into pk02 values(1,'tom'); //-- 成功
  20. insert into pk02 values(1,'tomcat'); //-- 成功
  21. insert into pk02 values(1,'tomcat'); //-- 失败

唯一约束(unique)

    被修饰过的字段唯一,对null不起作用
  1. //方式1:建表的同时添加约束
  2. //格式: 字段名称 字段类型 unique
  3. create table un(
  4. id int unique,
  5. username varchar(20) unique
  6. );
  7. //测试:
  8. insert into un value(10,'tom'); //-- 成功
  9. insert into un value(10,'jack'); //-- 错误
  10. // Duplicate entry '10' for key 'id'
  11. insert into un value(null,'jack'); //-- 成功
  12. insert into un value(null,'rose'); //-- 成功
  13. //方式2:建表的同时在约束区域添加约束
  14. //格式:unique(字段1,字段值2...)
  15. //方式3:建表之后,通过修改表结构添加约束
  16. //格式:alter table 表名 add unique(字段1,字段2);

非空约束(not null)

    特点:被修饰过的字段非空
  1. 方式:
  2. create table nn(
  3. id int not null,
  4. username varchar(20) not null);

外键约束(foreign key)

    添加了外键约束之后有如下特点:
        1.主表中不能删除从表中已引用的数据
        2.从表中不能添加主表中不存在的数据

开发中处理一对多(例:用户和订单):
在多表中添加一个外键,名称一般为主表的名称_id,字段类型一般和主表的主键的类型保持一致,
为了保证数据的有效性和完整性,在多表的外键上添加外键约束即可.

  1. //-- 创建用户表
  2. create table user(
  3. id int primary key auto_increment,
  4. username varchar(20)
  5. );
  6. //-- 创建订单表
  7. create table orders(
  8. id int primary key auto_increment,
  9. totalprice double,
  10. user_id int
  11. );
  12. //格式:
  13. alter table 多表名称 add foreign key(外键名称) references 一表名称(主键);
  14. //例如:
  15. alter table orders add foreign key(user_id) references user(id);
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注