Mysql增加主键或者更改表的列为主键的sql语句

最近在整理关于MySql的东西,把一些需要记录的东西写下来,以便以后查询和浏览,以下是一些操作技巧。

添加表字段

alter table table1 add transactor varchar(10) not Null;

alter table   table1 add id int unsigned not Null auto_increment primary key

修改某个表的字段类型及指定为空或非空

alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];

alter table 表名称 modify 字段名称 字段类型 [是否允许非空];

修改某个表的字段名称及指定为空或非空

alter table 表名称 change 字段原名称 字段新名称 字段类型 [是否允许非空

删除某一字段

ALTER TABLE mytable DROP 字段 名;

添加唯一键

ALTER TABLE `test2` ADD UNIQUE ( `userid`)

修改主键

ALTER TABLE `test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )

增加索引

ALTER TABLE `test2` ADD INDEX ( `id` )

ALTER TABLE `category ` MODIFY COLUMN `id`  int(11) NOT NULL AUTO_INCREMENT FIRST ,ADD PRIMARY KEY (`id`);

查看表的字段信息

desc 表名;

show columns from 表名;

查看表的所有信息

show create table 表名;

添加主键约束

alter table 表名 add constraint 主键名称(形如:PK_表名) primary key 表名(主键字段);

alter table  表名 add 列名 列类型 unsigned 是否为空 auto_increment primary key;

添加外键约束

alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);

(alter table 主表名 add foreign key (字段 ) references 从表名(字段) on delete cascade)

添加唯一约束

ALTER table 表名 add unique key 约束名 (字段);

删除主键约束

alter table 表名 drop primary key;

删除外键约束

alter table 表名 drop foreign key 外键(区分大小写);

修改表名

alter table t_book rename to bbb;

修改主键的sql语句块如下:

declare @defname varchar(100)

declare @cmd varchar(500)

declare @tablename varchar(100)

declare @keyname varchar(100)

Set @tablename=‘Temp1‘

Set @keyname=‘id‘ --需要設置的key,分隔

select @defname= name

FROM sysobjects so

JOIN sysconstraints sc

ON so.id = sc.constid

WHERE object_name(so.parent_obj) = @tablename

and xtype=‘PK‘

if @defname is not null

begin

select @cmd=‘alter table ‘+ @tablename+ ‘ drop constraint ‘+ @defname

--print @cmd

exec (@cmd)

end

else

set @defname=‘PK_‘[email protected]

select @cmd=‘alter table ‘+ @tablename+ ‘ ADD constraint ‘+ @defname +‘ PRIMARY KEY CLUSTERED(‘[email protected]+‘)‘

exec (@cmd)

如何取主键字段名称及字段类型--得到主键字段名

1:
SELECT TABLE_NAME,COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

WHERE TABLE_NAME<>‘dtproperties‘

2:
EXEC sp_pkeys @table_name=‘表名‘

3:
select o.name as 表名,c.name as 字段名,k.colid as 字段序号,k.keyno as 索引顺序,t.name as 类型

from sysindexes i

join sysindexkeys k on i.id = k.id and i.indid = k.indid

join sysobjects o on i.id = o.id

join syscolumns c on i.id=c.id and k.colid = c.colid

join systypes t on c.xusertype=t.xusertype

where o.xtype = ‘U‘ and o.name=‘要查询的表名‘

and exists(select 1 from sysobjects where xtype = ‘PK‘ and parent_obj=i.id and name = i.name)

order by o.name,k.colid

以上就是关于如何修改MySql数据表的字段类型,默认值和增加新的字段。

时间: 2024-10-14 20:13:15

Mysql增加主键或者更改表的列为主键的sql语句的相关文章

点评阿里JAVA手册之MySQL数据库 (建表规约、索引规约、SQL语句、ORM映射)

下载原版阿里JAVA开发手册  [阿里巴巴Java开发手册v1.2.0] 本文主要是对照阿里开发手册,注释自己在工作中运用情况. 本文内容:MySQL数据库 (建表规约.索引规约.SQL语句.ORM映射) 本文难度系数为三星(★★★) 本文为第四篇 第一篇 点评阿里JAVA手册之编程规约(命名风格.常量定义.代码风格.控制语句.注释规约) 第二篇 点评阿里JAVA手册之编程规约(OOP 规约 .集合处理 .并发处理 .其他) 第三篇 点评阿里JAVA手册之异常日志(异常处理 日志规约 ) 第四篇

使用sql更改表的列的数据类型和添加新列和约束

使用sql更改表的列的数据类型和添加新列和约束 修改数据库表某一列或添加列 --增加一列 ALTER TABLE 表名 ADD 列名 VARCHAR(20) NULL --删除一列 ALTER TABLE 表名 drop COLUMN 列名 --修改一列 alter TABLE 表名 ALTER COLUMN 列名 VARCHAR(40) NULL --修改一列的类型 alter TABLE 表名 ALTER COLUMN 列名 VARCHAR(40)- -添加主键约束 alter table

MySQL优化:使用慢查询日志定位效率较低的SQL语句

MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL . 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态.是否锁表等,可以实时地查看SQ

在数据表中添加一个字段的SQL语句怎么写

如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识. 通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数 增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0

MySQL根据某一个或者多个字段查找重复数据的sql语句

1.表中有id和name 两个字段,查询出name重复的所有数据 1 select * from xi a where (a.username) in (select username from xi group by username having count(*) > 1) 2.查询出所有数据进行分组之后,和重复数据的重复次数的查询数据,先列下: 1 select count(username) as '重复次数',username from xi group by username hav

MySQL 解密 --&gt; 如何查看二进制日志ROW模式下最原始的SQL语句

MySQL的binlog的ROW模式解析          在mysql5.6以后,对主从数据一致性要求变高了,statement格式逐渐不太适合业务的需求了,所以生产环境大家都采用了row模式,row模式是传输最底层的数据变化的insert的模块来进行主从数据的传输,那么在binlog里面就和普通的statement模式有何差别?能否看到最原始的sql语句呢? 1.准备录入数据 mysql> create table test1(id int,c1 varchar(20),type int,a

基于ORACLE数据库的循环建表及循环创建存储过程的SQL语句实现

一.概述 在实际的软件开发项目中,我们经常会遇到需要创建多个相同类型的数据库表或存储过程的时候.例如,如果按照身份证号码的尾号来分表,那么就需要创建10个用户信息表,尾号相同的用户信息放在同一个表中. 对于类型相同的多个表,我们可以逐个建立,也可以采用循环的方法来建立.与之相对应的,可以用一个存储过程实现对所有表的操作,也可以循环建立存储过程,每个存储过程实现对某个特定表的操作. 本文中,我们建立10个员工信息表,每个表中包含员工工号(8位)和年龄字段,以工号的最后一位来分表.同时,我们建立存储

SQL增加,删除,更改表中字段

1. 向表中添加新的字段 alter  table  table_name  add  column_name  varchar2(20) not null 2. 删除表中的一个字段 delete table table_name column column_name 3. 修改表中的一个字段名 alter table table_name rename column oldname to newname 4. 添加主键约束   alter table 表名   add constraint 约

【MySql】查询数据库中所有表及列的信息

1 SELECT 2 TABLE_NAME, -- 表名 3 COLUMN_NAME, -- 字段名 4 DATA_TYPE, -- 字段类型 5 COLUMN_COMMENT -- 字段注释 6 FROM 7 INFORMATION_SCHEMA.COLUMNS 8 WHERE TABLE_SCHEMA = '数据库名称'