mysql的简单用法_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分组之后的。 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |