這是我個人借助網絡文章學習MYSQL的過程筆記,希望對大家的有所幫助。
1、DEFUALT關鍵字
CREATE TABLE emp
(
id INT DEFAULT 12
)
2、設置自增長列(auto_increment)
create table temp2(
id INT primary KEY auto_increment,
tname INT
)
mysql的自增長列是不能設置步長的。
查看系統當前默認的自增列種子值和步長值
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、 SELECTMAX(id) FROM person 針對特定表(多線程的情況下會出現問題)
2、 SELECT LAST_INSERT_ID() 函數 針對任何表(auto_increment使用的此方式,顯式使用的時候不要在主鍵列使用)
3、 SELECT@@identity 針對任何表(同上,不要與LAST_INSERT_ID()切換使用)
@@identity 是表示的是最近一次向具有identity屬性(即自增列)的表插入數據時對應的自增列的值,是系統定義的全局變量。
一般系統定義的全局變量都是以@@開頭,用戶自定義變量以@開頭。
使用@@identity的前提是在進行insert操作後,執行select @@identity的時候連接沒有關閉,否則得到的將是NULL值。
4. SHOW TABLE STATUS LIKE’person’
如果針對特定表,建議使用這一種方法
得出的結果裡邊對應表名記錄中有個Auto_increment字段,裡邊有下一個自增ID的數值就是當前該表的最大自增ID.
(獲取此值的SQL:
SELECT table_name,Auto_increment,Engine,Version,Row_format,table_rows,Avg_row_length,
Data_length,Max_data_length,Index_length,Data_free,
Create_time,Update_time,Check_time,table_collation,Checksum,
Create_options,table_comment
FROM information_schema.`TABLES`
WHERE Table_Schema='test'
AND table_name = 'temp1'
)
3、查看表定義
DESC tempt
<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlIGNsYXNzPQ=="hljs sql">4、修改表名
ALTER TABLE tempt RENAME temp1
5、修改字段的數據類型
ALTER TABLE temp1 MODIFY tname INT(20)
MODIFY關鍵字還可以用於改變已存在列的位置
ALTER TABLE temp3 MODIFY tage INT AFTER tname
改變之前
改變之後
6、修改字段名
ALTER TABLE temp1 CHANGE id myid BIGINT
CHANGE命令不僅改變了字段名稱同時還改變了數據類型,當然他也可以只改變類型。
7、添加字段
ALTER TABLE temp3 ADD tsex INT
8、刪除字段
ALTER TABLE temp3 DROP tsex
9、刪除約束
--刪除外鍵約束
ALTER TABLE emp2 DROP FOREIGN KEY fk_emp_dept
--刪除主鍵約束
ALTER TABLE emp2 DROP PRIMARY KEY pk_emp_dept
10、刪除表
DROP TABLE temp3
同時刪除多張表且驗證表是否存在
DROP TABLE IF EXISTS temp1,temp3
11、查看字段實際存儲長度
SELECT LENGTH(id) FROM temp