MySQL期中复习
1.创建数据库my_db
create database my_db;
2.指定数据库my_db
use my_db;
3.创建数据表student并指定字符集
字段名 | 类型 | 约束 |
---|---|---|
id | int | 主键,自增长 |
name | vatchar(30) | 非空,唯一 |
gender | varchar(30) | 非空 |
score | float | 默认值为0,非空 |
create table student (id int primary key auto_increment,name varchar(30) not null unique,gender varchar(30) not null,score float not null default 0) character set utf8mb4;
4.插入三条数据
如果未指定字符集可能报错
使用
alter table student convert to character set utf8mb4;
insert into student (name,gender,score) values ('小明','男','55'),('小红','女','99'),('李四','男','60');
5.name字段改为sname
show index from student; //查看唯一约束索引
alter table student drop index name; //删除index的唯一约束
alter table student change name sname varchar(30) not null unique;
6.查看所有学生信息
select * from student;
7.查看名字带有“三”的值
select * from student where name like "%三%";
8.删除数据表
drop table student;
补充:
修改数据表
alter table mytb rename as mytb1; //修改数据表名字
修改数据库名
1.创建需要改成新名的数据库。
2.mysqldum 导出要改名的数据库
3.删除原来的旧库(确定是否真的需要)
当然这种方法虽然安全,但是如果数据量大,会比较耗时。
#创建数据库
CREATE DATABASE IF NOT EXISTS 库名 default charset utf8mb4 COLLATE utf8mb4_unicode_ci;#将db1库备份到db1.sql文件mysqldump -u root -p db1 > /tmp/db1.sql;
#Enter password:
#[root@xxx ~]#导入备份文件到新库db2mysql -u root -p db2 < /tmp/db1.sql;#Enter password:
#[root@xxx ~]#删除旧库(如果真的需要)DROP DATABASE db1;
alter table student rename column score to score1; //mysql8.0可以使用
复制表
CREATE TABLE new_table_name LIKE original_table_name;
INSERT INTO new_table_name SELECT * FROM original_table_name;
删除数据库
drop database 数据库名;
insert语句还有一种语法格式,使用set子句为表中的字段或者全部字段添加数据其格式如下:
insert into 数据表名 set 字段名 = 值1[ set 字段名 = 值2...];
更新数据
update 数据表名 set 字段名 = 值 [set 字段名 = 值2 ... ] where 表达式; //不加where全部更新,为危险操作
删除数据
方法一:使用 delete
delete from 数据表名[where 表达式];//不加where删除表中全部数据
方法二:使用truncate
truncate [table]数据表名;
truncate和delete的区别参见:https://blog.csdn.net/weixin_48720080/article/details/129362367
查询去重数据
select distinct 字段名 from 数据库名;
分组查询
select 字段名 from 数据表名 group by 字段名 order by 字段名 [desc降序|asc升序]
实例(使用having进行条件筛选):
select deptno avg(sal) from emp group by depyno having avg(sal)<3000 order by 字段名 desc;
注意:having可以理解为where
限量查询limit
查询员工表中工资最高的5名员工
select * from emp order by sal desc limit 5;
使用order by对对多个字段排序
基本语法
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...
示例
假设有一个 students
表,包含字段 sName
(学生姓名), sAge
(年龄), 和 sGrade
(成绩)。
按年龄升序,成绩降序排序:
SELECT * FROM students
ORDER BY sAge ASC, sGrade DESC;