注:以下笔记都基于第三方平台Navicat
一、开启和关闭服务窗口
1、使用命令行输入:services.msc找到MySQL关闭或开启服务
2、使用管理员的身份运行命令提示符
开启输入:net start mysql
关闭输入:net stop mysql
注:每个电脑的mysql名字不一样,有的是mysql57,名字一定要一样才可以开启或关闭服务
二、表结构管理下面展示一些 内联代码片
。
关系模型术语
- 关系:表
- 元组:表内的一行记录
- 属性:表内的一列
- 主键:表内一行记录的唯一标识
- 关系模式:表与表之间的关系
mysql的数据类型(最常用)
整型:int
小数型:decimal(6,3)
字符串型:varchar
日期型:datetime(YYYY-MM-DD HH-MM-SS)
数据完整性约束 - 实体完整性:主键约束,唯一性约束,就是索引
域完整性:非空约束,默认值约束
注:默认值约束就是当前栏位不输入值就会变为默认值约束,如果是给默认值栏位赋值那么就会优先显示输入的值而不会显示默认约束的值
参照完整性是指通过定义一张表中外键与另一张表中主键之间的引用规则来约束这两张表之间的联系
注:主键表中参考的栏位和外键表中参考的栏位数据要完全一致否则会报错
三、MySQL语法
CREATE DATABASE demo2 #创建数据库
DROP DATABASE lewen #删除数据库
SHOW DATABASES #显示所有创建的数据库
#新建表
CREATE TABLE customers(
customerID int PRIMARY KEY auto_increment,#PRIMARY KEY设为主键,auto_increment自动增长
loginID VARCHAR(20) NOT NULL,
pwd VARCHAR(10) NOT NULL,
cName VARCHAR(20) NOT NULL,
address VARCHAR(50),
phone VARCHAR(20)
)
#修改表
ALTER TABLE goods
ADD manufacturer VARCHAR(50),#添加性的字段
CHANGE unitPrice price DECIMAL(8,2),#更改字段名字
MODIFY category VARCHAR(50),#更改字段类型
DROP saleCount#删除字段
#插入数据
SELECT * FROM customers #查询表
INSERT INTO customers VALUES
(NULL,1,123,‘张三’,‘安徽’,456),
(NULL,2,123,‘李四’,‘北京’,789),
(NULL,3,123,‘王二’,‘东北’,741)
UPDATE customers SET loginID = 2,cName = ‘麻子’,address = ‘六安’,phone = 963 WHERE customerID = 2
UPDATE customers SET loginID = 1 WHERE loginID = 3 #更改数据
DELETE FROM customers WHERE customerID = 4#删除数据
四、数据查询语句
customers,goods:表名 pwd,customerID,phone,category,price:每列的名字
SELECT * FROM customers #查询全部
SELECT pwd,customerID,phone FROM customers#查询指订列
SELECT pwd 密码,cName 姓名,address 地址 FROM customers#给列取名
SELECT DISTINCT address FROM customers #查询去除重复的列
UPDATE customers SET phone=152 WHERE customerID=6
SELECT *FROM goods WHERE category =‘书籍’#查询所有类别等于书籍的
SELECT *FROM goods WHERE price>100 #查询所有价格大于100的
SELECT *FROM goods WHERE category =‘生活电器’&&price>200#查询所有类别等于生活电器且价格大于200的记录
SELECT *FROM goods WHERE category =‘书籍’||price<=100#查询所有类别等于书籍或者价格小于等于100的记录
SELECT *FROM goods ORDER BY price#升序排列
SELECT *FROM goods ORDER BY price DESC#降序排列
SELECT *FROM goods ORDER BY goodsName,price
SELECT *FROM goods LIMIT 0,3#第一个数为起始数,第二个数为搜索几条数据
SELECT *FROM goods LIMIT 3,3
Like模糊查询
%:可以匹配一个或者多个字符
_(下划线):只能匹配一个字符
SELECT *FROM goods WHERE goodsName LIKE ‘%孙卫琴%’
in:在集合范围内进行查询并返回符合条件的查询结果
SELECT *FROM goods WHERE category IN(‘书籍’,‘体育用品’)
Between…and:在一定范围内进行查询,between后面是起始值,and后面是结束值
SELECT *FROM goods WHERE price BETWEEN 100 AND 200
五、MySQL函数
SELECT CEIL(5.5)#向上取整
SELECT FLOOR(6.3)#向下取整
SELECT RAND(),RAND()#产生0~1的随机数
SELECT RAND(1),RAND(2)#使用种子植产生随机数
SELECT ROUND(9.9)#四舍五入
SELECT ROUND(6.666,2)#四舍五入,2表示保留几位小数,结果:6.67
SELECT *FROM goods
SELECT goodsName,price,IF(price>=100,‘值钱’,‘不值钱’)是否值钱 FROM goods ORDER BY price
#如果判断成立就执行“值钱”,不成立就执行“不值钱”
SELECT goodsName,price 价格,IFNULL(category,‘暂无分类’) FROM goods
#判断分类是否有空值NULL,如果有就执行“暂无分类”
SELECT CHARACTER_LENGTH(‘denmo’),CHAR_LENGTH(‘哈哈哈’),LENGTH(‘denmo’),LENGTH(‘哈哈’)#查看字符串位数
SELECT CONCAT(‘你好’,‘world’,666)#连接字符串
SELECT INSERT(‘啊哈哈哈屁哈哈’,1,2,‘屁屁’)#更改指定位置的字符串
SELECT REPLACE(‘啊哈哈哈屁哈哈,什么玩意’,‘什么玩意’,‘就这样’)#更改匹配的所有字符串
SELECT SUBSTR(‘啊哈哈哈123屁哈哈’,5,4)#截取指定字符串
SELECT CURDATE(),CURTIME(),NOW()#第一个获取当前日期,第二个获取当前时间,第三个获取当前时间和日期
SELECT DAYNAME(NOW()),DAYOFWEEK(NOW()),WEEKDAY(NOW())
SELECT DATE_FORMAT(NOW(),’%y-%m-%d %h:%i:%s’)
SELECT DATEDIFF(‘2020-8-25’,NOW())#对日期进行比较
SELECT ADDDATE(NOW(),INTERVAL 10 DAY)10天后,#对日期进行加减
ADDDATE(NOW(),INTERVAL 20 YEAR)20年后,
ADDDATE(NOW(),INTERVAL 20 MONTH)20月后,
ADDDATE(NOW(),INTERVAL -20 YEAR)20年前
系统信息函数
- Version():获取系统当前版本
- User():获取当前用户信息
- CHARSET(str):获取当前默认的字符集编码
- LAST_INSERT_ID():获取最新的自动增长的ID
加密函数 - PASSWORD(str):对目标字符串进行加密,不可逆
2.MD5(str):对目标字符串进行加密,不可逆 - encode(str,pass_str):对目标字符串进行加密,可逆
- decode(str,pass_str):对目标字符串进行解密
六、聚合函数和分组查询
一、聚合函数,sum,max,min,经常是数值类型的列
- Sum(column):求和函数,对查询的结果集进行指定列的求和
- Max(column):求最大值,对查询的结果集进行指定列的最大值计算
- Min(column):求最小值,对查询的结果集进行指定列的最小值计算
二、avg和count函数,求平均值和返回结果集记录总数 - AVG(column):求平均值,对查询的结果集进行指定列的平均数计算
- Count(*):返回结果集的总数
- Count(column):对指定列进行计数,空值(null)是不参与计算的
三、group by子句
按照单列进行分组,也可以按照多列进行分组,从左往右的顺序依次进行分组,比如先按照第一列进行分组,然后第一列值相同的情况下,才会按照第二列进行分组,依次类推;
Where条件是在group by子句之前执行的,sql的位置也要写在group by子句之前
Having条件是在group by 子句之后执行的,sql的位置也要写在group by子句之后
SELECT SUM(price) 总价 FROM goods WHERE category = ‘书籍’#求和函数
SELECT MAX(price) 最贵 FROM goods #求最大值
SELECT MIN(price) 最便宜 FROM goods WHERE price#求最小值
SELECT AVG(price) FROM goods #求平均值
SELECT ROUND(AVG(price)) 平均值 FROM goods#求平均值并向下取整
SELECT CEIL(AVG(price)) FROM goods#求平均值并向上取整
SELECT COUNT() FROM goods #查询行数
SELECT COUNT(category) FROM goods WHERE category=‘书籍’
SELECT category 分类,MAX(price) 最高,MIN(price) 最低,ROUND(AVG(price)) 平均值,COUNT() 总数 FROM goods GROUP BY category ORDER BY price DESC
#GROUP BY分组查询
SELECT category 分类,MAX(price) 最高,MIN(price) 最低,ROUND(AVG(price)) 平均值,COUNT(*) 总数 FROM goods GROUP BY category HAVING 总数>
3#条件筛选
七、表连接
SELECT COUNT(*) FROM customers cross JOIN goods #交叉连接表
SELECT customers.customerID 客户ID,customers.cName 客户姓名,goodorder.customerid,goodorder.amount
FROM customers INNER JOIN goodorder
ON customers.customerID = goodorder.customerid
WHERE customers.customerID = 1#内连接
SELECT customers.cName 姓名,goodorder.orderdate 购买时间,goods.goodsName 商品名称,goodorder.amount 金额
FROM customers JOIN goods ON customers.customerID = goods.goodsID
JOIN goodorder ON customers.customerID = goodorder.id#多表连接
SELECT customers.cName 姓名,goodorder.orderdate 购买时间,goods.goodsName 商品名称,goodorder.amount 金额
FROM customers,goods,goodorder
WHERE customers.customerID=goods.goodsID AND customers.customerID = goodorder.id
#多表连接第二种方法
SELECT *FROM goodorder LEFT JOIN goods ON goodorder.id= goods.goodsID
左外连接:以左边的表为主表,然后根据连接条件匹配右边的表,如果匹配上了,则两行合并为一行显示在查询结果中;
如果匹配不上,还是会把左边的记录显示出来,然后右边的表字段全部为空(null);
SELECT goodorder.customerid,goodorder.orderdate,goods.goodsName,goods.price
FROM goodorder RIGHT JOIN goods ON goodorder.id= goods.goodsID
右外连接:以右边的表为主表,然后去匹配左边的表;规则同上;