1 Mysql命令的分类
a) DQL
query
b) DDL
create drop truncate alter(修改)
c) DML
insert delete update
d) TCL
set autocommit = 0 (msyql) commit rollback
--------------------------------------------
create database if not exists 名字
create table table_name(
column_name int primary key,
column_name int not null,
column_name int unique,
constraint xxx check(age>=0 and age<=150),
constraint xxx foreign key column_name references table_name(column_name)
);
2大类
1) primary key not null unique
id
2) check foreign key
foreign key
前提 多张表
emp 子表
empno ename deptno (外键列)
1 suns 10
2 liyi 20
3 lyc 30
dept 父表
deptno dname
10 trainng
20 dev
30 game
2 约束 可以为一列加入多个
3 通过一个查询创建一张表
create table table_name
as select * from a_table_name;
-----------------------------------------
drop database
drop table suns ;
drop table if exists suns ;
truncate 截取
truncate table t_nn;
清空表中数据 ,表中数据所占空间(硬盘)存在
-----------------------------------------
alter table 表名 (修改)
前提 table 已经被创建了
create table t_a(
id int primary key,
name varchar(12),
password varchar(12) --- passwd
);
1 增加一列
alter table t_a add sex varchar(12);
2 删除一列
alter table t_a drop sex;
3 修改列的名字 原始名字 现名
alter table t_a change password passwd varchar(12);
4 修改列的类型
alter table t_a change name name int;
--------------------------------------------------
DML
前提:存在表
insert
insert into table_name (column_name,column_name,...)
values (value1,value2,...);
create table t_insert(
id int primary key,
name varchar(12),
password varchar(12),
birthday date
);
标准
insert into t_insert (id,name,password,birthday)
values(1,'suns','12345',str_to_date('2011-10-01','%Y-%m-%d'));
insert into t_insert (id,name,password,birthday)
values(2,'suns','12345','2011-10-01');
特殊情况
1 如果 你所插入数据 针对于全表所有的列
insert into t_insert values (3,'suns2','12345','2000-10-11');
2 Mysql 主键自动增长的机制
auto_increment
drop table if exists t_insert;
create table t_insert(
id int auto_increment primary key,
name varchar(12),
password varchar(12),
birthday date
);
insert into t_insert(name,password,birthday)
values ('suns','1234','2000-10-11');
update 修改表中数据
a) 全表更新
update t_name set column_name='xxx',column_name='xxx',column_name='xxx';
b) 特定更新
update t_insert
set name='suns4',password='4444',birthday='2004-04-04'
where id in (3,4)
delete 删除表的内容
delete from t_name ;
delete from t_insert;
truncation 删除表的内容 空间留着
delete 删除表的内容 空间删除
delete from t_insert where id = 8;
delete from t_insert where name='suns' and password='123456';
delete from t_insert where name like '%a%';
--------------------------------------------------
1 范式
指导用户数据库建表的一种规范
1) 第一范式 : 概念 用户在创建表时 表中所存储的数据 具有原子性
t_user
id name password
1 suns 123456
2 liyi 888888
t_user_favorite
user_id favorite
1 java
1 c++
1 javascript
2 java
2 c
2 javascript
统计 suns 爱好
liyi
统计suns用户多少种爱好
liyi增加爱好
2) 第二范式: 用户所创建的表
中存储的数据不能
部分依赖
t_student_course
pk (student_id,course_id)
student_id ---> student_name
coures_id ---> course_name
部分依赖 :表中非主键列的数据
依赖部分主键内容
student_id course_id student_name course_name score
001 001 suns corejava 10
002 001 liyi corejava 10
001 002 suns mysql 5
002 002 liyi mysql 5
为什么?
t_s_c
student_id cource_id score
001 002 5
002 002 5
t_s
student_id student_name
001 suns
002 liyi
t_c
course_id course_name
002 mysql
3) 第三范式
在建表中 一个列的值 不能出现 传导(递)性依赖
emp
empno ename sal deptno
1 suns 1000 001
2 liyi 2000 002
3 zzq 2000 001
4 czh 2000 002
dept
dpetno dname
001 training
002 dev
不好
总结
1 列中存储的数据 原子数据
2 列中存储的数据 不能部分依赖
3 列中存储的数据 不能传递性依赖
注意: 1 往往 性能 放弃范式
2 范式会导致执行效率变差
2 ER图 ----> power designer
创建表提供思路
1 单表
2 多表
建立多表时 以表中所
存储的数据关系来建立表
1 : *
dept : emp
1 *
emp * 外键(1主键)
empno ename sal deptno
001 suns 100 001
002 xiaohei 200 002
drop table if exists emp;
dept 1
deptno dname loc
001 training bj
002 dev sh
computer
cid computer_name 型号 价格 sid
1 lenove y470 6000 1
2 dell p555 5000 1
3 tinkpad x201 7000 2
shop
sid name boss
1 黑心 suns
2 没肺 liyi
1 :1
Person Passport
t_person
person_id name birthday p_id (unique)
1 suns 1900 1
2 liyi 1800 2
t_passport
passport_id expiry national
1 10 china
2 10 china
* :*
Student Course
t_student
student_id name age
1 suns 30
2 liyi 32
t_s_c
s_id c_id
1 1
1 2
2 1
2 2
t_course
course_id name score
1 corejava 10
2 spring 12
1 : *
preson jiguan
1 : *
User Order
---------------------------------------------
锁 多用户访问的情况下
把数据 锁住
1) 表锁
set autocommit = 0;
select * from t_account for update;
commit 解锁
2)行锁
set autocommit = 0;
update t_account set balance = 200 where accountname = 'suns';
insert
delete
commit 解锁
锁超时
----------------------------------------
事务
commit 数据提交的数据库中
rollback 从上一次commit开始 所执行
insert delete update
回滚
从上一次commit开始
到本次rollback commit 位置