create table user(
name varchar(10),
age int.
height doubnle
);
show tables;
select * from user; 查看所以的字段
// 插入数据
inster into user (name, age, height) values ('lisi', 18, 1.88);
加到环境变量 PATH="$PATH":/usr/local/mysql/bin mysql -uroot -p1234567
// 查询所有的数据库
SHOW DATABASES;
// 选择数据库
use bili;
// 查看当前正在使用的数据库
select database();
// 新建数据库
create database douyu;
// 不存在的时候再创建
create database if not exisis douyu
// 指定数据库编码格式
create database if not exisis douyu default character set utf8mb4 collate utf8mb4_0900_ai_ci
// 修改数据库编码
alter database huya character set = utf8 collate = utf8_inicode_ci
操作数据表
// 查看数据表
show tables;
// 新建表
create table if not exisis (
`name` varchar(10),
age int,
)
// 删除表
DROP TABLE IF EXISIS 'moment';
// 查看当前表结构
desc students;
// 查看创建这个表结构的sql语句
show Create TAble 'students'
mysql 中的数据类型
表约束:
字段是唯一的 使用 unique
字段不能为空 Not null
默认值 default
自动递增 auto_Increment
主键: PRINARY KEY 默认为not null
外键约束
完整创建表语法
CREATE TABLE IF NOT EXISIS `users` (
id INT PRINARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
age INT DEFAULT 0,
telphone VARCHAR(20) UNIQUE DEFAULT '',
createTime TIMESTAMP
);
// 修改表里面的字段或者添加 (修改表)
// 修改表名
ALTER TABLE `users` RENAME TO 'user'
// 添加新的列
ALERT TABLE 'user' ADD 'updatatime' TIMESTAMP
// 修改user表下面的字段名称
ALERT TABLE 'user' CHANGE 'telphone' 'phone' VHARCHAR(20)
// 修改类型 user 下面的 name 类型
ALTER TABLE 'user' MODIFY 'name' VAECHAR(30)
// 删除字段
ALTER TABLE 'user' DROP 'age'
// 根据一个表结构创建另外一个表
CREATE TABLE 'user111' LIKE 'user'
// 根据表里面所有内容创建新的表 没复制表结构
CREATE TABLE 'user222'(SELECT * FROM 'user')
# DML
# 插入数据
INSERT INTO 'user' VALUES (110, 'lisi', '020-123456', '2020-11-10','2020-11-11');
INSERT INTO `user` (name, telphone, createTime, updataeTIme) VALUES ('kobbe', '000-11111', '2020-10-10', '2030-101')
//
ALTER TABLE 'user' MODIFY 'createTIme' TIMESTAMP DEFAULT CURRETN_TIMESTAMP;
ALTER TABLE 'user' MODIFY 'updateTime' TIMESTAMP ON UPDATE CURRETN_TIMESTAMP;
ALTER TABLE 'user' MODIFY 'updateTime' TIMESTAMP DEFAULT CURRETN_TIMESTAMP ON UPDATE CURRETN_TIMESTAMP;
# 删除user表所有数据
DELETE FROM 'user'
# 删除user 表下的某一条数据(删除id = 110)
DELETE FROM 'user' WHERE id = 110;
# 更新所有数据
UPDATE 'user' SET name = 'lily', telPhone = '010-110110'
#根据符合条件的数据
UPDATE 'user' SET name = 'liliy' telphone = '010-110110' WHERE id = '115'
## 查询 producets表中所有的字段以及所有的数据
SELECT * FROM 'producets';
## 查询指定的字段
SELECT title, price FROM 'producets';
# 对查询到的结果起一个别名
SELECT title as phonename, price as phonePrice FROM 'producets';
## where 条件查询 查询价格小于100的手机
SELECT * FROM 'producets' WHERE price < 1000;
SELECT title, price FROM 'producets' WHERE price < 1000;
SELECT * FROM 'producets' WHERE price = 1000;
SELECT * FROM 'producets' WHERE price != 1000;
# 查询品牌为华为的
SELECT * FROM ‘products’ WHERE brand = '华为';
## 逻辑运算语句
AND是包含等于的
SELECT * FROM 'products' WHERE price >1000 && Price <2000;
SELECT * FROM 'products' WHERE price >1000 AND Price <2000;
# 价格在5000,或者 品牌 是华为
SELECT * FROM 'products' WHERE price >5000 || branmd = '华为';
# 将某些值设置为null
UPDATE 'products' SET url = NULL WHERE id >= 85 and id <= 88;
# 查询某一个值为null
SELECT * FROM 'products' WHERE url IS NULL
SELECT * FROM 'products' WHERE url IS NOT NULL
# 模糊查询
# % 匹配任意字符 _ 匹配一个字符
# 查询包含M的
SELECT * FROM 'products' WHERE tilte LIKE '%M%'
# 查询第二个字符是M的
SELECT * FROM 'products' WHERE tilte LIKE '_M%'
# IN 表示取多个值中的一个
SELECT * FROM 'products' WHERE brand == '小米' || brand == '华为'
SELECT * FROM 'products' WHERE brand IN ('华为',‘小米’)
# 对查询结果进行排序 按价格ASC升序排
SELECT * FROM 'products' WHERE brand IN ('华为',‘小米’) ORDER BY price ASC;
# 价格一样的话,按评分进行降序排序
SELECT * FROM 'products' WHERE brand IN ('华为',‘小米’) ORDER BY price ASC,score DESC;
### 分页查询
SELECT * FROM 'products' LIMIT 20 OFFSET 0;
SELECT * FROM 'products' LIMIT 20 OFFSET 20;
## 第一个数字代表offset, 第二个代表limit
SELECT * FROM 'products' LIMIT 40, 20;
# 聚合函数
// 求所有数据价格总数
SELECT SUM(price) as totalPrice FROM 'products';
// 只求华为手机的总和
SELECT SUM(price) as totalPrice FROM 'products' WHERE brand = '华为';
// 求平均数
SELECT AVG(price) as AVgPrice FROM 'products' WHERE brand = '华为';
// 求最大值
SELECT MAX(price) FROM 'products';
// 求最低价格
SELECT MIN(price) FROM 'products';
// 求华为手机的个数 如果字段为null不会计算
SELECT COUNT(*) FROM 'products' WHERE brand = '华为'
SELECT COUNT(url) FROM 'products' WHERE brand = '华为'
// 去除价格相同的
SELECT COUNT( DISTINCT price) FROM 'products' WHERE brand = '华为'
### GROUP BY
// 通过品牌分组
SELECT FROM `products` GROUP BY brand;
// 求每个分组下面的 平均数,总数量, 平均分数
SELECT brand, AVG(price), COUNT(*), AVG(score) FROM `products` GROUP BY brand;
## HAVING 注意 GROUP BY 后面不能用where,只能用 having, where必须放到 前面
## 求每个分组下面的 平均数,总数量, 平均分数 后筛选平均价格大于2000
SELECT brand, AVG(price), COUNT(*), AVG(score) FROM `products` GROUP BY brand HAVING price > 2000;
SELECT brand, AVG(price) FROM 'products' WHERE score > 7.5 GROUP BY brand;
多表查询
// 创建品牌的表
CREATe TABLE IF NOT EXISIS 'brand' (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL;
website VARCHAR(100),
phoneRank INT
);
INSERT INTO 'brand' (name, websit, phoneRank) values ('华为’, 'www.huawi', 2)
# 修改brand_id 字段未products 为外键
alter TABLE 'products' ADD 'brand_id' INT; # 这样 brand_id 的值只能是 brand表里面id字段的值,其他值都会报错
alter table 'products' add FOREIFH KEY(brand_id) REFERENCES brand(id);
修改brand_id 关联外键时的action
# 1. 获取到目前的外键的名称
SHOW CREATE TABLE 'products';
# 2. 根据名称删除外键
ALTER TABLE 'products' DROP FFOREIGN KEY products_ibfk_1;
# 3. 重新添加
lter table 'products' add FOREIFH KEY(brand_id) REFERENCES brand(id)
ON UPDATE CASCADE
ON DELETE RESTRICT;
// 左连接
SELECT * FROM 'product' LEFT JOIN 'brand' ON products.barnd_id = brand.id;
SELECT * FROM 'product' LEFT JOIN 'brand' ON products.barnd_id = brand.id WHERE brand.id IS NULL;
// 右链接
SELECT * FROM 'product'RIGHT OUTER JOIN 'brand' ON products.barnd_id = brand.id;
// 内连接
SELECT * FROM 'products' JOIN 'brand' ON products.brand_id = brand.is;
// 全连接
(SELECT * FROM 'product' LEFT JOIN 'brand' ON products.barnd_id = brand.id)
UNION
(SELECT * FROM 'product'RIGHT OUTER JOIN 'brand' ON products.barnd_id = brand.id)