目錄
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致力於提供一種簡單且快速,集創建和啟動於一體的方法

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 02:21 PM

隨著PHP8.0的發布,新增了一種類型別名語法,使得使用自訂的類型變得更加容易。在本文中,我們將深入了解這種新的語法,以及它對開發人員的影響。什麼是類型別名?在PHP中,類型別名本質上是一個變量,它引用另一個類型的名稱。這個變數可以像其他類型一樣使用,並在程式碼中的任何地方聲明。這種語法的主要作用是為常用的類型定義自訂別名,使得程式碼更易於閱讀和理解。

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語言中的用法及文法 Feb 18, 2024 pm 04:05 PM

C語言中乘方運算的語法和用法簡介:在C語言中,乘方運算(poweroperation)是一種常見的數學運算,它用來計算一個數的冪。在C語言中,我們可以使用標準函式庫函數或自訂函數來實作乘方運算。本文將詳細介紹C語言中乘方運算的語法和用法,並提供具體的程式碼範例。一、使用math.h中的pow()函數在C語言中,math.h標準函式庫中提供了pow()函數,用於執

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語言現在已成為廣泛使用的專業語言。簡單易學結構化語言它產生高效的程式它可以處理低階活動可以在多種計算機

See all articles