数据库的基本命令
MySQL数据库修改密码命令:mysqladmin -u root -p123456 password 4567890
F7查看命令列表
用户权限:grant all privileges on home.* to user@localhost identified by ‘12345’;
指定现在在使用的数据库:select database();
导入数据库: use table source url;
truncate table 表名:破坏表的内部结局,然后再重新创建它
case函数的使用:
select nam,
-> case sex
-> when 0 then ‘男’
-> when 1 then ‘女’
-> else ‘0TH’
-> end as sex
-> from customer;
内连接:
select u.name,o.oid
-> from order_basic as o
-> inner join user as u on o.uid=u.uid;
修改表的引擎: alter table 表明 engine =‘引擎’
事务处理:几个单独的处理作为一个整体来;这样理论称为事务处理
事务的特性:acid:原子性、一致性、隔离性、持续性
查看现在使用的自动提交模式:select @@autocommit
设置自动提交模式命令:set autocommt=0;
分离水平越高,数据的整合型随之越高,但是同时运行性降低
分离水平越低,数据的整合性随之越低,但是同时运行性越高
select @@global.tx_isolation;
select @@session.tx_isolation;
select @@tx_isolation;
set session transaction isolation level read uncommitted;设置事务隔离级别
隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
未提交读(Read uncommitted) 可能 可能 可能
已提交读(Read committed) 不可能 可能 可能
可重复读(Repeatable read) 不可能 不可能 可能
可串行化(Serializable ) 不可能 不可能 不可能
未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据
·提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)
·可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读
·串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
① 脏读: 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据
② 不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
④ 幻读:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
show create database dbname;
create database dbname charachter set charset;
一对多
create table department(
id int primary key,
name varchar(100)
);
create table employee(
id int primary key,
name varchar(100),
salary float(8,2),
dept_id int,
constraint dept_id_fk foreign key(dept_id) references department(id)
);
多对多
create table teacher(
id int primary key,
name varchar(100),
salary float(8,2)
);
create table student1(
id int primary key,
name varchar(100),
grade varchar(10)
);
create table teacher_student1(
t_id int,
s_id int,
primary key(t_id,s_id),
constraint t_id_fk foreign key(t_id) references teacher(id),
constraint s_id_fk foreign key(s_id) references student1(id)
);
一对一
create table human(
id int primary key,
name varchar(100)
);
create table idcard(
id int primary key,
num varchar(100),
constraint huanm_id_fk foreign key(id) references human(id)
);
//set character_set_results=utf8
、表的复杂查询
1、连接查询
1.0连接的基本语法格式:
from TABLE1 join_type TABLE2 [on (join_condition)][where (query_condition)]
TABLE1:左表
TABLE2:右表
join_type:连接的类型。交叉、内连接、左外连接、右外连接
on:设置连接条件
where:对连接查询的结果进步一的筛选
1.1交叉连接
select * from CUSTOMER cross join ORDERS;
或者
select * from CUSTOMER,ORDERS;
select c.name,o.order_number from CUSTOMER c,ORDERS o;
1.2内连接:
隐式内连接:(不使用on关键字,使用where)
select * from CUSTOMER c,ORDERS o where c.id=o.customer_id;
显式内连接:(使用on关键字)
select * from CUSTOMER c inner join ORDERS o on c.id=o.customer_id;
1.3外连接:
左外连接:(返回符合连接条件的所有记录,同时还返回左表中其余的所有记录)
select * from CUSTOMER c left outer join ORDERS o on c.id=o.customer_id;
右外连接:(返回符合连接条件的所有记录,同时还返回右表中其余的所有记录)
select * from CUSTOMER c right outer join ORDERS o on c.id=o.customer_id;
//备份数据库
mysqldump -u root -p123456 test> D:/test.sql