目录
1、默认约束
2、设置自增列
3、查看表定义
4、修改表名
5、修改字段的数据类型
6、修改字段名
7、添加字段
8、删除字段
9、删除外键约束
10、删除表
补充:
首页 数据库 mysql教程 MySQL优化之简单语法_MySQL

MySQL优化之简单语法_MySQL

Jun 01, 2016 pm 01:00 PM
语法


登录后复制

1、默认约束

    --mysql
    CREATE TABLE emp
    (
    id INT DEFAULT 12
    )
登录后复制

2、设置自增列

MYSQL的自增列一定要是有索引的列,设置种子值要在表的后面设置
  --mysql
    -- 设置自增ID从N开始
    CREATE TABLE emp (
    ID INT  PRIMARY KEY AUTO_INCREMENT
    ) AUTO_INCREMENT = 100 ; --(设置自增ID从100开始)
登录后复制
设置自增列的步长,可以分为全局级别和会话级别,如果是会话级别,那么当用户新建一个会话的时候,那么步长又回到了全局级别mysql不能设置为表级别的步长!!
mysql服务器维护着2种mysql的系统参数(系统变量):全局变量(global variables)和会话变量(session variables)。
它们的含义与区别如其各占的名称所示,session variables是在session级别的,对其的变更只会影响到本session;global variables是系统级别的,
对其的变更会影响所有新session(变更时已经存在session不受影响)至下次mysql server重启动。
注意它的变更影响不能跨重启,要想再mysql server重启时也使用新的值,那么就只有通过在命令行指定变量选项或者更改选项文件来指定,
而通过SET变更是达不到跨重启的。
每一个系统变量都有一个默认值,这个默认值是在编译mysql系统的时候确定的。
对系统变量的指定,一般可以在server启动的时候在命令行指定选项或者通过选项文件来指定
当然,大部分的系统变量,可以在系统的运行时,通过set命令指定其值。
查看系统当前默认的自增列种子值和步长值
SHOW GLOBAL VARIABLES LIKE 'auto_incre%'; -- 全局变量
登录后复制
问:如果有一张表,里面有个字段为id的自增主键,当已经向表里面插入了10条数据之后,删除了id为8,9,10的数据,再把mysql重启,
之后再插入一条数据,那么这条数据的id值应该是多少,是8,还是11?
答:如果表的类型为MyISAM,那么是11。如果表的类型为InnoDB,则id为8。
这是因为两种类型的存储引擎所存储的最大ID记录的方式不同,MyISAM表将最大的ID记录到了数据文件里,重启mysql自增主键的最大ID值也不会丢失;
而InnoDB则是把最大的ID值记录到了内存中,所以重启mysql或者对表进行了OPTIMIZE操作后,最大ID值将会丢失。
顺便说一下MYSQL获取当前表的自增值的四种方法
(1) SELECT MAX(id) FROM person   针对特定表
(2) SELECT LAST_INSERT_ID()  函数   针对任何表
(3) SELECT @@identity    针对任何表
登录后复制
@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。
一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。
使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。
(4)  SHOW TABLE STATUS LIKE 'person' 
登录后复制
如果针对特定表,建议使用这一种方法
得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID.

3、查看表定义

 DESC emp
登录后复制

4、修改表名

ALTER TABLE emp RENAME emp2
登录后复制

5、修改字段的数据类型

将id字段的int类型改为bigint
ALTER TABLE emp2 MODIFY id BIGINT
登录后复制

6、修改字段名

MYSQL里修改字段名的时候需要加上字段的数据类型否则会报错,而CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”,改变数据类型,例如刚才那个例子,将id列改为bigint数据类型
ALTER TABLE emp2 CHANGE id id BIGINT
登录后复制

7、添加字段

ALTER TABLE emp2 ADD NAME NVARCHAR(200)  NULL
登录后复制

8、删除字段

MYSQL删除字段不需要添加COLUMN关键字的
 ALTER TABLE emp2 DROP NAME
登录后复制

9、删除外键约束

如果是外键约束,需要使用 DROP FOREIGN KEY,如果是主键约束需要使用DROP PRIMARY KEY
--删除外键约束
 ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept
登录后复制
--删除主键约束
 ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept
登录后复制

10、删除表

DROP TABLE emp2
登录后复制
但是如果要同时删除多个表或者删除之前要先判断一下
DROP TABLE IF EXISTS emp1 ,emp2
登录后复制

补充:

USE test;
-- myisam引擎
CREATE TABLE TEST(
ID int unsigned not null auto_increment,
name varchar(10) not null,
  key(name,id))engine=MYISAM auto_increment=100
;

-- innodb引擎
CREATE TABLE TESTIdentity(
ID int unsigned   not null auto_increment,
NID INT UNSIGNED ,
name varchar(10) not null,
  key(id))engine=INNODB auto_increment=100
;

--或者主键
CREATE TABLE TESTIdentity(
ID int unsigned   not null auto_increment,
NID INT UNSIGNED ,
name varchar(10) not null,
  key(id))engine=INNODB auto_increment=100
;

[Database4]
ErrorCode: -2147467259, Number: 1075
ErrorMessage: Incorrect table definition; there can be only one auto column and it must be defined as a key
alter table TESTIdentity modify column nid int auto_increment;
登录后复制
无论innodb引擎还是MYISAM引擎的表中,只能有一个自增列,并且自增列一定是索引列,无论是二级索引还是主键索引

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何快速把你的 Python 代码变为 API 如何快速把你的 Python 代码变为 API Apr 14, 2023 pm 06:28 PM

提到API开发,你可能会想到DjangoRESTFramework,Flask,FastAPI,没错,它们完全可以用来编写API,不过,今天分享的这个框架可以让你更快把现有的函数转化为API,它就是Sanic。Sanic简介Sanic[1],是Python3.7 Web服务器和Web框架,旨在提高性能。它允许使用Python3.5中添加的async/await语法,这可以有效避免阻塞从而达到提升响应速度的目的。Sanic致力于提供一种简单且快速,集创建和启动于一体的方法

PHP8.0中新的类型别名语法 PHP8.0中新的类型别名语法 May 14, 2023 pm 02:21 PM

随着PHP8.0的发布,新增了一种类型别名语法,使得使用自定义的类型变得更加容易。在本文中,我们将深入了解这种新的语法,以及它对开发人员的影响。什么是类型别名?在PHP中,类型别名本质上是一个变量,它引用另一个类型的名称。这个变量可以像其他类型一样使用,并在代码中的任何地方声明。这种语法的主要作用是为常用的类型定义自定义别名,使得代码更加易于阅读和理解。

lambda 表达式的语法和结构有什么特点? lambda 表达式的语法和结构有什么特点? Apr 25, 2024 pm 01:12 PM

Lambda表达式是无名称的匿名函数,其语法为:(parameter_list)->expression。它们具有匿名性、多样性、柯里化和闭包等特点。实际应用中,Lambda表达式可用于简洁地定义函数,如求和函数sum_lambda=lambdax,y:x+y,并通过map()函数应用于列表来进行求和操作。

PHP8.0中的父类调用语法 PHP8.0中的父类调用语法 May 14, 2023 pm 01:00 PM

PHP是一种广泛应用于Web开发的服务器端脚本语言,而PHP8.0版本中引入了一种新的父类调用语法,让面向对象编程更加方便和简洁。在PHP中,我们可以通过继承的方式创建一个父类和一个或多个子类。子类可以继承父类的属性和方法,并可以通过重写父类的方法来修改或扩展其功能。在普通的PHP继承中,如果我们想在子类中调用父类的方法,需要使用parent关键字来引用父

Go语言与JS的联系与区别 Go语言与JS的联系与区别 Mar 29, 2024 am 11:15 AM

Go语言与JS的联系与区别Go语言(也称为Golang)和JavaScript(JS)都是当前流行的编程语言,它们在某些方面有联系,在其他方面又有明显的区别。本篇文章将探讨Go语言与JavaScript之间的联系与区别,同时提供具体的代码示例来帮助读者更好地理解这两种编程语言。联系:都是跨平台的Go语言和JavaScript都是跨平台的,可以在不同的操作系统

了解C语言的基本单位 了解C语言的基本单位 Mar 21, 2024 pm 05:36 PM

C语言作为一种广泛应用于系统编程和应用软件开发的编程语言,其基本单位主要包括变量、数据类型、运算符等。在学习和了解C语言的基础知识时,对这些基本单位的掌握尤为关键。本文将通过具体的代码示例来介绍C语言的基本单位,帮助读者更好地理解。首先,我们来看一下C语言中的变量。变量在C语言中用于存储数据,每个变量都有自己的数据类型,可以存储不同类型的数据,比如整数、浮点

C和C++之间的区别是什么? C和C++之间的区别是什么? Aug 29, 2023 pm 11:53 PM

C编程语言C是一种通用的、高级的语言,最初由DennisM.Ritchie在贝尔实验室开发用于开发UNIX操作系统。C最初是在1972年在DECPDP-11计算机上首次实现的。1978年,BrianKernighan和DennisRitchie制作了第一个公开可用的C描述,现在称为K&R标准。UNIX操作系统、C编译器以及几乎所有UNIX应用程序都是用C语言编写的。由于各种原因,C语言现在已经成为一种广泛使用的专业语言。简单易学结构化语言它产生高效的程序它可以处理低级活动可以在多种计算机

乘方运算在C语言中的用法及语法 乘方运算在C语言中的用法及语法 Feb 18, 2024 pm 04:05 PM

C语言中乘方运算的语法和用法简介:在C语言中,乘方运算(poweroperation)是一种常见的数学运算,它用于计算一个数的幂。在C语言中,我们可以使用标准库函数或者自定义函数来实现乘方运算。本文将详细介绍C语言中乘方运算的语法和用法,并提供具体的代码示例。一、使用math.h中的pow()函数在C语言中,math.h标准库中提供了pow()函数,用于执

See all articles