mysql(数据库)

3、创建索引

创建表时创建索引

在该语法中,各参数含义如下:

 unique
该参数为可选项,表示唯一索引

fulltext
该参数为可选项,表示全文索引

spallal
可选参数该参数,表示空间索引

index|key
该参数表示字段的索弓|,二者选一即可

别名
该参数为可选项,表示创建的索引的名称

索引字段名
指定索引对应的字段的名称

长度
该参数为可选项,表示索引的长度

ASC|DESC
该参数为可选项,ASC表示升序排列,DESC表示降序排列。

 

create table表名(字段名1 数据类型[完整性约束条件], 字段名2 数据类型[完整性约束条件], ........... [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [别名](索引字段名 [(长度)])[ASC|DESC]) 分类注释中写明利用 create index 在已有表创建索引

在一个已经存在的表上创建索引,则可使用 create index 语句

语法

create [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名ON 表名 (字段名 [(长度)] [ASC|DESC]);

-- 创建表
drop table if exists book;
create table book (
bookid INT NOT NULL,
bookname VARCHAR(255) NOT NULL,
authors VARCHAR(255) NOT NULL,
info VARCHAR(255) NULL,
comment VARCHAR(255) NULL,
publicyear YEAR NOT NULL
)ENGINE=MyISAM;

这是一个在MySQL中创建表格的语句,它定义了一个名为"book"的表格,表格包含了以下几个列:

bookid:		 #一个整数类型的列,不能为空。
bookname:	 #一个最大长度为255个字符的字符串类型的列,不能为空。
authors:	 #一个最大长度为255个字符的字符串类型的列,不能为空。
info:		 #一个最大长度为255个字符的可选字符串类型的列,可以为空。
comment:	 #一个最大长度为255个字符的可选字符串类型的列,可以为空。
publicyear:	 #一个年份类型的列,不能为空。
在最后的"ENGINE=MyISAM"这部分,指定了使用MyISAM存储引擎来管理这个表。存储引擎是数据库管理系统中的一种组件,它定义了如何存储、查询和操作数据。在这里,使用了MyISAM存储引擎,它是MySQL的一种常见存储引擎,适用于需要频繁查询的场景

-- 创建普通索引
CREATE INDEX bookIndex ON book(bookid);
-- 创建唯一性索引
CREATE UNIQUE INDEX uniqueIndex ON book (bookid);
-- 创建单列索引
CREATE INDEX singleIndex ON book(comment);
-- 创建多列索引
CREATE INDEX mulIndex ON book (authors(20),info(20));
-- 创建全文索引
CREATE FULLTEXT INDEX fullTextIndex ON book(info);
-- 查询表结构
SHOW CREATE TABLE book;

利用 alter table 在已有表创建索引

在已经存在的表中创建索引除了可以使用 create index 还可使用 alter table 语句

语法 alter table 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] Iindex ON 表名 (字段名 [(长度)] [ASC|DESC]);

--- 创建普通索引
ALTER TABLE book ADD INDEX bookIndex(bookid);
-- 创建唯一性索引
ALTER TABLE book ADD UNIQUE uniqueIndex(bookid);
-- 创建单列索引
ALTER TABLE book ADD INDEX singleIndex(comment);
-- 创建多列索引
ALTER TABLE book ADD INDEX mulIndex(authors(20),info(20));
-- 创建全文索引
ALTER TABLE book ADD FULLTEXT INDEX fullTextIndex(info);
-- 查询表结构
SHOW CREATE TABLE book;

删除索引

利用ALTER TABLE删除索引

ALTER TABLE 表名 DROP INDEX 索引名;

-- 创建普通索引
ALTER TABLE book ADD INDEX bookIndex(bookid);
-- 查询表结构
SHOW CREATE TABLE book;
-- 删除索引
ALTER TABLE book DROP INDEX bookIndex;
-- 查询表结构
SHOW CREATE TABLE book;

利用DROP INDEX删除索引 DROP INDEX 索引名 ON 表名;

-- 创建普通索引
ALTER TABLE book ADD INDEX bookIndex(bookid);
-- 查询表结构
SHOW CREATE TABLE book;
-- 删除索引
DROP INDEX bookIndex ON book;
-- 查询表结构
SHOW CREATE TABLE book;

综上

普通的索引的创建:

CREATE INDEX (自定义)索引名 ON 数据表(字段);

复合索引的创建:

CREATE INDEX (自定义)索引名 ON 数据表(字段,字段,。。。);

删除索引:DROP INDEX 索引名;

触发器

在MySQL可在执行 delete(删除)、insert(插入)、update(更新修改)、loaddate(外部文件加载到表中)、replace(插入或更新表中的行) 等语句时激活触发器;除此以外,其它SQL语句则不会激活触发器。

创建触发器

create trigger triggerName BEFORE丨AFTER triggerEVENT ON tableName FOR EACH ROW BEGIN triggerSTMT END

在该语法中,各参数详解如下:

create trigger	 #该参数表示创建触发器

triggerName 	 #该参数表示所要创建的触发器名字

BEFORE和AFTER 	#该参数表示用于指定触发器执行的时机,其中BEFORE指在触发器事件之前执行触发器语句,AFTER指在触发器事件之后执行触发器语句

triggerEVENT	#该参数表示触发事件, 
REPLACE 和 INSERT 语句很像,只不过在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时会先删除原来的数据,然后增加一条新数据。

LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。

INSERT型触发器:
插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发

UPDATE型触发器:
更改某一行时激活触发器,可能通过 UPDATE 语句触发;

DELETE型触发器:
删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发

在MySQL中不能同时在一张表上建立相同类型的触发器。因此,在一张表上最多可建立6个触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

ON tableName	#该参数表示触发事件操作表的名字;

FOR EACH ROW	#该参数表示任何一条记录上的操作满足触发事件时都会触发该触发器

BEGIN … END		#触发器语法中的BEGIN … END其实与存储过程中BEGIN … END的使用是一样的。
MySQL默认以;为分隔符,如果没有声明分割符,则编译器会把存储过程当成SQL语句进行处理从而造成编译过程会报错。所以需要事先用DELIMITER //声明当前段分隔符,让编译器把两个//之间的内容当做触发体的代码。在编写触发器之后利用DELIMITER ;把分隔符还原为默认分隔符;。DELIMITER也可以指定其他符号作为结束符。需要格外注意的是:DELIMITER与要设定的结束符之间一定要有一个空格,否则设定无效。

triggerSTMT		#该参数表示激活触发器后被执行的语句。
-- 创建学生表
DROP TABLE IF EXISTS student;
CREATE TABLE student (
studentID INT,
studentName VARCHAR(50),
classID INT
);

-- 创建班级表
DROP TABLE IF EXISTS class;
CREATE TABLE class (
classID INT,
studentCount INT
);

-- 向班级表中插入数据
INSERT INTO class (classID,studentCount) VALUES (1,0);
INSERT INTO class (classID,studentCount) VALUES (2,0);
INSERT INTO class (classID,studentCount) VALUES (3,0);

-- 创建触发器
DROP TRIGGER IF EXISTS triggerClass;
DELIMITER //
CREATE TRIGGER triggerClass
AFTER INSERT ON student FOR EACH ROW
BEGIN
UPDATE class SET studentCount=studentCount+1 WHERE classID=NEW.classID;
END //
DELIMITER ;

-- 向学生表中插入数据
INSERT INTO student (studentID,studentName,classID) VALUES (1001, 'lili', 1);

-- 查询数据
SELECT * FROM student;
SELECT * FROM class;

要点概述:

该示例中存在两张表,即学生表studen和班级表class。其中,学生表用于存放学生信息,在该表中有一个字段classID表示该学生属于哪个班级;班级表用于存放班级信息,在该表中使用classID表示班级编号,studentCount表示该班级的学生总数 当向学生表中插入数据之后(AFTER)更新班级表中该学生所属班级的学生总数 在该示例中使用了NEW关键字。MySQL中定义了 NEW和 OLD用来表示触发器的所在表中,触发了触发器的那一行数据. (1)、在INSERT型触发器中NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据 (2)、在UPDATE型触发器中OLD 用来表示将要(BEFORE)或已经(AFTER)被修改的原数据,NEW用来表示将要(BEFORE)或已经(AFTER)修改的新数据 (3)、在 DELETE 型触发器中OLD 用来表示将要(BEFORE)或已经(AFTER)被删除的原数据

3、查看触发器 SHOW TRIGGERS;

4、删除触发器 DROP TRIGGER [IF EXISTS] 触发器名称;

MySQL函数

1.数学函数

ABS()绝对值
PIO Π值
RAND()返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值
ROUND(x,y)返回参数x的四舍五入的有y位小数的值
MOD(x,y) 返回x/y的模 (余数)

2.聚合函数
AVG(col)返回指定列的平均值
COUNT(col返回指定列中非NULL值的个数
SUM(col)返回指定列的所有值之和

3.字符串函数
UCASE(str)或UPPER(str) 返回将字符串str中所有字符转变为大写后的结果
TRIM(str)去除字符串首部和尾部的所有空格
RTRIM(str) 返回字符串str尾部的空格
LTRIM(str) 从字符串str中切掉开头的空格
LENGTH(s)返回字符串str中的字符数
ASCIl(char)返回字符的ASCII码值

4.日期和时间函数
CURDATEO或CURRENT DATEO 返回当前的日期
CURTIMEO或CURRENT TIMEO 返回当前的时间
FROM UNIXTIME(时间戳)格式化传入的时间戳,转成日期格式
UNIX TIMESTAMPO获取系统当前的时间戳
NOW0返回当前的时间的日期

5.加密函数
MD50 计算字符串str的MD5校验和
PASSWORD(str) 返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法
SHA0计算字符串str的安全散列算法(SHA)校验和。

6.控制流程函数
7.格式化函数
8.类型转化函数
9.	DATABASEO返回当前数据库名
	USER0或SYSTEM USERO 返回当前登陆用户名
	VERSIONO 返回MySQL服务器的版本
	CONNECTION IDO 返回当前客户的连接ID
	BENCHMARK(count,expr) 将表达式expr重复运行count次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白了个白i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值