
1) 使用 CREATE INDEX 语句
可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。
语法格式:
CREATE <索引名>ON <表名>(<列名>[<长度>] [ ASC | DESC])
语法说明如下:
<索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。
<表名>:指定要创建索引的表名。
<列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。
<长度>:可选项。指定使用列前的 length 个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。
ASC|DESC:可选项。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC。
2) 使用 CREATE TABLE 语句
索引也可以在创建表(CREATE TABLE)的同时创建。在 CREATE TABLE 语句中添加以下语句。语法格式:
CONSTRAINT PRIMARY KEY [索引类型] (<列名>,…)
在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的主键。
语法格式:
KEY | INDEX [<索引名>] [<索引类型>] (<列名>,…)
在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的索引。
语法格式:
UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)
在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的唯一性索引。
语法格式:
FOREIGN KEY <索引名><列名>
在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的外键。
在使用 CREATE TABLE 语句定义列选项的时候,可以通过直接在某个列定义后面添加 PRIMARY KEY 的方式创建主键。而当主键是由多个列组成的多列索引时,则不能使用这种方法,只能用在语句的最后加上一个 PRIMARY KRY(<列名>,…) 子句的方式来实现。
1、使用 create table 语句可完成对表的创建, create table 的创建形式:
create table 表名称(列声明)
以创建 people 表为例, 表中将存放 学号(id)、姓名(name)、性别(sex)、年龄(age) 这些内容:
create table people(
id int unsigned not null auto_increment primary key,
name char(8) not null,
sex char(4) not null,
age tinyint unsigned not null
)
其中,auto_increment就可以使Int类型的id字段每次自增1。
2、向表中插入数据使用insert 语句。
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...)
其中 [] 内的内容是可选的, 例如, 要给上步中创建的people 表插入一条记录, 执行语句:
insert into people(name,sex,age) values( "张三", "男", 21 )
3、想要查询是否插入成功,可以通过select 查询语句。形式如下:
select * from people;
扩展资料:
当mysql大批量插入数据的时候使用insert into就会变的非常慢, mysql提高insert into 插入速度的方法有三种:
1、第一种插入提速方法:
如果数据库中的数据已经很多(几百万条), 那么可以 加大mysql配置中的 bulk_insert_buffer_size,这个参数默认为8M
举例:bulk_insert_buffer_size=100M;
2、第二种mysql插入提速方法:
改写所有 insert into 语句为 insert delayed into
这个insert delayed不同之处在于:立即返回结果,后台进行处理插入。
3、第三个方法: 一次插入多条数据:
insert中插入多条数据,举例:
insert into table values('11','11'),('22','22'),('33','33')...
以mysql数据库为例分情况一一说明:两张表:insertTest和insertTest2,前者中有测试数据create table insertTest(id int(4),name varchar(12))
insert into insertTest values(100,'liudehua')
insert into insertTest values(101,'zhourunfa')
insert into insertTest values(102,'zhouhuajian')
1.如果2张表的字段一致,并且希望插入全部数据,可以用这种方法:
INSERT INTO 目标表 SELECT * FROM 来源表
insert into insertTest select * from insertTest2
2.如果只希望导入指定字段,可以用这种方法:
INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表
注意字段的顺序必须一致。
insert into insertTest2(id) select id from insertTest2
3.如果您需要只导入目标表中不存在的记录,可以使用这种方法:
INSERT INTO 目标表
(字段1, 字段2, ...)
SELECT 字段1, 字段2, ...
FROM 来源表
WHERE not exists (select * from 目标表
where 目标表.比较字段 = 来源表.比较字段)
1>.插入多条记录:
insert into insertTest2
(id,name)
select id,name
from insertTest
where not exists (select * from insertTest2
where insertTest2.id=insertTest.id)
2>.插入一条记录:
insert into insertTest
(id, name)
SELECT 100, 'liudehua'
FROM dual
WHERE not exists (select * from insertTest
where insertTest.id = 100)
使用 dual 作表名,select 语句后面直接跟上要插入的字段的值。
4.将查询出来的数据并同其他变量一起插入新的数据表中
insert into t_supp_PurchPlan_s(PurPlanCode,itemcode,Speccode) select 'hello'as PurPlanCode,itemcode,speccode from b_item where id=8
直接将变量放到相应的位置即可(如上将固定的变量或动态变量放入即可)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)