欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3、mysql数据库表操作

程序员文章站 2022-06-04 07:50:52
...

[toc]

1、创建表

create table 表名(
    列名  类型  是否可以为空,
    列名  类型  是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
  • InnoDB 支持事务回滚,原子性操作
  • myisam 不支持事务,但速度快
是否可以为空
  • 是否可空,null表示空,非字符串
  • not null - 不可空
  • null - 可空
默认值

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

create table 表名(
    nid int not null defalut 2,
    num int not null
)

2、设置自增和主键

自增

自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)

注意:

  1. 对于自增列,必须是索引(含主键)
  2. 对于自增可以设置步长和起始值
create table 表名(
    nid int not null auto_increment primary key,
    num int null
)
或
create table 表名(
    nid int not null auto_increment,
    num int null,
    index(nid)
)

auto_increment 表示:自增

primary key 表示: 主键约束(不能重复且不能为空),有加速查找的效果

主键

主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

create table 表名(
    nid int not null auto_increment primary key,
    num int null
)

create table 表名(
    nid int not null,
    num int not null,
    primary key(nid,num)
)

唯一索引

唯一索引(此列值不能重复)

==unique 唯一索引名称 (列名)==

create table t1(
    id int ....,
    num int,
    xx int,
    unique uq1 (num),
    constraint ....
)

联合唯一索引(此两列排列组合值不能重复)

==unique 唯一索引名称 (列名,列名)==

create table t1(
    id int ....,
    num int,
    xx int,
    unique uq1 (num,xx),
    constraint ....
)

外键

外键,一个特殊的索引,只能是指定内容

creat table color(
    nid int not null primary key,
    name char(16) not null
)

create table fruit(
    nid int not null primary key,
    smt char(32) null ,
    color_id int not null,
    constraint fk_cc foreign key (color_id) references color(nid)
)

3、查看表设置

  • 查看表设置 desc 表名;
  • 以sql语句的方式查看表设置show create table 表名;
  • 以竖向的方式查看show create table 表名 \G;

4、设置自增起始值

  • 设置自增起始值alter table 表名 AUTO_INCREMENT=20;

5、设置步长

MySQL: 设置自增步长

基于会话级别:
  • 查看全局变量show session variables like 'auto_inc%';
  • 设置会话步长set session auto_increment_increment=2;
  • 设置起始值(在表里可以设置起始值,不必在这里设置)set session auto_increment_offset=10;
基于全局级别(基本上不用):
  • 查看全局变量show global variables like 'auto_inc%';
  • 设置会话步长set global auto_increment_increment=2;
  • 设置起始值(在表里可以设置起始值,不必在这里设置)set global auto_increment_offset=10;

(参考)SqlServer:自增步长:

基础表级别:
CREATE TABLE `t5` (
  `nid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `num` int(11) DEFAULT NULL,
  PRIMARY KEY (`nid`,`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=2 DEFAULT CHARSET=utf8
CREATE TABLE `t6` (
  `nid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `num` int(11) DEFAULT NULL,
  PRIMARY KEY (`nid`,`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=4, 步长=20 DEFAULT CHARSET=utf8

删除及清空表

  • 删除表: drop table 表名
  • 清空表数据: delete from 表名
  • 清空表数据和自增起始值:
    truncate table 表名

修改表

  • 添加列:alter table 表名 add 列名 类型
  • 删除列:alter table 表名 drop column 列名
  • 修改列类型:alter table 表名 modify column 列名 类型;
  • 修改列名,类型:alter table 表名 change 原列名 新列名 类型;
  • 添加主键:alter table 表名 add primary key(列名);
  • 删除主键:alter table 表名 drop primary key;</br>
    alter table 表名 modify 列名 int, drop primary key;
  • 添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
  • 删除外键:alter table 表名 drop foreign key 外键名称
  • 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
  • 删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;