3、mysql数据库表操作

  1. 云栖社区>
  2. 博客>
  3. 正文

3、mysql数据库表操作

曲~线 2018-09-15 23:40:00 浏览623
展开阅读全文

[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;

网友评论

登录后评论
0/500
评论
曲~线
+ 关注