当一个库建立好,接下来就需要建立表了。建表不关要知道语法,还需要知道列类型、以及索引等。下面只讲建表的语法,关于列类型等就不陈述了。
建表
建表语法:
CREATE TABLE [IF NOT EXISTS] 表名 ( 字段名1 列类型 [属性] [索引], 字段名2 列类型 [属性] [索引], 字段名3 列类型 [属性] [索引], ...... ) [表类型] [表字符集]
这里有个注意点,字段名不要和mysql的关键字一致,如果真要这么做的话,需要在字段名前后加上`符号,这个符号是在tab键的上面。
现在我们来建立一个user表,字段有:用户ID、用户名、用户密码、手机号、性别、生日。
create table if not exists users( user_id int(10) unsigned auto_increment primary key, username varchar(16) not null default '' collate utf8mb4_bin comment '用户名', userpass char(32) not null collate utf8mb4_bin default '', mobile char(11) not null default '' unique, gender enum('未知', '男', '女') default '未知', birth date not null default '1900-01-01', index username(username) ) engine=innodb default charset utf8mb4 collate utf8mb4_general_ci;
通常,我们都会为每个表建立以唯一标识字段,这里即user_id,方便以后的操作。这里username及userpass字段都设置了collate,这是因为,这两个字段和其他不一样,他们是区分大小写的。另外,我们给该表建立了两个索引,分别是mobile字段以及username字段。给mobile设置的是唯一索引,表示手机号不可以重复。给username建立一般索引,是为了加速通过username来查找的速度。
查看表及表结构
表建立完了后,我们想看看是不是真的建立成功了。可以通过show tables来查看当前库下所有表。
mysql> show tables; +---------------+ | Tables_in_job | +---------------+ | users | +---------------+ 1 row in set
该表确实生成成功了,但如果想看看表里有哪些字段及属性呢,那么可以通过desc 表名来查看。
清空及删除表
注意:删除表是一个危险操作,谨慎操作!
删除表语法:DROP TABLE [IF EXISTS] 表名
这里就不做演示了。
清空表语法:TRUNCATE 表名
这里和大家重点讲下,通过truncate users和通过delete from users的区别。
truncate 相当于先将表给删除,然后再重新建立该表。表里所有数据都重置了。
而delete只是删除表的数据,表的一些属性信息,如自增id不会被重置。
修改表
最后,我们来看看修改表是如何来做到的。把它放最后,是因为他的语法最繁杂,是表操作中难度最大的一部分。它的语法如下:
ALTER TABLE 数据表名 alter_spec[,alter_spec] ... table options
我把常用操作做了整理,常见的语法及功能如下:
添加新字段: ALTER TABLE 表名 ADD 字段名 <建表语句> [FISRT|ALTER 列名]
修改字段: ALTER TABLE 表名 change|modify 列表 <建表语句> 注意:modify与change的区别,modify只能修改列类型,change除了修改列类型外还能改列名称。
删除字段: ... DROP 列名
添加索引名称: ... ADD INDEX [INDEX_NAME] (index_col1,index_col2,...)
删除索引: ...DROP INDEX INDEX_NAME
删除主键: ... DROP PRIMARY KEY
添加主键: ... ADD PRIMARY KEY (INDEX_COL1,INDEX_COL2,...)
添加唯一索引: ... ADD UNIQUE [index_name] (index_col1,index_col2,...)
修改表名: RENAME newName
我们来实践看看
首先,添加新字段email,将它放在userpass后面。
ALTER TABLE users ADD email VARCHAR(255) NOT NULL DEFAULT '' AFTER userpass;
修改userpass,将长度改为64位
ALTER TABLE users MODIFY userpass CHAR(64) NOT NULL DEFAULT '' COMMENT '用户登录密码';
修改userpass改为auth
ALTER TABLE users CHANGE userpass `auth` char(32) NOT NULL DEFAULT '';
给email添加普通索引
ALTER TABLE users ADD INDEX eamil(email);
删除email索引
ALTER TABLE users DROP INDEX eamil;
删除唯一索引,和删除普通索引一样
ALTER TABLE users DROP INDEX mobile;
添加唯一索引
ALTER TABLE users ADD UNIQUE mobile(mobile); 或 ALTER TABLE users ADD UNIQUE (mobile);
删除主键,删除前需要先将aoto_increment删除才能删除;
ALTER TABLE users MODIFY user_id INT(10) NOT NULL; ALTER TABLE users DROP PRIMARY KEY;
添加主键
ALTER TABLE users ADD PRIMARY KEY (user_id);
上面只是讲述了表操作的一些语法,关于列类型以及索引等,大家有兴趣的话可以翻阅相关资料。
Atas ialah kandungan terperinci MYSQL表操作. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!