一. 复习
1. MySQL: - 服务端 - 客户端2. 通信交流 - 授权 - SQL语句 - 数据库 创建数据库: create database db1 default charset utf8; 删除数据库: drop database db1; - 数据表 创建数据表: create table tb1( id int not null auto_increment primary key, name char(10), depatment_id int, constraint fk_l foreign key ('department_id') references 表名('tid') )engine = innodb default charset = utf8; - 数据行 增:insert into tb1(name,age) values('alex','18'); 删:delete from tb1; delete from tb1 where id > 10 truncate table tb1; 改:update tb1 set name = 'root' where > 10 查:select * from tb; # * 的效率低 select id,name from tb; 二. 外键的补充1. 主键: - 一张表 只能有 一个主键 - 一个主键 不一定 是一列主键可以这样写:create table t1( nid int(11) not null auto_increment, pid int(11) not null, num int(11) null, primery key (nid,pid) # 主键有两列,不常用)engine = innodb default charset = utf8;# 主键设置成两列,外键就可以关联两列create table t2( id int auto_increment primary key, name varchar(32), id1 int, id2 int, constraint fk_t1_t2 foreign key ('id1','id2') references t1('nid','pid'))engine = innodb default charset = utf8;create table t1( nid int(11) not null auto_increment, pid int(11) not null, num int(11) null, primery key (nid,pid) # 主键有两列,不常用)engine = innodb default charset = utf8;三. 自增列之起始值show create table t1 # 查看怎么创建的(代码)show create table t1 \G # 查看怎么创建的(代码)create table t1( nid int(11) not null auto_increment, pid int(11) not null, num int(11) null, primery key (nid,pid) # 主键有两列,不常用)engine = innodb auto_increment = 4 default charset = utf8; # 设置auto_increment默认值alter table t1 auto_increment = 1 # 修改自增的初始值四. 自增列之步长 1. MySQL:自增步长 基于会话级别: 登录一次可以设置一个步长,不能像sqlServer一样(可以在每个表里面设置步长) show session variables like 'auto_inc%'; # 查看步长(auto_increment_increment) set session auto_increment_increment = 2; # 设置会话步长 基于全局级别:(尽量不用) show global variables like 'auto_inc%'; # 查看全局变量 set global auto_increment_increment = 2; 更改之后,打开一个会话就会默认使用更改之后的步长2. sqlServer:自增步长 基于表级别: create table t1( nid int(11) not null auto_increment, pid int(11) not null, num int(11) null, primery key (nid,pid) )engine = innodb auto_increment = 4 步长 = 2 default charset = utf8; create table t2( nid int(11) not null auto_increment, pid int(11) not null, num int(11) null, primery key (nid,pid) )engine = innodb auto_increment = 4 步长 = 2 default charset = utf8;
五. 唯一索引(约束不能重复(可以有一个值为空),加速查找)
create table t1( id int ..., num int, xx int, # unique uq1 (num) # num 是唯一的,不允许重复 unique uq1 (num,xx) # num与xx 联合唯一,两个不能都一样 )
PS:
主键 也不能重复,但不能为空 六. 外键的变种a. 用户表和部门表:(一对多) 用户: 部门id 1 alex 1 2 root 1 3 egon 2 4 laoyao 3 部门: 1 服务 2 保安 3 公关
b. 用户表和博客表:(一对一) 用户: 1 alex 2 root 3 egon 4 laoyao 博客表(最多4个): id 博客地址 用户id (FK() + 唯一索引) 1 /alex3714/ 1 2 /yuanchenqi/ 4 一个用户只能有一个博客园:FK() + 唯一索引 进行约束
c. 多对多: 示例1: 用户表(百合网) 相亲记录表 示例2: 用户表 主机表 用户主机关系表