这是我个人借助网络文章学习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
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