数据库

# 展示所有数据库
show databases;
# 展示创建数据库的一些详细操作 以及数据库的字符集 等其他信息 可以用来查看已经创建的数据库的一些详细信息
show create database mysql;
# 创建数据库时指定字符集
create database db2 character set gbk;

show create database db2;
# 删除数据库 如果数据库存在
drop database if exists db2;
# 创建数据库 如果数据库不存在
create database if not exists db2;
# 修改数据库的字符集
alter database db2 character set gb2312;
# 查询正在使用的数据库
select database();
# 查看数据库中的所有表
show tables;
# 使用数据库(选择)
use world;
# 查看表的结构
desc city;

use my_db;
# 创建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp default current_timestamp);

desc student;
# 删除表
drop table student;

show tables;
# 删除表如果表存在
drop table if exists student;
# 修改表的名字
alter table student rename to stu;
# 修改表的字符集
alter table stu character set gbk;

drop table if exists stu;
#查看创建表的操作 与一些详细信息
show create table stu;
# 增加新的一列并指定类型
alter table stu add gender varchar(10);

desc stu;

alter table stu change gender sex varchar(20);
# 修改执行列的类型
alter table stu modify sex varchar(10);
# 插入一行 如果没有指定插入那些元素 则你默认全部修改
insert into stu (id,name,age) values(1,"肖明桓",19);
# 查询表中的全部信息
select* from stu;
# where条件语句 查询指定条件的行
delete from stu where id = 2;

create table stu(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp default CURRENT_TIMESTAMP);

drop table stu;

insert into stu (id,name,age) values(2,"张敏",19);

insert into stu (id,name,age) values(3,"丁杨维",19);

# truncate 在创建一个空表
truncate stu;

#delete from 表名 9[where语句] 删除指定的多少条记录
delete from stu where id = 2;

# updata from 表名 set 列名 = 值 [where条件] 修改指定元组中的列的值 如不加条件则会将列的所有值都修改
update stu set age = 20 where id = 1;

update stu set age = 20;

update stu set score = 70 where id = 2;

update stu set score = 88 where id = 3;

update stu set age = 19 where id = 3;
update stu set age = 21 where id = 2;

update stu set score = 99;

# 排序 asc 升序 desc 降序
select* from stu order by score asc;

# 排序 如果数学成绩一样 则按年龄排序
select* from stu order by score asc, age asc;

聚合函数 计算会排除null值

  1. count:计算个数

一般以主键作为计数标记 一般不用count(*)(只要一列中有一个不为null那么count就加一);

  1. max

  2. min

  3. sum

  4. avg

select count(ifnull(english,0)) from student;

注意聚合函数 计算会排除null值

解决方案:

  1. 选择不为空的列进行计算

  2. 使用ifnull 函数

    select count(ifnull(english,0)) from student; 将english为null的值按0计数

关键字

操作数据库database 的关键字: create 创建 drop删除 alter 修改 show展示

table表的关键字 create创建 drop删除 alter修改 desc展示表的结构

table中的行的插入 insert into 修改 update 删除 delete 查询 select。

SELECT * FROM my_db.stu;
# 主键就是 既非空又唯一的特殊约束 primary key

#添加主键 方式一
alter table stu modify id int primary key;
# 添加主键 方式二 建表的时候定义

# 删除主键 alter table 表名 drop primary key 一张表只有一个主键;
alter table stu drop primary key;

# 非空约束 NOT NULL;
# 创建方式一
alter table stu modify name varchar(32) not null;
#创建方式二 创建表时定义

# 删除非空约束
alter table stu modify name varchar(32);

# 唯一约束 unique
#创建方式一 创建表时定义
#创建方式二
alter table stu modify name varchar(32) unique;
#删除 唯一约束
# 错误方式 alter table stu modify name varchar(32);
alter table stu drop index name ;

# 删除外键
alter table stu1 drop foreign key c_key;
# 添加外键方式一:
alter table stu1 add constraint c_key foreign key(cid) references course(id);
# 添加外键方式二: 创建时就定义 一般格式 constraint 外键名 foreign key(列名) references 表名 (列名);

# 复制表的结构方式一用 like 模板 create table 新表 like 旧表 会将约束关系一同复制;
create table stu2 like stu1;

# 复制表的结构方式二用 create table 新表 select* from 旧表 where 1 = 2 但不会将约束关系一同复制;
create table stu3 select * from stu1 where 1 = 2;
# 复制表的结构与数据 create table 新表 select* from 旧表 但不会将约束关系一同复制;
create table stu4 select* from stu1;

# 主键约束自动增长 不给主键定值的情况下主键会按照主键的上一个值加一
# 添加方式一: alter table 表名 modify 列名 类型 主键约束 auto_increment;
# 添加方式二: 创建表的时候定义;
alter table stu2 modify id int primary key auto_increment;