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:ss
5.timestamp:时间戳类型 包含年月日时分秒,yyyy-MM-dd HH:mm:ss
*如果将来不给这个字段赋值,或赋值为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.删除列
alter table 表名 drop 要删除的列名;
4.D(De lete)
drop table 表名;
drop table if exists 表名;
DML:增删改表中数据
1.添加数据:
*语法:
insert into 表名(列名1,列名2,....,列名n) values(值1,值2...值3)
2.删除数据
*语法:
*delete from 表名 where 条件;
truncate table 表名; //删除表,然后在创建一个一模一样的空表
3.修改数据
*语法:
update 表名 set 表名 列名1 =值1,列名2 = 值2,...[where 条件]
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. 排序查询
语法: roder by 子句
order by 排序字段 排序方式1,排序字段2 排序方式2..
排序方式 :
ASC : 升序,默认的。 SELECT * FROM student ORDER BY math ASC
DESC : 降序 SELECT * FROM student ORDER BY math DESC
2. 聚合函数:将一列数据作为一个整体,进行纵向的计算。
1. count:计算个数
1. 一般选择非空的列:主键
2. count(*)
*SELECT COUNT(IFNULL(english,0)) FROM student;
2. max:计算最大值
3. min:计算最小值
4. sum:计算和
5. avg:计算平均值
* 注意:聚合函数的计算,排除null值
解决方法:
1. 选择不包含非空的列进行计算
2. IFNULL函数
3.分组查询:
1. 语法:group by 分组字段
2. 注意:
1. 分组之后查询的字段:分组字段,聚合函数
2. where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组,having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. 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
评论 (0)