一、创建表
语法格式:
create table <表名>(
字段名1 数据类型,
字段名2 数据类型,
…
);
补充:MySQL中常见的数据类型
int 整数(对应Java中的int)
bigint 长整型(对应Java中的long)
float 浮点型(对应Java中的float,double)
char 定长字符串(对应Java中的String)
varchar 可变长字符串,可以根据实际长度动态地分配存储空间(最多存255个字符,对应Java中的StringBuffer/StringBuilder)
date 日期类型(对应Java中的java.sql.Date类型)
BLOB 二进制大对象(存储图片、视频等流媒体信息)Binary Large Object(对应Java中的Object)
CLOB 字符大对象(存储较大文本,比如存储4G的字符串)Character Large Object(对应Java中的Object)
示例:
给表的字段添加默认值:
上图中sex字段的默认值为1.
二、删除表
drop table if exists <表名>;
三、往表中插入数据
注意:(1)insert语句可以颠倒表中字段地顺序,也可以不包含全部的字段(此时未插入的字段若有默认值则为默认值,否则为null)。
(2)也可以只写表名,省略括号与其中的字段序列,此时values后的括号的值的顺序与个数必须与表一致。
例如:
一次插入多个数据(values后跟多个记录):
四、表的复制(通过查询结果创建表)
语法:create table <表名> as <select语句>;
五、批量插入(将查询结果插入一张表中)
语法:insert into <表名> <select语句>;
六、修改表中的数据
语法:update <表名> set 字段名1=值1,字段名2=值2,… where 条件;
注意:没有条件整张表数据改。
七、删除数据
语法格式:delete from <表名> where 条件;
注意:(1)没有条件全部删除。
(2)若表的数据量特别大时,删除表时需要几十分钟甚至几个小时。delete语句执行后并没有释放表的存储空间,这有利于表的恢复(回滚)。若要释放表的存储空间(不能恢复),语句为"truncate table <表名>;"。
八、创建表时的约束(Constraint)
常见约束包括:
1.非空约束(not null)
2.唯一性约束(unique)
注意:上图中说明约束分为列级约束(也称属性级约束)和表级约束(也称元组级约束)。列级约束写在字段后,表级约束写在最后。上图中的例子只有两个记录的usercode和username两个字段都相同时才会报错。
3.主键约束(primary key)
primary key也有表级约束。
主键自增(auto)increment):
navicat实现字段主键自增:
4.外键约束(foreign key)
示例:
注意:外键可以为null;外键引用的字段必须是具有唯一性的字段。
5.检查约束(check)
注意:Oracle数据库有check约束,但是mysql没有,目前mysql不支持该约束。
九、索引
索引相当于一本书的目录,通过目录可以快速地找到对应地资源。在数据库方面,查询一张表时有两种索引方式:
第一种:全表扫描;
第二种:根据索引扫描(效率很高);
注意:索引虽然可以提高检索效率,但是不能随意地添加索引,因为索引也是数据库中地对象,也需要数据库不断地维护。比如,表中地数据经常被修改这样就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。
添加索引是给某一个字段,或者说某些字段添加索引。
索引的适用情况:
数据量庞大,该字段很少的DML(增删改)操作,该字段经常出现在where子句中。
注意:主键和具有unique约束的字段会自动添加索引。根据主键查询效率更高,尽量根据主键检索。
语法格式:
create index <索引名> on <表名>(<字段名>);
drop index <索引名> on <表名>;
示例:
从上图中可以看出,未添加索引是select语句执行时扫描了14个记录,添加了索引后select语句执行时扫描了一条记录。
索引的分类:
注意:模糊查询时,第一个通配符为“%”时,这个时候索引是失效的。