DBS、DBMS、DB三者关系:DBS包含DB、DBMS。
数据库:按照一定的数据结构来组织、存储和管理数据。
mysql -u 用户名 -p 密码
exit
show databases;
create database 数据库名称 character set utf8;
show create database 数据库名称;
use 数据库名称;
drop database 数据库名称;
操作数据表之前一定要先使用数据库。只有使用了具体的数据库,才能在该数据库下创建数据表。
create table 表名称 (表字段);
create table 表名称 (表字段) engine=innodb charset=utf8;
数据库引擎有两个:innodb和myisam。默认数据库引擎是innodb。
show tables;
show create table 数据表名称;
desc 数据表名称;
drop table 数据表名称;
rename table 原数据表名称 to 新数据表名称;
alter table 数据表名称 engine=值 charset=字符集;
// 默认添加的字段放在所有字段最后面
alter table 数据表名称 add 字段名称 字段类型;
// 将新添加的字段放在最前面
alter table 数据表名称 add 字段名称 字段类型 first;
// 将新添加的字段放在某个字段后面
alter table 数据表名称 add 字段名称 字段类型 after 字段名称;
alter table 数据表名称 drop 字段名称;
alter table 数据表名称 change 原字段名称 新字段名称 字段类型;
// 修改后,字段还在原来位置
alter table 数据表名称 modify 字段名称 字段类型;
// 修改后,在所有字段最前面
alter table 数据表名称 modify 字段名称 字段类型 first;
// 修改后,在某个字段后面
alter table 数据表名称 modify 字段名称 字段类型 after 字段名称;
// 全表全字段插入
insert into 数据表名称 (字段1,字段2,字段3...) values (字段1的值,字段2的值,字段3的值...);
// 特定字段插入
insert into 数据表名称 (字段1,字段2) values (字段1的值,字段2的值);
// 一次插入多条数据
insert into 数据表名称 (字段1,字段2,字段3...) values(字段值...),(字段值...),(字段值...).....;
// 删除全部数据
delete from 数据表名称;
// 删除指定数据
delete from 数据表名称 where 条件;
// 修改全部数据
update 数据表名称 set 字段1 = 值1;
// 指定条件修改
update 数据表名称 set 字段1 = 值1 where 修改条件;
// 修改多字段
update 数据表名称 set 字段1 = 值1,字段2 = 值2 where 修改条件;
注意:修改对字段时,使用逗号隔开,不能使用and连接。
// 查询全部数据
select * from 数据表名称;
// 查询指定字段
select 字段1,字段2 from 数据表名称;
// 条件查询
select 字段1,字段2 from 数据表名称 where 条件;
// 排序查询:desc表示降序,asc表示升序
select * from 数据表名称 order by 字段 desc/asc;
// 分组查询
select * from 数据表名称 group by 字段;
// 含有条件的分组查询
select * from 数据表名称 group by 字段 having 条件;
// 分页查询:limit m,n表示跳过m条数据,查询出n条数据。下面的limit 0,5表示跳过0条数据,查询5条数据
// 因此查询出前5条数据。
select * from 数据表名称 limit 0,5;
查询的语句非常丰富,可以是上面的所有查询语句结合使用。格式如下:
select * from 数据表名称 where 条件 order by 字段 desc/asc group by 字段 limit 0,5;
// 为id添加主键约束
create table 数据表名称 (
id int primary key
) default charset=utf8;
主键约束代码:
primary key
// 创建自增约束
create table 数据表名称 (
id int primary key auto_increment
) default charset=utf8;
自增约束代码:
auto_increment
create table 数据表名称 (
name varchar(20) not null
) default charset=utf8;
非空约束代码:
not null
create table 数据表名称 (
name varchar(20) unique
) default charset=utf8;
唯一约束代码:
unique
create table 数据表名称 (
age int default 1
) default charset=utf8;
插入数据时:
// 主动插入数据值,不会触发默认值约束
insert into 数据表名称 (age) values (20);
// 插入null时,不会触发默认值约束
insert into 数据表名称 (age) values (null);
// 不插入,则会触发默认值约束,下面这条插入语句会插入1
insert into 数据表名称 values();
create table 数据表名称 (
id int,
deptid int contraint 约束名 foreign key(外键字段名) references 被依赖的表名(被依赖的字段名)
);
create table 数据表名称 (
id int comment '用户id',
name varchar(50) comment '用户名'
) default charset=utf8;
开启事务
begin;
提交事务
commit;
事务提交会将内存中对数据操作改动,一次性提交到磁盘当中。
回滚事务
rollback;
回滚事务会将内存中对数据库的改动清除,从而保证数据库的数据不受影响。
保存回滚点
savepoint 自定义回滚点名称;
回滚到某个回滚点
rollback to 回滚点名称;
使用事务模拟银行账户流程:
create database mytest character set utf8;
use mytest;
create table test (
id int primary key auto_increment comment '账户id',
name varchar(20) not null comment '用户名称',
money int default 0 comment '账户余额',
status varchar(10) not null comment '账户状态'
) default charset=utf8;
insert into test (name,money,status) values ('张三',2000,'正常');
insert into test (name,money,status) values ('李四',500,'冻结');
begin;
update test set money = money + 200 where name = '张三' and status = '正常';
update test set money = money - 200 where name = '李四' and status = '正常';
select * from test;
注意:如果是在刚刚执行了事务的窗口查看数据,则会出现下面的内容:
这是因为查询的是当前内存中的数据。其实数据库中的数据是没有改变的。可以新开一个窗口进行查看即可知道。
这是因为开启了事务,没有提交之前,都不会对数据库中的数据进行持久性修改。
因为修改失败,所以可以使用回滚。
rollback;