MySQL基础知识二

DDL: 操作数据库,表,列(数据定义语言)
关键字:CREAT ALTER DROP 增 删 改
创建数据库:CREATE database
创建一个数据库并制定编码集:CREATE database 数据库名字 character set gbk;

查询数据库:SHOW databases;
查看定于数据库的信息:SHOW CREATE database 数据库名称;
+———-+—————————————————————+
| Database | Create Database |
+———-+—————————————————————+
| mydb2 | CREATE DATABASE mydb2 /!40100 DEFAULT CHARACTER SET gbk / |
+———-+—————————————————————+

删除数据库
DROP database 数据库名; mysql这个库绝对不能删除
ps: 删库之前需要备份(谨慎)

修改数据库
修改数据库的编码集 alter database 数据库名 character set utf8;
mysql> show create database mydb2;
+———-+—————————————————————-+
| Database | Create Database |
+———-+—————————————————————-+
| mydb2 | CREATE DATABASE mydb2 /!40100 DEFAULT CHARACTER SET utf8 / |
+———-+—————————————————————-+

其他:
使用某个数据库和改变使用的数据库
use 数据库名字
查询当前数据库 select database();
select database();
+————+
| database() |
+————+
| NULL |
+————+

表的操作:创建表
创建表: CREATE TABLE 表名{
列名1 列的数据类型 [约束],
列名2 列的数据类型 [约束],
…..
列名N 列的数据类型 [约束]
};
ps :创建表的时候需要大家换行书写,最后一行不要加逗号,小括号后加分号,
若在表中使用到了关键字
例如:创建一张订单表(order),但是order是数据库中的关键字(排序)
此时表名最好是使用x_order,就可以区分关键字
若需要列名使用order,此时可以使用()order`
ps:开发中一般x –>t代替—>table—>t_order
创建一张student表,记录学生的信息 id, name,age
create table t_student(
id INT,
name varchar(100),
age INT

);
ps: 数据库中表示字符串数据类型 char和varchar
区别: char取值范围0~255 varchar取值范围 0~65535
char(5) –>可以存储5个字符并且在内存空间存5个字节
不可变的
varchar(5) —>可以存储5个自古并且在内存空间实际存储自古个数的字节
例如: ‘1’—>1个字节
‘11’—>2个字节
可变的
无论是varchar还是char只要超过储存范围,都会被截取并且提示警告
一般情况下要存储字符串varchar

查看表中的字段信息 desc 表名;

mysql> desc t_table;
属性 类型 可以非空 主键 默认值 外键
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
+——-+————–+——+—–+———+——-+

在表中添加一条新的列 alter table 表名 add 列名 数据类型;

删除表中列(一次只能删除一列) alter table 表名 drop 列名;

更改表的名称 rename table 原表名 to 新表名;

查看表的细节(详细信息—>建表的细节) show crate table 表名;

修改表的字符集 alter table 表名 character set 字符集;

修改列名 alter table 表名 change 原有列名 新列名 数据类型;

删除表(删除表需要备份 谨慎) drop table 表名
创建一个person

表中的约束:(只能针对列进行约束)
1.非空约束 NOT NULL 不许当前类为空的内容
2.设置默认值 DEFAULT
3.唯一约束 在当前列中的内容必须是唯一的unique
4.主键 PRIMARY KEY–>primary 非空且唯一
5.主键自动增长 AUTO_INCREM
create table person(
id INT PRIMARY KEY AUTO_INCREM,
name varchar(50) NOT DEFAULT
)

DML操作
DML是针对表中的数据进行增,删,改等操作 不要和DDL混了
查询单独讲
ps:insert插入 update改 delete删
在MySQL中字符串类型和日期类型都需要用”引起来 空值是null

插入INSERT
语法 :
INSERT INTO 表名(列名1….) VALUES(列对应的值1….)
ps:1.列名和列值要一一对应
可以将插入表中的数据看做java中方法形参的赋值
2.值不要超过定义的长度
3.如果插入的是空值,使用null
4.插入的日期和字符串一定要使用”引起来

向表中插入数据:

 INSERT INTO emp(id,name,gender,birthday,money,infos) VALUES(1,'zhangsan','man','1995-10-01',10000,'my name is zhangsan,i like play');

 INSERT INTO emp(id,name,gender,birthday,money,infos) VALUES(2,'lisi','woman','1992-10-01',10080,'my name is lisi,i like play');
 INSERT INTO emp(id,name,gender,birthday,money,infos) VALUES(3,'王五','man','1992-2-03',1000.15,'我喜欢玩');
 存汉字可以改成gbk,可能会出现乱码

 select * from emp;

+——+———-+——–+————+———-+———————————+
| id | name | gender | birthday | money | infos |
+——+———-+——–+————+———-+———————————+
| 1 | zhangsan | man | 1995-10-01 | 10000.00 | my name is zhangsan,i like play |
| 2 | lisi | woman | 1992-10-01 | 10080.00 | my name is lisi,i like play |
+——+———-+——–+————+———-+———————————+

ps: 如何查看数据中的具体信息 show variables like ‘character%’;

show variables like ‘character%’;
+————————–+———————————————————+
| Variable_name | Value |
+————————–+———————————————————+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+————————–+———————————————————+
临时修改客户端和服务器编码集
character_set_client =gbk;
character_set_server =gbk;

mysql安装路径汇总 my.ini或conf --->设置一些值 永久修改编码

修改操作UPDATE
语法:
update 表名 SET 列名=列值…..;—->修改所有表中对应列的值
update 表名 SET 列名=列值 WHERE 列名 = 值;—->WHERE条件定位到那个列中

1.将所有员工的薪水修改为5000元   update emp set money=5000;
2.将姓名'zhangsan'的员工薪水修改为30000元   update set money=30000 where name ='zhangsan';
3.将姓名为'lisi'
4.将性别是man的员工薪水在原有基础上增加1000元   update emp set money=money+1000 where gender='man';

删除操作DELETE
语法:
DELETE FROM 表名;–>删除表(表中的数据)
DELETE FROM 表名 WHERE 列名=值 —>删除一条记录

1.删除表中id=3的记录   delete from emp where id=3;
2.删除表中所有的记录  delete from emp;
ps:使用delete这种方式删除表中的数据,表的结构还在,删除后的数据是可以找回的
3.truncate删除表中记录
ps: 使用truncate删除的表相当于直接DROP掉了
    若需要在使用就需要重新创建一个新表truncate删除的数据是不能找回的,但是删除速度快于delete

DQL操作(重点中的重点) data query language
数据库查询操作,DQL的操作语句不会对数据进行改变,而是将数据结果展示给用户
语法;
select 列名 from 表名 [WHERE–> GROUP BY–>HAVING –> ORDER BY —>LIMIT]

通过工具将表导入到数据库中,操作的第一张表是商品表
id –>商品id 主键
productName —>商品名称
dir_id —>商品分类编号
salePrice—>零售价格
supplier —>供货商
brand —> 品牌
cutoff –>折扣
costPrice –>成本价

.
简单查询
1.将product这张表中所有的数据都查询出来
可以使用*代表所有的列
select * from product;

  1. 将product表中商品的id,商品名称,零售价格查询出来
    select id,productName,salePrice from product;

排除重复—>关键字 DISTINCT(有区别的)
3.查询商品分类编号
select dir_id from product
GROUP BY dir_id;

查询商品编号,编号是不是有重复
select DISTINCT dir_id from product;
java–>set
使用了排重,使用了两列,只有两列数据是一样的时候才能被认为是同一条

实现数学运算查询
对NUMBER类型数据(小数和整数)可以使用运算符来创建表达式(+ -* /)
对DATE类型可以使用部分的算术运算符创建表达式(+ -)
运算符优先级
1.乘除高于加减 2.同级运算符的顺序是从左到右 3.表达式中使用括号 可以强行改变优先级

需求: 查询所有货品id,名称和批发价格(批发价格 = 零售价格*折扣)
ps:列名看做属性或者参数,使用类下面的数据进行计算时,直接使用类名即可
select id ,productName,salePrice*cutoff from product;

需求: 查询所有货品id,名称和各进50个的成本(成本= costPrice)
select id,productName,costPrice*50 from product;

    查询所有货品id,名称和个进50个的成本(成本= costPrice),并且每个运费成本是1元
  select id,productName,(costPrice+1)*50 from product;

设置列名的别名—> AS
1.改变列的标题头
2.用于表示计算的结果
3.用于列的别名存在
4.如果别名中使用了特殊字符或者强制大小写,或空格,都需要使用”单引号引起来
select id,productName,(costPrice+1)*50 as totalcostPrice from product;

ps:as是可以省略的,尽量不要省略

select id,productName,(costPrice+1)*50 totalcostPrice from product;

设置显示查询格式–>concat:
为了使用户浏览数据更加方便,此时我们可以使用一个关键字–>’concat函数’连接两个字符串

需求:查询商品的名字和零售价格 格式:XXX商品的零售价格为:
select CONCAT(productName,’商品的零售价格为:’,salePrice) as productPrice from product;

过滤查询:
语法:SELECT 列 FROM 表名 WHERE 子句限定(查询限定条件)
ps: WHERE是一个条件限定语句 WHERE后面会跟随着你所限定的条件
比较运算符: >大于 >= 大于等于 < 小于 <= 小于等于 = 等于 !=(<>) 不等于

需求:查询货品零售价格为119的所有货品信息
select * from product where salePrice=119;

需求:查询货品名称为’罗技G9X’的所有货品信息

select * from product WHERE productName=’罗技G9X’;

查询货品名称不为’罗技G9x’
select * from product where produceName !=’罗技G9X’;

select * from product where productName <>’罗技G9X’;

需求; 查询编号不等于2的货品信息
select * from product where dir_id <>2;

需求:查询货品名称,零售价格小于等于200的货品
select productName,salePrice from product WHERE salePrice <= 200;

需求: 查询id ,货品名称,批发价格(零售*折扣)大于350的货品
select id,productName, salePrice*cutoff from product where salePrice*cutoff >350;

select id,productName,salePrice*cutoff from product as pf where pf >350;

SQl中查询语句的顺序:
1.先执行from子句,确定是从哪一张表中做的查询
2.where子句,从表中直接筛选出符合条件的数据
3.select子句:从筛选之后的集中显示出某些类
4.ORDER BY子句: 对查询结果排序

逻辑运算符:
AND(&&) 组合的条件都为true时 返回值true
OR(||) 组合的条件只要有一个为true返回true
NOT(!) 若条件是false ,返回true

需求: 查询id,货品名称,批发价格在300~400之间的货品
select id,productName,salePrice*cutoff from product where salePrice*cutoff>=300 AND salePrice*cutoff<=400;

需求: 查询id,货品名称,分类编号为2,4的所有货品
select id,productName,dir_id from product where dir_id=2 OR dir_id = 4;

需求: 查询id,货品名称,分类编号不为2的所有商品
select id,productName,dir_id from product where dir_id !=2;
select id,productName,dir_id from product where NOT dir_id=2;

需求:查询id,货品名称,分类编号的货品零售价格大于等于250或者成本大于等于200的所有商品
select id,productName,dir_id,salePrice,costPrice from product where salePrice >=250 OR costPrice >=200 ;

ps:优先级关系
1等 所有的比较运算符 2等 NOT(取非) 3等 AND(&&) 4等 OR(||)

范围查询 BETWEEN AND
使用between运算符显示某一值的范围记录,这个操作符常见的使用在数字类型或者日期类型范围上
语法:
select 列 FROM 表名 WHERE 列 BETWEEN 最小值 AND 最大值
需求: 查询id,货品名称,批发价格在300~400之间的货品
select id,productName,salePrice*cutoff FROM product where salePrice*cutoff BETWEEN 300 AND 400;

使用IN运算符:
判断类的值是否存在指定的集合中
语法:
SELECT 列 FROM 表名 WHERE 列 IN(值1,值2)
需求: 查询id,货品名称,分类编号为2,4的所有货品
select id,productName,dir_id from product where dir_id=2 OR dir_id = 4;
select id,productName,dir_id from product where dir_id IN(2,4);
需求: 查询不为2,4的所有商品
select id,productName,dir_id FROM product WHERE NOT (dir_id= 2 OR dir_id =4);
select id,productName,dir_id FROM product WHERE NOT dir_id IN(2,4);
ps:某些时候可以替代 OR

空值查询: IS NULL
NULL表示某一列没有数据也不是空字符串
IS NULL 判断列表的值是否为null

需求:查询商品名为null所有的商品信息
1.向当前表中插入一行数据都是null
insert into product(id,productName,dir_id,salePrice,supplier,brand,cutoff,costPrice) values (null,null,null,null,bull,null,null,null);

select * FROM product WHERE productName IS NULL;

模糊查询:like
使用like运算符执行通配查询,查询条件可以包含文字字符或数字
通配符匹配模式:
% : 可表示零或多个任意字符
_ : 可表示一个字符

需求:查询id或货品名称匹配 匹配’罗技M’
SELECT id ,productName FROM product LIKE ‘罗技M%’;
ps: %字符串在后,代表以XXX开头 %在字符串前面 以XXX结尾

需求: 查询id,货品名称,分类编号,零售价格大于等于200货品或名称能匹配’罗技M1’后两个字符的商品
SELECT id, productName, dir_id,salePrice FROM product WHERE salePrice >=200 OR productName LIKE ‘%罗技M1__’;

结果排序:
使用ORDER BY 子句将查询的记录进行排序
ASC : 升序 可以省略
DESC: 降序
ps: ORDER BY 语句出现在select语句的最后
语法:
SELECT列 from 表 WHERE 列 条件 ORDER BY 列名[ASC/DESC]……

需求:查询Id,货品名称,分类编号,零售价格并且零售价格升序
select id, productName,dir_id, salePrice from product ORDER BY salePrice ASC;

需求:查询Id,货品名称,分类编号,零售价格并且零售价格降序
select id, productName,dir_id, salePrice from product ORDER BY salePrice DESC;

需求: 查询id,分类编号,零售价格,按照分类编号排序降序, 再按照零售价格排序 升序
SELECT id, productName,dir_id,salePrice FROM product ORDER BY dir_id DESC,salePrice ASC;

需求:查询M系列并按照批发价格排序
SELECT id, productName,costPrice*cutoff FROM product WHERE productName LIKE ‘%M%’ ORDER BY costPrice*cutoff ASC;

需求: 查询分类编号为2并按照批发价格排序

SELECT id, dir_id,productName,costPrice*cutoff FROM product WHERE dir_id =2 ORDER BY costPrice*cutoff ASC;

ps ;SELECT语句执行顺序
先执行from–>然后where –>然后select—>最后ORDER BY

自我总结:
层级结构: database库–>table表—>列(属性)—>行
DDL表:create alter drop
DML列: insert undate delete –>alter desc 表名 查看表中具体信息
DQL 表:select 查询

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值