RDBMS
- 主键(primary key):
- 一个表只能有一个主键
- 不能为null
- 一列或多列的组合
- 能唯一标识每一行
- 复合组件不能包含多余列(删除这个列后,剩下的列不可以依然唯一)
- Innodb表中如果没有主键,会自动定义一个隐藏主键
- 外键:
- 把
A表
中的字段
和B表
中的主键
关联(在A表
插入的时候会检查外键
在B表
中是否存在
) - 关联:
- restrict(限制):如果A表中有关联B表的记录,删除修改B表主键会失败。
- cascade(级联):删除修改B表主键时会自动删除修改A表中对应的记录。
- no action(什么也不做)
- set null:删除修改B表主键时会自动把A表中对应的记录的外键设置为NULL(前提是外键不能设置为not null)。
使用
mysql -h localhost(本地可省略) -u root -p
Enter password:********
- 创建用户:
- 以root用户登录
- 在mysql.user表中增加记录
create user username identified by 'password';
grant all privileges on dbname.* to username@'%' identified by 'password';
flush privileges;
show grants for 'username';
语法
create database 数据库名字;
drop database 数据库名字;
use 数据库名字;
create table 表名(名字 类型);
drop table 表名;
insert into 表名(字段)values(值);
update 表名 set 字段1=值1, 字段2=值2;
delete from 表名 where子句;
- 自增主键:
- 可以设置
自增步长
来方便水平分表(例如:步长为100,最多就能分100张表)。 - 查看
自增步长
:show variables like ‘%auto_inc%’; - 修改
自增步长
:set auto_increment_increment=100 ; - 查看
全局自增步长
:show global variables like ‘%auto_inc%’; - 修改
全局自增步长
:set global auto_increment_increment=100 ; - 持久化修改:set persist auto_increment_increment=100 ;(局部和全局的变量都会被改变,重启MySql也不会丢失修改值)。
- 注意:MySql8 之前
innodb表
会在重启
后丢失自增id
的值导致bug,MySql8 之后就没有问题了。 - 注意2:修改变量后需要重新链接数据库才有效。
- 垂直分表:可以把一张大表的字段分开成多张表,其中一张的id自动生成,其他表的对应id可以用第一张表的id,这样就可以很好的把多张表联系起来了。