加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql的简单用法_MySQL的简单使用(一)

发布时间:2022-12-12 14:38:29 所属栏目:MySql教程 来源:网络
导读: 表约束
主键:PRIMARY KEY
主键是表中唯一的索引。永远不会重复
并且必须是NOT NULL的,如果没有设置NOT NULL,那么MySQL也会隐式的设置为NOT NULL
主键也可以是多列索引,PRIMARY KEY(key

表约束

主键:PRIMARY KEY

主键是表中唯一的索引。永远不会重复

并且必须是NOT NULL的,如果没有设置NOT NULL,那么MySQL也会隐式的设置为NOT NULL

主键也可以是多列索引,PRIMARY KEY(key_part, ...), 一般称之为联合主键或者复合主键

CREATE TABLE IF NOT EXISTS moment_label (

moment_id INT NOT NULL,

label_id INT NOT NULL,

// 联合主键

PRIMARY KEY(moment_id, label_id)

);

唯一:UNIQUE

唯一性,使用UNIQUE约束的字段在表中必须是不同的

对于所有的引擎,UNIQUE索引允许NULL包含的列具有多个NULL值,也就是NULL值可以重复

默认值:DEFAULT

为某个字段设置默认值

自动递增:AUTO_INCREMENT

CREATE TABLE IF NOT EXISTS users (

id INT PRIMARY KEY AUTO_INCREMENT, # id设置为主键,并且是递增的

name VARCHAR(20) NOT NULL, # name设置为可变字符类型,并且长度在20以内,且不能为空

age INT DEFAULT 0, # age设置为INT类型 默认为0

phoneNum VARCHAR(20) UNIQUE DEFAULT '', # 手机号为20个字符以内的 唯一 且默认为‘’

createTime TIMESTAMP

)

# 删除数据表

DROP TABLE users;

DROP TABLE IF EXISTS users;

修改表

修改表的名字

语法:ALTER TABLE 表名 RENAME TO 新表名;

// 将数据表users改名为user

ALTER TABLE `users` RENAME TO `user`;

添加新的列

语法:ALTER TABLE 表名 ADD 新列的名 类型;

# 2.添加新的列 在user表中新增TIMESTAMP类型的updateTime字段

ALTER TABLE `user` ADD `updateTime` TIMESTAMP;

修改字段的名字

语法:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新字段的类型;

# 3.修改字段名称 将user表中的phoneNum字段名修改为telphone 类型为 VARCHAR(20)

ALTER TABLE `user` CHANGE `phoneNum` `telPhone` VARCHAR(20);

修改字段的类型

语法:ALTER TABLE 表名 MODIFY 字段名 新的字段类型;

# 4.修改字段的类型 将user表中的name字段的类型修改为VARCHAR(30)

ALTER TABLE `user` MODIFY `name` VARCHAR(30);

删除字段

语法:ALTER TABLE 表名 DROP 要删除的字段;

# 5.删除字段 删除user表中的age字段

ALTER TABLE `user` DROP `age`;

根据表的结构创建另一张表

语法:CREATE TABLE 新表名 LIKE 表名

只会复制表的结构,而不会把表的内容复制到新创建的表

# 根据user表的结构创建表user2

CREATE TABLE `user2` LIKE `user`;

根据表的内容创建另一张表

语法:CREATE TABLE 新表名 AS(可省略) (SELECT * FROM 表名);

# 根据user表中的内容创建user3表

// CREATE TABLE `user3` AS (SELECT * FROM `user`);

CREATE TABLE `user3` (SELECT * FROM `user`);

DML-对数据库的增删改

插入数据

语法:INSERT INTO 表名 (字段1,字段2,...) VALUES (value1,value2,...)

# 向user表中插入数据

INSERT INTO user VALUES (110,'lwy','15665431234','2020-11-11','2020-12-12');

# 向user表中插入对应字段的数据

INSERT INTO user (name,telPhone,createTime,updateTime)

VALUES ('zhangsan','020-123456','2020-11-12','2020-12-13');

INSERT INTO user (name, telPhone)

VALUES ('lisi','030-213456');

设置字段的默认值

# createTime 默认为创建时的时间

ALTER TABLE user MODIFY createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

# updateTime 默认为创建时间 在修改时自动设置修改时间

ALTER TABLE user MODIFY updateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

INSERT INTO user (name, telPhone)

VALUES ('lris','050-213456');

删除数据

语法:DELETE FROM 表名; DELETE FROM 表名 WHERE 条件;

# 删除user表中所有的数据

DELETE FROM user;

# 删除user表中id为110的数据

DELETE FROM user WHERE id = 110;

更新数据

# 更新所有的数据

UPDATE user SET name = '李四', telPhone = '012-12345600';

# 更新符合条件的数据

UPDATE user SET name = '李四', telPhone = '012-12345600' WHERE id = 111;

DQL语句

DQL:Data Query Language(数据查询语言)

SELECT用于从一个或者多个表中检索选中的行

官方文档介绍的很详细。

基本查询

# 1.基本查询

# 查询表中所有字段和所有数据

SELECT * FROM products;

# 查询指定的字段

SELECT title, price FROM products;

# 对字段结果起别名

SELECT title AS phoneName, price AS currentPrice FROM products;

WHERE查询条件

基本查询

# WHERE后面是查询条件

SELECT * FROM products WHERE price = 1000;

SELECT title, price FROM products WHERE price > 1000;

# 下面两种写法是一样的 都是不等于

SELECT * FROM products WHERE price != 1000;

SELECT * FROM products WHERE price 1000;

逻辑运算符

# 案例一:价格1000到2000的手机

SELECT * FROM products WHERE price > 1000 AND price < 2000;

SELECT * FROM products WHERE price > 1000 && price < 2000;

# BETWEEN AND包含等于的情况

SELECT * FROM products WHERE price BETWEEN 1000 AND 2000;

# 逻辑或

SELECT * FROM products WHERE price > 5000 || brand = '华为';

# 查询一个值是否为NULL

# 查询url为NULL的数据

SELECT * FROM products WHERE url IS NULL;

# 查询url不为NULL的数据

SELECT * FROM products WHERE url IS NOT NULL;

模糊查询

模糊查询使用LIKE关键字,结合两个特殊的符号:

%表示匹配任意个(0个或多个)的任意字符

_表示匹配一个的任意字符;

# 查询 title中有M的数据

SELECT * FROM products WHERE title LIKE '%M%';

# 查询title中第二个字母是P的数据

SELECT * FROM products WHERE title LIKE '_P%';

IN:取多个值中的一个即可

SELECT * FROM products WHERE brand = '华为' || brand = '小米' || brand = '苹果';

# 这句跟上面的作用相同

SELECT * FROM products WHERE brand IN ('华为','小米','苹果');

排序

通过ORDER BY关键字进行排序

ASC: 升序

DESC:降序

# 查询结果的排序

# ASC: 升序 DESC:降序

# 查询的结果根据价格的升序排序

SELECT * FROM products WHERE brand IN ('华为','小米','苹果') ORDER BY price ASC;

# 查询的结果以价格的升序排序 价格相同时以score的降序排序

SELECT * FROM products WHERE brand IN ('华为','小米','苹果') ORDER BY price ASC, score DESC;

分页查询

LIMIT查询的数据,OFFSET:偏移量

语法:LIMIT limit OFFSET offset

或者可以 LIMIT offset,limit

SELECT * FROM products LIMIT 20 OFFSET 0;

# 偏移量0 长度为20 等同于上面的

SELECT * FROM products LIMIT 0,20;

聚合函数

聚合函数表示对值集合进行操作的组(集合)函数

默认情况下,聚合函数相当于是将整张表的数据看作一组数据,对这一组数据进行某些操作使用的函数就是聚合函数。

1.聚合函数的使用

# 1.1 求所有手机价格的总和

SELECT SUM(price) FROM products;

## 设置名称

SELECT SUM(price) AS totalPrice FROM products;

## AS可以省略

SELECT SUM(price) totalPrice FROM products;

2.GROUP BY

GROUP BY通常和聚合函数一起使用。表示我们先对数据进行分组,再对每一组数据,进行聚合函数的计算;

按照品牌来分组计算对应的平均价格 数量 平均评分

SELECT AVG(price), COUNT(*), AVG(score) FROM products GROUP BY brand;

结果如下:

但可以看出来并没有显示对应的品牌名称,如果要显示对应的品牌名称

SELECT brand, AVG(price), COUNT(*), AVG(score) FROM products GROUP BY brand;

需要注意的是,因为是根据brand进行分组(GROUP BY)的,所以SELECT后面跟着的是brand,而不能是title等其他的字段。当然brand和AVG(price)等的顺序可以自由调节

HAVING的使用

如果要对分组之后的数据再进行筛选,需要使用HAVING语句,而不是WHERE

# 3.1 按照品牌来分组计算对应的平均价格 数量 平均评分之后 筛选出其中平均价格大于2000的数据

# 可能会在结果后面跟上WHERE筛选条件 这样是语法错误的

# SELECT brand, AVG(price) avgPrice, COUNT(*), AVG(score) FROM products GROUP BY brand WHERE avgPrice > 2000;

# 应该是

SELECT brand, AVG(price) avgPrice, COUNT(*), AVG(score) FROM products GROUP BY brand HAVING avgPrice > 2000;

WHERE和HAVING的区别:

WHERE是用来筛选数据表中的某些条件的mysql使用,HAVING是对分组(GROUP BY)之后的数据进行筛选。也就是WHERE是跟在表的后面,作用于表,HAVING是跟在GROUP BY后面,作用于GROUP BY分组之后的。

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!