Mysql数据库基础操作-笔记
CRUD
DDL(操作数据库)
R(Retrieve):查询
查询所有数据库的名称:
show databases;
查看某个数据库的字符集(数据库编码如:gbk等):
show create database //数据库名称;
返回信息 例如:
CREATE DATABASE `student` /*!40100 DEFAULT CHARACTER SET utf8 */
创建数据库:
create database //数据库名称;
create database if not exists 数据库名称; //创建数据库前判断一下该数据库是否存在,没有则创建
create database 数据库名称 character set //编码名称; 创建数据库,并且指定编码格式
汇总:
create database if not exists 数据库名称 character set 编码名称; //创建数据库前判断一下该数据库是否存在,没有则创建并且指定编码格式
创建数据库
###U(Update):修改
修改数据库的字符集:
alter database 数据库名称 character set 编码名称;
删除数据库:
drop database 数据库名称;
drop database if exists 数据库名称; 判断数据库是否存在,存在则删除;
使用数据库:
查询当前正在使用的数据库名称:
select database();
使用数据库:
use 数据库名称;
###DBL(操作表) ##1.C(create):创建
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
//注意:最后一列,不需要加逗号(,)
create table 表名2 like 表名1; //复制一份表1 到表2;
数据类型:
#####1.int:整数类型
age int;
#####3.double:小数类型;
score double(5,2) //小数最多有五位,小数点后保留2位小数。
#####3.date:日期,只包含年月日, yyyy-MM-dd; #####4.datatime:日期,包含年月日时分秒,yyyy-MM-dd HH:mm
#####5.timestamp包含年月日时分秒,yyyy-MM-dd HH:mm *如果将来不给这个字段赋值,或赋值为Null,则默认使用系统时间,来自动赋值。 #####6.varchar:字符串name varchar(20):姓名最大20个字符
zhangsan 8个字符 张三 2个字符
创建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
##2.R(Retrieve):查询
show tables; //查询某个数据库中所有的表的名称
desc 表名称; //查询表结构
##3.U(Update):修改 1.表名
alter table 表名 rename to 新表名;
2.修改表的字符集
alter table 表名 character set 编码名; //修改字符集
show create table 表名; //查看表的字符集
3.添加一列
alter table 表名 add 列名 数据类型;
4.修改列名称 类型
alter table 表名 change 要修改的列名 新的列名 数据类型;
只修改类型:
alter table 表名 modify 要修改的列名 数据类型;
```
5.删除列
```sql
alter table 表名 drop 要删除的列名;
##4.D(De lete)
drop table 表名;
drop table if exists 表名;
##DML:增删改表中数据 1.添加数据: *语法:
insert into 表名(列名1,列名2,....,列名n) values(值1,值2...值3)
{% note purple ‘fas fa-info-circle’ flat %} *注意: 1.列名和值要一一对应。 2.如果表名后,不定义列名,则默认给所有的列添加值, insert into 表名 values(值1,值2…值n); 3.除了数字类型,其他类型需要引号(单双)引起来 {% endnote %} 2.删除数据 *语法:
*delete from 表名 where 条件;
{% note purple ‘fas fa-info-circle’ flat %} *注意: 如果不加条件,则删除表中所有的记录 {% endnote %}
truncate table 表名; //删除表,然后在创建一个一模一样的空表
3.修改数据 *语法:
update 表名 set 表名 列名1 =值1,列名2 = 值2,...[where 条件]
{% note purple ‘fas fa-info-circle’ flat %}
- 注意: * 如果不加条件,会将表中所有的记录都将修改 {% endnote %} ##DQL:查询表中的数据:
select * from 表名;
1.语法:
select(查询)
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询: 1.多个字段的查询 2.去除重复
select distinct 字段名 from 表名;
3.计算列
SELECT 字段名,字段名,字段名,字段名+字段名 FROM student;
SELECT 字段名,字段名,字段名,字段名 + IFNULL(字段名,0) FROM student;
4.起别名
SELECT 字段名,字段名 别名,字段名 别名,字段名 + IFNULL(字段名,0) AS 别名 FROM student;
3.条件查询: 1.where子句后跟条件 2.运算符 *>、<、<=、>=、=、<> *BETWEEN…AND *IN(集合) *LIKE
*——:单个任意字符 *%:多个任意字符 *IS NULL *and 或 && *or 或 || *not 或 !SELECT*FROM student WHERE age > 20;
SELECT*FROM student WHERE age < 20;等
SELECT * FROM student WHERE age >= 20 && age <= 30; // 年龄在 20-30之间
SELECT * FROM student WHERE age >= 20 AND age<= 30; // 年龄在 20-30之间
简化写法:
SELECT * FROM student WHERE age BETWEEN 20 AND 30; // 年龄在 20-30之间
//查询年龄22岁,18岁,25岁
SELECT * FROM student where age=22 or age=18 or age=25;
简化写法:
SELECT * FROM student WHERE age IN (22,18,25);
查询成绩为NULL的
SELECT * FROM student WHERE english IS NULL;
查询成绩不为NULL的
SELECT * FROM student WHERE english IS NOT NULL;
*LIKE:模糊查询
SELECT * FROM student WHERE english IS NULL;
-- 查询姓马的
SELECT * FROM student WHERE NAME LIKE "马%";
-- 查询第二个字是化的
SELECT * FROM student WHERE NAME LIKE "___腾%";
-- 查询名字是三位数的
SELECT * FROM student WHERE NAME LIKE "___";
-- 查询名字中包含马的
SELECT * FROM student WHERE NAME LIKE "%马%";
DQL
1.排序查询 2.聚合函数 3.分组查询 4.分页查询
2.约束 3.多表之间的关系 4.范式 5.数据库的备份和还原
DQL
1. 排序查询
语法: roder by 子句
order by 排序字段 排序方式1,排序字段2 排序方式2..
排序方式 :
ASC : 升序,默认的。 SELECT * FROM student ORDER BY math ASC
DESC : 降序 SELECT * FROM student ORDER BY math DESC
注意: 如果有多个排序条件,则当前的条件值一样时,才会判断第二个条件
SELECT * FROM student ORDER BY math ASC, english ASC
- 聚合函数:将一列数据作为一个整体,进行纵向的计算。
- count
- 一般选择非空的列:主键
- count(*)SELECT COUNT(IFNULL(english,0)) FROM student; — max:计算最大值 — min:计算最小值 —sum:计算和 —avg:计算平均值
注意:聚合函数的计算,排除null值 解决方法: 1. 选择不包含非空的列进行计算 2. IFNULL函数 3. 分组查询: - 语法:group by 分组字段 - 注意: — 分组之后查询的字段:分组字段,聚合函数 — where 和 having 的区别? --- where 在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来 --- where 后不可以跟聚合函数,having可以进行聚合函数的判断;
SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex;
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id)>2;
4.分页查询 1. 语法:limit 开始的索引,每页查询的条数; 2. 公式:开始的索引 = (当前的页码 -1)* 每页的条数 3. 分页操作是一个”方言”
约束
* 概念: 对表中的数据进行限定,保证数据的正确性、有效性和完整性。 * 分类: 1. 主键约束:primarykey 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foregin key
* 非空约束:not null 1. 创建表时添加约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL ); 2. — 删除 name的约束 ALTER TABLE stu MODIFY NAME VARCHAR(20) 3. — 创建表后添加约束 ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL * 唯一约束:unique 1. 创建表时添加唯一约束 1. CREATE TABLE stu( id INT, phone_number VARCHAR(20) UNIQUE ); 2. 删除唯一约束 ALTER TABLE stu DROP INDEX phone_number; 3. 创建表后,添加唯一约束 ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE
* 主键约束:primarykey 1. 创建表时添加主键 CREATE TABLE stu( id INT PRIMARY KEY , NAME VARCHAR(20) ); 2. 删除主键 ALTER TABLE stu DROP PRIMARY KEY;
3. 创建完成之后添加主键 ALTER TABLE stu MODIFY id INT PRIMARY KEY;
4. 自动增长: * 概念:如果某一列时数值类型的,使用 auto_increment 可以完成值的自动增长 * 创建表添加自动增长 CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); * — 删除自动增长 ALTER TABLE stu MODIFY id INT * — 添加自动增长 ALTER TABLE stu MODIFY id INT AUTO_INCREMENT
* 外键约束:foreign key 1. 在创建表时,可以添加外键 * 语法: creat table 表名( … 外键列 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) )
2. 删除外键 * ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk; 3. 创建表之后,添加外键 * ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id)
4. 级联操作 *ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE DELETE CASCADE
1. 级联更新:ON UPDATE CASCADE 2. 级联删除:ON DELETE CASCADE