mysql基础用法入门

数据库的介绍

数据库是什么,怎么玩?简单介绍一下~
1.数据库(Database)是按照数据结构来组织、存储和管理数据的仓库(db和dbms)
2.数据库的分类:即关系型数据库和非关系型数据库。而我们今天来说的Mysql就是典型的关系型数据库
关系型数据库:oracle、mysql、sql server等
非关系型数据库:redis mongodb等
1>关系型数据库的特点:将数据保存在不同的表中,再将这些表放入数据库中,而不是将所有数据统一放在数据库里。
2>优点:这样不仅增加了Mysql的读取速度,灵活性和可管理型也得到了很大的提高,访问以及管理Mysql数据库的最常用标准化语言为SQL结构化查询的语句,进而让数据持久化存储在硬盘中;
在这里插入图片描述
这样用图形能更形象描述出关系型数据库的特点,我们理解起来也方便多了,不用纠结那么长的概念了。
3.关系型数据库的设计规则:遵循ER模型和三范式
1>ER模型:
E | entity|代表实体的意思 |对应到数据库当中的一张表
-------- | —
R | relationship|代表关系的意思
2>三范式:1、列不能拆分 2、唯一关系主键 3、不能传递依赖

下面是相关数据库操作:

mysql -uroot -p 密码
sudo service mysql restart  # 重启mysql服务
~ 数据库操作
SHOW DATABASES;  # 查看所有
CREATE DATABASE IF NOT EXSIT 数据库名;  # 如果不存在则创建 后面加charset=utf8中文
SHOW CREATE DATABASE 数据库名;  # 查看某个数据库的定义信息
DROP DATABASE 数据库名;  # 删除
USE 数据库名;  # 切换

~ 表结构语句  列名=字段
CREATE TABLE 表名(
    字段名 类型(长度) 约束,
    字段名 类型(长度) 约束
);

类型:ENUM('男','女')  # 枚举类型
DECIMAL(5,2)  # 浮点字类型,意思长度5,小数点后2位

CREATE TABLE sort (
  sid INT UNSIGNED, #分类ID 
  sname VARCHAR(100) #分类名称
)CHARSET=utf8;

约束语句有:primary key主键,default默认值,unique唯一,not null非空,foreign key外键.
ALTER TABLE 表名 DROP PRIMARY KEY;  # 删除主键
ID INT UNSIGNED PRIMARY KEY AUTO_INCREMENT;  # 主键自增长
SHOW TABLES;  # 查看所有表
DESC 表名;  # 查看表结构
SHOW CREATE TABLE 表名;  # 查看建表语句
DROP TABLE 表名;  # 删除表
ALTER TABLE 表名 DROP 列名;  # 删除列
RENAME TABLE 表名 TO 表名;  # 修改表名
ALTER TABLE 表名 CHARACTER SET 字符集;  修改表字符集
ALTER TABLE 表名 CHANGE 列名 新列名 列类型 约束;  # 修改列名 modify修改属性不该列名
ALTER TABLE 表名 ADD 列名 列类型 约束;  # 添加列

~ DML操作 insert,update,delete
INSERT INTO 表名 (列名1, 列名2...)VALUES(列值1,列值2...);
UPDATE 表名 SET 列名1=列值1,列名2=列值2... WHERE 列名=;
DELETE FROM 表名 WHERE 列名=;

~ DQL操作 查询语言
SELECT * FROM 表名;  # 查看表所有数据
SELECT DISTINCT * FROM 表名;  # distinct表示去重操作
SELECT 列名1,列名2.. FROM 表名;
SELECT * from 表名 where 条件=值 and 条件=;  # 或者是or
SELECT * FROM stu WHERE sid IN ('S_1001','S_1002','S_1003');  # in是这些,not in是不是这些条件
SELECT * FROM stu WHERE age>=20 AND age<=40;  # 区间,等同于 age between 20 and 40;
SELECT * FROM stu WHERE gender!='男';  # 非男性,还有gender<>'男', NOT gender='男'
SELECT * FROM stu WHERE name IS NOT NULL;  # 非空,或者WHERE NOT name IS NULL
~~模糊查询:通配符_匹配任意一个字符,%任意0-n个字符
SELECT * FROM stu WHERE name LIKE'_____';  # 这里打了几个_就是几个字符
SELECT * FROM stu WHERE name LIKE'__i';  # 意思是第三个字母为i的记录
SELECT * FROM stu WHERE name LIKE'Z%';  # 查询以z开头的记录
SELECT * FROM stu WHERE name LIKE'%a%';  # 查询包括a的记录
~~字段控制查询:GROUP BY,HAVING,ORDER BY,LIMIT START,COUNT  # 这几个学习
执行顺序:
FROM 表名, 
WHERE, 
GROUP BY, 
SELECT DISTINCT *, 
HAVING, 
ORDER BY, 
LIMIT START,
COUNT
SELECT DISTINCT name FROM stu;  # 去重查询
~~排序 order by # 排序desc是降序,asc是升序,默认升序
SELECT * FROM stu WHERE height BETWEEN 150 AND 170 ORDER BY height DESC;

数据库保存为文件:
mysqldump -uroot -p 数据库名 > name.sql  # 在要保存的路径操作保存即可
mysqldump -uroot -p 数据库名 < name.sql  # 读取

聚合函数(对查询的结果做操作):MAX MIN AVG SUM COUNT等
SELECT COUNT(*) FROM stu;  # 个数
SELECT MAX(height) FROM stu;  # 查找身高最高
ROUND(数据,2)  # 表示几位小数

分组group by
SELECT MAX(height) FROM stu GROUP BY gender;  # 当前的性别组身高最高的分别是
SELECT gender,GROUP_CONCAT(name,'_',height) FROM stu GROUP BY gender;  # 按性别分组,GROUP_CONCAT里面是要显示的内容,中间可以分隔符
SELECT gender,AVG(height) FROM stu GROUP BY gender;  # 按性别算平均身高
分组之后的条件筛选  
SELECT gender FROM stu GROUP BY gender,height HAVING gender!='男' and height>160;
SELECT gender,GROUP_CONCAT(name,'_',height) FROM stu GROUP BY gender HAVING AVG(height)>160;  # HAVING后面筛选的是已经分组的

分页
SELECT * FROM stu LIMIT 3,3;  # 分页,1,31开始,共3条

链接查询 多表连接成集合
SELECT * FROM 表一 INNER JOIN 表二 ON 表一的字段=表二的字段
SELECT * FROM student INNER JOIN classes ON student.cls_id=classes.id;
SELECT student.id,student.name,classes.name FROM student INNER JOIN classes ON student.cls_id=classes.id;
LEFT JOIN  # 左连接以左边列表为主 RIGHT JOIN非主列表为空时自动显示NULL

# 创建商品表,中间设置外键
CREATE TABLE commodity( 
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
name VARCHAR(20) NOT NULL, 
price DECIMAL(8,2) NOT NULL, 
is_delete int default 0, 
is_show int default 1, 
is_saled int default 0, 
cate_id int unsigned, 
brand_id int unsigned, 
FOREIGN KEY(cate_id) REFERENCES cate(id), 
FOREIGN KEY(brand_id) REFERENCES brand(id) 
);

练习:
SELECT ROUND(AVG(pirce),2) AS avg_pirce FROM goods WHERE cate_id=2;  # AS是显示的名字
嵌套查询
SELECT price FROM commodity WHERE price>(SELECT AVG(price) FROM commodity WHERE cate_id=1) and cate_id=1;
# 查询价格最大最小平均个数,并且显示分类名
mysql> SELECT cate_id,cate.name,MIN(price),MAX(price),ROUND(AVG(price),2) AS '平均价格',COUNT(price) AS'总数' FROM commodity INNER JOIN cate ON cate_id=cate.id GROUP BY cate_id;
+---------+--------------+------------+------------+--------------+--------+
| cate_id | name         | MIN(price) | MAX(price) | 平均价格     | 总数   |
+---------+--------------+------------+------------+--------------+--------+
|       1 | 保温杯       |     198.00 |     258.00 |       228.00 |      2 |
|       2 | 马克杯       |     108.00 |     308.00 |       208.00 |      2 |
|       3 | 桶套餐       |      66.00 |      88.00 |        77.00 |      2 |
|       4 | 皇堡套餐     |      25.50 |      48.00 |        36.75 |      2 |
|       5 | Q币          |      49.50 |      98.80 |        74.15 |      2 |
|       6 | 皮肤         |     138.00 |     138.00 |       138.00 |      1 |
|       7 | 英雄         |      58.00 |      58.00 |        58.00 |      1 |
+---------+--------------+------------+------------+--------------+--------+

# 三表联查  可以分开写
SELECT commodity.name,cate.name,brand.name FROM commodity INNER JOIN cate ON commodity.cate_id=cate.id INNER JOIN brand ON commodity.brand_id=brand.id;
SELECT commodity.name,cate.name,brand.name FROM(
  commodity INNER JOIN cate ON commodity.cate_id=cate.id
  INNER JOIN brand ON commodity.brand_id=brand.id
);

CREATE TABLE myorder(id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
 payment DECIMAL(8,2) NOT NULL, 
 pay_time VARCHAR(20) NOT NULL, 
 user_id INT UNSIGNED, 
 FOREIGN KEY(user_id) REFERENCES user(id), 
 send_time VARCHAR(20) NOT NULL 
 );

SELECT myorder.id,myorder.pay_time AS'付款时间',order_items.comm_id AS'商品id',order_items.num,order_items.total_fee,shipping.name,shipping.phone FROM myorder INNER JOIN order_items ON myorder.id=order_items.order_id INNER JOIN shipping ON myorder.id=shipping.order_id;

创建用户并分权限

create user username identified by 'password';  // 创建名字和密码
grant all on biao.* to 'username'@'%';  // 设置用在哪个表和权限, %是指连接地址都可以
flush privileges;  // 使生效

重新打开数据库
mysql -upaul -p   // 然后输入密码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值