MySQL之建表(字段索引约束等)

//添加唯一约束
ALTER TABLE table_name ADD unique(`name`);
关于int类型
`upload_id` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '已上传文件的id',

1、UNSIGNED  必须在 NOT NULL的前面    
2、DEFAULT   必须为整型,不能是 '' or null
3、可以简写为 `upload_id` int(10) NOT NULL  DEFAULT 0 COMMENT '已上传文件的id' //非严格模式,可以为空,为空时插入值为0
`upload_id` int(10) NOT NULL  COMMENT '已上传文件的id' //严格模式,不可以为空,为空报错
`upload_id` int(10)  COMMENT '已上传文件的id'  //非严格模式,可以为空,不传值,默认为null

实例 1

实例 2

参考:Link

timestamp 默认值不能为‘0000-00-00 00:00:00’,由于官方文档是1907-01-01 00:00:01开始计算的美国时间,所以国内要+08.

并且timestamp的值插入的时候需要格式化 date("Y-m-d H:i:s");

CREATE TABLE IF NOT EXISTS `keylog`(
   `id` int(10) UNSIGNED AUTO_INCREMENT,
   `onlyauth` varchar(255) NOT NULL,
   `keylog_at` timestamp NOT NULL DEFAULT '1970-01-01 08:00:01' COMMENT '击键时间',
   `content` text COMMENT '上传的内容',
   `uploaded_at` timestamp NOT NULL  DEFAULT '1970-01-01 08:00:01' COMMENT '上传的时间',
   `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE t1 (
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                ON UPDATE CURRENT_TIMESTAMP);  //适用于自动更新updated_at,在创建和更新时都更新时间
CREATE TABLE t1 (
  ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP );  //适用于自动创建created_at,只在创建时更新时间

CREATE TABLE t1 (
  ts2 TIMESTAMP NOT NULL DEFAULT '1970-01-01 08:00:01');  //适用于默认时间戳,不能是'0000-00-00 00:00:00'

实例3

关于 ALTER TABLE:Link

参考:Link


mysql修改字段类型:	 
--能修改字段类型、类型长度、默认值、注释
--对某字段进行修改
ALTER  TABLE 表名 MODIFY COLUMN 字段名 新数据类型 新类型长度  新默认值  新注释; -- COLUMN可以省略
alter  table table1 modify  column column1  decimal(10,1) DEFAULT NULL COMMENT '注释'; -- 正常,能修改字段类型、类型长度、默认值、注释
 
mysql修改字段名:
ALTER  TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;	 
alter  table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释'; -- 正常,此时字段名称没有改变,能修改字段类型、类型长度、默认值、注释
alter  table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释
alter  table table1 change column2 column1 decimal(10,1) DEFAULT NULL COMMENT '注释' -- 正常,能修改字段名、字段类型、类型长度、默认值、注释
alter  table table1 change column1 column2; -- 报错 

实例4

添加:

alter table logs add (
      `created_at` timestamp  DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `updated_at` timestamp  DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
)

删除:

如果报错就单独删除某个字段:

ALTER TABLE logs DROP COLUMN created_at,COLUMN updated_at;

修改:

change 更改字段名和字段类型, modify 更改字段类型但不能更改其字段名name, alter 仅用于更改列默认值 value。

alter table logs alter column `is_remind` set DEFAULT 0

参考范例example:

重命名,重新定义和重新排序列

CHANGEMODIFYALTER子句允许更改现有列的名称和定义。它们具有以下比较特征:

  • CHANGE :

  • 可以重命名列并更改其定义,或两者。

  • 具有比MODIFY更多的能力,但是以牺牲一些操作的便利性为代价。如果不重命名,CHANGE需要将列命名两次。

  • 使用FIRSTAFTER,可以重新排序列。

  • MODIFY :

  • 可以更改列定义但不能更改其 name。

  • CHANGE更方便更改列定义而不重命名。

  • 使用FIRSTAFTER,可以重新排序列。

  • ALTER:仅用于更改列默认值 value。

CHANGE是标准 SQL 的 MySQL 扩展。 MODIFY是 Oracle 兼容性的 MySQL 扩展。

要更改列以更改其 name 和定义,请使用CHANGE,指定旧名称和新名称以及新定义。对于 example,要将INT NOT NULL列从a重命名为b并将其定义更改为使用BIGINT数据类型,同时保留NOT NULL属性,请执行以下操作:

ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;

要更改列定义但不更改其 name,请使用CHANGEMODIFY。使用CHANGE时,语法需要两个列名,因此必须指定两次相同的 name 以保持 name 不变。对于 example,要更改列b的定义,请执行以下操作:

ALTER TABLE t1 CHANGE b b INT NOT NULL;

更改定义更方便MODIFY而不更改 name,因为它只需要列 name 一次:

ALTER TABLE t1 MODIFY b INT NOT NULL;

要更改列 name 但不更改其定义,请使用CHANGE。语法需要列定义,因此要保持定义不变,必须重新指定列当前具有的定义。对于 example,要将INT NOT NULL列从b重命名为a,请执行以下操作:

ALTER TABLE t1 CHANGE b a INT NOT NULL;

对于使用CHANGEMODIFY的列定义更改,定义必须包括应用于新列的数据类型和所有属性,而不是索引属性(如PRIMARY KEYUNIQUE)。原始定义中存在但未为新定义指定的属性不会继续使用。假设列col1被定义为INT UNSIGNED DEFAULT 1 COMMENT 'my column'并且您按如下方式修改列,打算仅将INT更改为BIGINT

ALTER TABLE t1 MODIFY col1 BIGINT;

该语句将数据类型从INT更改为BIGINT,但它也会删除UNSIGNEDDEFAULTCOMMENT属性。为了保留它们,声明必须明确包含它们:

ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值