#查看所有数据库
show databases; #以;结尾或者*g
#创建数据库
create database diyi;
#用来查询数据库的详细信息
show create database diyi;
#查询所有的字符集及校对规则
show char set;
#创建带有字符集及校对规则的数据库
create database diyi_1;
char set gbk; #设置字符集
collate gbk_chinese_ci; #设置校对规则
show create database diyi_1; #查询数据库的详细信息
#删除数据库 diyi
drop database diyi;
#修改数据库
alter database db_teat #alter,修改的关键字
char set gb2312
collate gb2312_chinese_ci;
-------------------------------------创建与删除表,初始化字段,结构等-------------------------------------
#设置数据库字符集
create database db_school
char set gbk
collate gbk_chinese_ci;
#切换表
use db_school;
#创建表有如下字段
学号 [int] 姓名 [char] 性别 [varchar] 生日 [date] 班级[char]
create table table_1(
student_name CHAR(20), #字符串数据类型一定要给长度,否则只能存储一个字符
student_no int,
birthday date,
class_no varchar(10) #可变的字符串数据类型,一定要给长度,否则只能存储一个字符
);
#查找当前库下的所有表
show tables;
#查看表的详细信息
show create table table_1;
#查看表的基本结构
desc table_1;
#删除表
drop table table_1;
----------------------------------表的结构、名称、格式的增删改查-------------------------------------
#修改表
alter table table_1 rename tb_student; #修改表名 table_1换成tb_student
或:rename table 旧表名 to 新表名;
#添加新的字段
添加到表的最前面 :alter table 表名 add 字段名 数据类型 first;
添加的指定表的后面 :alter table 表名 add 字段名 数据类型 after 指定字段名;
不添加frist或after默认添加到最后
alter table tb_student add nation CHAR(10) first;
alter table tb_student add na varchar(20) after birthday;
#删除字段
语法 :alter table 表名 drop 字段名;
alter table X drop num;
#修改数据类型及位置
语法 :alter table 表名 modify 目标字段 数据类型 first/[after 已有字段]
#注 :不添加first或after,只修改数据类型,不更改位置
alter table tb_class modify class_no varchar(10) after class_name;
alter table tb_class modify class_num CHAR(10) first;
alter table tb_class modify class_num int;
#修改字段名、数据类型及位置
语法 :alter table 表名 change 原字段名 新字段名 原数据类型/新数据类型 first/[after 已有字段]
alter table tb_class change class_no class_b varchar(10);
#只改变字段名字
alter table tb_class change class_b class_no int;
#改变字段名字的同时改变数据类型
alter table tb_class change class_no class_no varchar(10) first;
#修改数据类型并放到字段最前面
alter table tb_class change class_no class_no varchar(10) after class_name;
将class_no字段放到class_name字段后面
#修改字符集
语法 :alter table 表名 charset=新字符集,engine=存储引擎
-------------------------------------------------数据的增删改查-------------------------------------------------------
#数据的改写
#插入数据
语法 :insert into 表名(字段名1...字段名n)values(数据1...数据n);
#全表插入,所有字段都需要插入数据
insert into tb_course values(40002,'软件测试',2,46,8,null);
#指定插入,其余数据为空(NULL)
insert into tb_course(courseno,coursename)values(40003,'经济管理');
#数据的查询
语法 :select from 表名;
#查询tb_class表中的全部数据
select from tb_class;
#查询tb_class表中classno字段和classname字段的数据
#注 :字段不分大小写
select classno,classname from tb_class;
#在tb_student表中查询studentno字段中存储数据为NULL的全部相关信息
select from tb_student where studentno is null;
#注 :数据为NULL时’=’无效,要用is
#数据的删除
语法 :delete from 表名 where 字段名=条件数据;
#删除tb_student表中studentName字段中的小芳的相关数据
delete from tb_student where studentname = '小芳';
#数据的修改
语法 :update 表名 set 字段名='数据' where 字段名=条件数据;
#修改tb_student表中studentNo字段数据与202100001相同的数据更改为2021000101
update tb_student set studentno=2021000101 where studentno=202100001;
#整表的拷贝 制作表的备份
语法 :insert into 备份表表名 select * from 表名;
#前提表结构要一致
创建一个与表二一致的表一 :create table 表名1 liek 表名2;
------------------------------------进阶表查询------------------------------------------------------------
#交叉查询 cross join
#其结果为两表记录数的乘积,可添加 where 过滤结果
语法 :select * from 表1 cross join 表2;
其结果有两百条记录
select from tb_student cross join tb_score;
select from tb_student; #表 tb_student 有十条记录
select from tb_score; #表 tb_score 有二十条记录
语法 :select from 表1 as 别名1 cross join 表2 as 别名2 on 筛选条件;
as 可省略,使用 join 时连接筛选条件的关键字为 on
其结果有两十条记录
select * from tb_student a cross join tb_score b on a.studentNo = b.studentNo;
分组后的筛选条件:having
#内连接 inner join
语法 :select 目标表达式 from 表1 [ inner ] join 表2 on 连接条件 [ where 过滤条件];
查询学生姓名、序号以及平均分
select a.studentno,studentname,AVG(score) 平均分 from tb_student a join tb_score b on a.studentno = b.studentno group by a.studentno;
语法 :select 目标表达式 from 表1,表2 where 连接条件 [ add 过滤条件];
平均分在 80 分以上的学生姓名及平均分
select studentname,AVG(score) 平均分 from tb_student a ,tb_score b where a.studentno = b.studentno group by b.studentno having AVG(score) > 80;
#自连接
某表内数据的查询,需要为表取多个别名
语法1 :select * from 表 [as] 别名1,表 [as] 别名2 where 连接条件 add 过滤条件;
语法2 :select * from 表 [as] 别名1 join 表 [as] 别名2 on 连接条件 where 过滤条件;
#自然连接 natural join
条件 :连接的两表要有相同的字段名称,不需要添加连接条件
语法 :select * from 表1 natural join 表2 where 过滤条件;
use db_school;
select from tb_student where nation in (select nation from tb_student where studentName = '张晓勇') and studentName != '张晓勇';
select from tb_course a left join tb_score b on a.courseNo = b.courseNo where b.score is null;
select a. from tb_class where classNo not in (select classNo from tb_student);
select a. from tb_class a left join tb_student b on a.classNo = b.classNo where b.studentNo is null;
#外连接
#左外连接 left outer join 或 left join
左表为基表,只能返回以基表为根据的满足和不满足连接条件的记录
语法 :select * from 表1 left [outer] join 表2 on 连接条件 [where 过滤条件];
#右外连接 right outer join 或 right join
右表为基表,只能返回以基表为根据的满足和不满足连接条件的记
语法 :select * from 表1 right [outer] join 表2 on 连接条件 [where 过滤条件];
#联合查询 union
语法 :select * from 表1,表2 where 连接条件 union [all]
select * from 表1,表2 where 连接条件 [add 过滤条件];
#---------------------------------------------------------表约束-----------------------------------------------------------
#主键约束 primary key
主键同时只允许存在一个
创建列级主键语法 :create table 表名 (字段1 数据类型 primary key,...字段n 数据类型);
创建表级主键语法 :create table 表名 (字段1 数据类型,...,字段n 数据类型,primary key(字段名));
#创建主键为 studentno 的表 tb_student
create table tb_student1(
studentno int primary key,
studentname CHAR(10),
sex CHAR(5)
);
#创建表级主键
create table tb_student2(
studentno int,
studentname CHAR(10),
sex CHAR(5),
primary key(studentno)
);
#创建组合主键 通过多个数据确定唯一性
create table tb_student3(
studentno int,
studentname CHAR(10),
sex CHAR(5),
primary key(studentno,studentname)
);
#修改表的方式添加主键
语法 :alter table 表名 add primary key(指定字段1,...指定字段n);
#创建主键
alter table tb_student add primary key(studentno);
#创建复合主键
alter table tb_student add primary key(studentname,sex);
#删除主键
语法 :alter table 表名 drop primary key;
#删除所有主键
alter table tb_student drop primary key;
#唯一(候选键) 约束 unique
#创建列级的候选键语法 :create table 表名(字段1 数据类型 unique,...字段n 数据类型);
create table tb_class(
classno int unique,
classname CHAR(10),
classnum CHAR(5)
);
创建并取名 :alter table 表名(字段1 数据类型,...字段n 数据类型,constraint 约束名 unique(字段名));
create table tb_class1(
classno int,
classname CHAR(20),
classnum CHAR(10),
constraint u_c unique(classno)
);
#通过修改表的方式创建候选键
语法 :alter table 表名 add unique(字段名);
alter table tb_class add unique(classname);
创建并取名 :alter table 表名 add constraint 约束名 unique(字段名);
alter table tb_class add constraint u_c unique(classname);
删除候选键 :alter table 表名 drop index 约束名;
alter table tb_class drop index u_c;
------------------------------------------------------数据的完整约束---------------------------------------------------
#创建外键约束
列级方式:字段名 数据类型 references 被参照表名(列名)
表级方式:constraint 外键约束名字 foreign key (列名1,..,列名n) references
被参照表(列名1,......,列名n)。
alter table tb_student add constraint fk_classname foreign key(classname) references tb_class(classname);
#删除表外键约束
alter table 参照表 drop foreign key 外键约束名;
alter table tb_student drop foreign key fk_€eclassno;
#非空约束
#课堂例题
Create table tb_reader(
Id int primary key,
R_name char(10) not null,
Borrow_time date not null,
Book_id char(20),
Book_name char(100),
Constraint fk2 foreign key(book_id) references book(bookId),
Constraint fk1 foreign key(book_name) references book(bookName)
);
#通过 alter table 的方式添加 not null的约束
#把 book_id, book_name设置非空约束
alter table tb_reader modify book_id char(20) not null;
Alter table tb_reader change book_name book_name char(100) null;
#自增约束
- 该字段必须是主键或者是候选键
- 该字段的数据类型必须是整型
- 每个表只能够创建一个自增约束
#创建方式:create table 或者是 alter table
#通过create table 的方式创建
自增约束(auto_increment):
在mysql中,可通过关键字auto_increment为列设置自增属性,只有个整型列才能设 置此属性,每个表只能定义一个auto_increment列,并且必须在该列上定义主键约束 (primary key)或候选键(unique)。
#创建表时,给字段增加自增约束,方法如下:
creat table 表名(字段 数据类型 primary key|unique auto_increment);
create table book2(
id int(10)primary key auto_increment
);
#修改表,为表中已有的字段增加自增约束,方法如下:
alter table tablename modify字段名 数据类型 auto_increment primary key;
alter table book2 modify id int auto_increment primary key;
#修改表,为表中新增字段并同时增加自增约束,方法如下:
alter table 表名 add 字段名 数据类型 primary key auto_increment ;
alter table book2 add id int primary key auto_increment;
#删除表的自增主键约束,分两步:
第一步:修改该字段的数据类型方法,去除自增约束属性,方法如下:
alter table 表名 modify 字段名 数据类型;
alter table book2 modify id char(10) ;
第二步,删除该字段的主键约束,方法如下:
alter table 表名 drop primary key;
alter table book2 drop primary key;
----------------------------------------------------默认值(default)约束---------------------------------------------
默认值约束用纸指定一个字段的默认值。如果没有在该字段值填写数据,则该字段将自动填入这个默认值。
#创建表时,给字段增加默认值约束,方法如下:
create table persons(
id_p int ,
lastname varchar(10) ,
firstname varchar(10),
address varchar(100),
city varchar(20) default 'shanghai'
);
- 以上创建的表person中,对城市
city
给了默认值,在插入数据的时候如果不输入其他值,给一个default,mysql会自动给默认值shanghai
#修改表,对表中已有的字段设置默认值,方法如下:
alter table 表名 alter 字段名 set default 默认值;
alter table persons alter id_p set default 0;
#修改表,在表中新增字段且为该字段设置默认值,方法如下:
alter table 表名 add 字段名 数据类型 default 默认值
alter table persons add sex char(10) default 'man';
#删除表中某个字段的默认值,方法如下:
alter table 表名 alter 字段名 drop default;
alter table persons alter sex drop default;
-- 语法
ALTER USER '用户名'@'主机名'
IDENTIFIED BY '新密码'
REPLACE '旧密码';
-- 例子
ALTER USER 'hcg' @'localhost'
IDENTIFIED BY '66666666';
----------------------------------------------------------聚合函数---------------------------------------------------
#counta()函数的使用:
select count() from 表名;
select count() from tb_test;
select count(字段名) from 表名
例如1:select count(studentNo) from tb_test;
例如2:select count(studentNo) from tb_test where sex = '女';
#sum()函数的使用:
select sun(表达式或字段名) from 表名
例如1:select sum(8 + 9);`
例如2:select sum(studentNo 12) from tb_test;
#max()函数的使用:
select max(表达式或字段名) from 表名;
select sex, count(StudentNo) from tb_score group by sex;
#事务
#事务简介
数据库的事务 (Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败
#开启事务
START TRANSACTION;
或者BEGIN;
#提交事务
COMMIT;
#回滚事务
ROLLBACK;
#事务四大特征
标签:MySql,class,表名,table,tb,alter,select From: https://www.cnblogs.com/tobycold/p/17835000.html原子性 (Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败
一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态
隔离性(lsolation) :多个事务之间,操作的可见性
持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的