数据库知识总结
一、Mysql
1、什么是数据库?
(1)数据库(database)
数据库是保存有组织的数据的容器(通常是一个文件或一组文件),数据库是DBMS(数据库管理系统或数据库软件)创建和操作的容器;
(2)表、列、行、主键、数据类型分别是什么
①表:表是由某些特定的字段组成的统一的结构化的存储数据的容器;
②列:列是组成表结构的最基本的单位;
③行:一行表示一条数据库记录,存储着记录信息;
④主键:主键是由数据库表中的一列或者多个列组成的,主键需要唯一;主键不能为空,主键
⑤数据类型:表中的每一个列,定义时都需要设定数据类型;
(3)SQL与SQL的编写规则(大概规则)
①SQL是专门与数据库实现通信的统一语言,但是不同的DBMS的SQL会有小的差异,不会完全相同;
②SQL编写规范
a)SQL语言不区分大小写,但是一般SQL开发人员,关键字使用大写,表名和列名使用小写;
b)在SQL语句中,空格都会忽略掉,所有一般开发人员为了方便读和调试会对SQL语句进行换行;
2、Mysql中一些常用的语句
(1)use:表示切换到需要的数据库
①use databasename:切换到databasename数据库;如果使用命令行连接Mysql数据库,需要使用该语句才能切换到对应的数据库
(2)show:展示数据库服务中的信息,相当于查看的功能;
①show databases:查看数据库服务中的所有数据库;
②show tables:查看数据库服务中的所有表;
③show colums from tablename:查看表结构中所有字段;
④show status:显示服务器的状态信息;
⑤show grants:显示当前登录用户的权限信息;
⑥show warnings:显示服务器警告信息;
⑦show errors:显示服务器错误信息;
⑧net start/stop mysqlname:开启或者关闭mysql服务;
⑨show global variables like 'port':查看服务开启的端口;
⑩flush privileges:刷新缓存;
3、表结构的增删改查
(1)创建表:CREATE TABLE TABLENAME
①创建表基本语句
CREATE TABLE tablename(
columname type 约束条件 comment '字段名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';
CREATE TABLE IF NOT EXISTS tablename(
columname type 约束条件 COMMENT '字段名字'
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='表名';
②创建表时常用的约束条件
a)主键(PRIMARY KEY)
b)外键(constraints foreign_key_idname foreign key(column) references tablename(columnname))
c)不为空(NOT NULL)
d)自增(AUTO_INCREMENT) e)默认值(DEFAULT) f)字段备注信息(COMMENT)
③实例
CREATE TABLE IF NOT EXISTS customers
(
cust_id int NOT NULL AUTO_INCREMENT COMMENT '顾客ID',
cust_name char(50) NOT NULL comment '顾客名',
cust_address char(50) COMMENT '顾客的地址',
cust_city char(50) COMMENT '顾客的城市',
cust_state char(5) COMMENT '顾客的州',
cust_zip char(10) COMMENT '顾客的邮政编码',
cust_country char(50) COMMENT '顾客的国家',
cust_contact char(50) COMMENT '顾客的联系名',
cust_email char(255) DEFAULT '123@qq.com'COMMENT '顾客的联系email地址',
PRIMARY KEY(cust_id)
) ENGINE=InnoDB COMMENT='顾客表';
④自增AUTO_INCREMENT相关
a)每个表只能有一个列上加AUTO_INCERMENT,且该字段必须被索引上;
b)如果在insert时设置了自增的值,则自增的值会被手工设置的值覆盖,且后续自增的值从手工设置的值往后增;
c)在Mysql中可以使用select last_insert_id()查看自增量的最后一个值;
⑤引擎
a)InnoDB:该引擎是可靠的事务处理引擎,但是不支持全文本搜索;
b)MEMORY:等同于MyISAM,由于是存储与内存所以速度较快,适用于临时表;
c)MyISAM:性能极高,支持全文本搜索,但是不支持事务;
(2)修改表:ALTER TABLE TABLENAME
ALTER TABLE TABLENAME 后续的操作; ALTER TABLE TABLENAME ADD COLUMN COLUMNNAME INT; ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME; ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME NEWTYPE; ALTER TABLE TABLENAME RENAME COLUMNNAME TO NEWCOLUMNNAME;
(3)删除表:DROP TABLE TABLENAME
DROP TABLE TABLENAME; RENAME TABLE TABLENAME TO NEWTABLENAME,TABLENAME1 to NEWTABLENAME1;
4、表数据的增删改查
(1)插入数据:INSERT INTO TABLENAME...
INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...); INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) VALUES(VALUE1,VALUE2,VALUE3,...),(VALUE1,VALUE2,VALUE3,...),...; INSERT LOW_PRIORITY ...; INSERT INTO TABLENAME(COLUMN1,COLUMN2,COLUMN3,...) SELECT VALUE1,VALUE2,VALUE3,... FROM TABLENAME1;
(2)更新数据:UPDATE TABLENAME SET...
UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' ; UPDATE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...; UPDATE TABLENAME SET COLUMNNAME='NEWVALUE',COLUMNNAME1='NEWVALUE1' WHERE ...; UPDATE IGNORE TABLENAME SET COLUMNNAME='NEWVALUE' WHERE ...;如果存在错误时,忽略错误,继续往下执行
(3)删除数据:DELETE FROM TABLENAME...
DELETE FROM TABLENAME WHERE...;删除表中的特定行或所有行 TRUNCATE TABLENAME;--删除表中所有的数据,且直接提交不能回滚
5、查询数据库
(1)检索数据
a)DISTINCTSELECT DISTINCT COLUMNNAME FROM TABLENAME; SELECT DISTINCT COLUMNNAME,COLUMNNAME1 FROM TABLENAME; SELECT DISTINCT *FROM TABLENAME; --过滤掉完全相同的行,或者把所有只要存在一个内容不同的数据都查询出来;
b)LIMIT
SELECT *FROM TABLENAME LIMIT 5;--查询小于等于5条数据 SELECT *FROM TABLENAME LIMIT 5,5;--查询从行5开始往后的5条或5条以内的数据 SELECT *FROM TABLENAME LIMIT 5 offset 5;--同上
(2)排序数据:ORDER BY COLUMNNAME
SELECT *FROM TABLENAME ORDER BY COLUMNNAME ;--默认是按照升序排列的(ASC) SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC ;--设置降序 SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC,COLUMNNAME DESC;--如果需要按照多个列排序,中间使用逗号隔开,多个列都需要降序的话多个列都需要加DESC
(3)过滤数据:WHERE
SELECT *FROM TABLENAME WHERE COLUMNNAME...; SELECT *FROM TABLENAME WHERE COLUMNNAME BETWEEN ... AND ...; SELECT *FROM TABLENAME WHERE COLUMNNAME> ... AND ; SELECT *FROM TABLENAME WHERE COLUMNNAME< ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME<= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME>= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME!= ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME<> ... OR ...; SELECT *FROM TABLENAME WHERE COLUMNNAME IS NULL; SELECT *FROM TABLENAME WHERE COLUMNNAME IS NOT NULL; SELECT *FROM TABLENAME WHERE COLUMNNAME IN(...);
(4)使用通配符和正则表达式查询数据:LIKE®EXP
通配符: SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '%jack';--%匹配任意多个字符 SELECT *FROM TABLENAME WHERE COLUMNNAME LIKE '_jack';--%匹配单个字符
正则表达式: SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack';--表示匹配COLUMNNAME列中包含jack的行;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP 'jack|jack1';--表达式中的|表示或者;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '.jack';--表达式中的.表示匹配任意字符;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[123]ton';--表达式中的[]表示匹配[]中的任意字符,表示或的意思;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[1-9]ton';--表达式中的[1-9a-z]表示匹配1-9,a-z中的任意数字或者字母;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '\\.'--表达式中\\表示转义,若特殊字符. - []这些内容,可以在前面加上转义字符表示查询特殊字符内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]*';--表达式中的*表示匹配0个或者多个内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]+';--表达式中的+表示匹配1个或者多个内容;
SELECT *FROM TABLENAME WHERE COULMNNAME REGEXP '[0-9]?';--表达式中的?表示匹配0个或者1个内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,m}';--表达式中的{n,m}表示匹配n到m之间个内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n,}';--表达式中的{n,}表示匹配大于等于n个内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '[0-9]{n}';--表达式中的{n}表示匹配n个内容;
SELECT *FROM TABLENAME WHERE COLUMNNAME REGEXP '^main';--表达式中的^表示匹配开头;
SELECT *FROM TBALENAME WHERE COLUMNNAME REGEXP '$main';--表达式中的$表示匹配结尾;
(5)Mysql的内置函数
①计算字段 SELECT CONCAT(COLUMNNAME ,'(',COLUMNNAME,')') AS COLUMNNAMENEW FROM TABLENAME; ②去除空格字段 SELECT RTRIM(COLUMNNME) FROM TABLENAME;
SELECT LTRIM(COLUMNNAME)FROM TABLENAME; ③使用别名
SELECT AVG(COULUMNAME) as COLUMNNAME1 FROM TABLENAME; ④执行算数计算 +\-\*\/
SELECT COLUMNNAME*2,FROM TABLENAME; ⑤使用数据处理函数 ABS--绝对值
PI--Π
Sqrt--返回数的平方根
Sin--正弦
Cos--余弦
Tan--正切 ⑥聚集函数 a)AVG:返回指定COLUMNNAME的平均值; SELECT AVG(COLUMNNAME)FROM TABLENAME;
SELECT AVG(COLUMNNAME) AS COLUMNNAME1 FROM TABLENAME;
b)SUM:返回指定列值的总和;
SELECT SUM(COLUMNNAME) FROM TABLENAME;
c)COUNT:返回表中行数数量; SELECT COUNT(*) FROM TABLENAME;--返回表中行数数量,包括NULL的行
SELECT COUNT(COLUMNNAME)FROM TABLENAME;--返回表中行数数量,不包括指定COLUMNNAME为NULL的;
d)MIN和MAX:查询表中特特定列值的最大或者最小值;
SELECT MIN(COLUMNNAME) FROM TABLENAME;
SELECT MAX(COULUNNAME) FROM TABLENAME;
(6)分组数据
SELECT COLUMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNAME1 DESC;(在ORDER BY后面的COLUMNNAME可以不是GROUP BY后面的COLUMNNAME,但是根据规范最好是,如下语句)
SELECT COULMNNAME FROM TABLENAME GROUP BY COLUMNNAME ORDER BY COLUMNNAME DESC;
GROUP BY语句使用注意事项 ①GROUP BY 语句在WHERE之后,ORDER BY之前 ②在SELECT语句中使用GROUP BY时,需要查询展示的列在GROUP BY中必须也要有,不然查询出来的结果会不准确;如果在SELECT 中使用表达式,在GROUP BY中也必须使用表达式,不能使用别名;聚集函数可以在SELECT中存在,但是在GROUP BY中不存在; ③如果分组中存在NULL值,则NULL分为单独一组,多个NULL值分为一组;
HAVING过滤分组
WHERE过滤行而HAVING过滤分组,WHERE在分组之前过滤,HAVING在分组之后过滤;
SELECT COLUMNNAME,COUNT(*) FROM TABLENAME GROUP BY COLUMNNAME HAVING COUNT(*)>8;
SELECT COLUMNANME,COUNT(*) FROM TABLENAME WHERE COLUMNANEM ='' GROUP BY COLUMNNAME HAVING COUNT(*)>8;
Mysql中的关键字的顺序:
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT;
(7)子查询
SELECT *FROM TABLENAME WHERE COLUMNNAME IN (SELECT COLUMNNAME FROM TABLENAME1 WHERE COLUMNNAME1='')
SELECT COLUMNNAME (SELECT COUNT(*) FROM TABLENAME WHERE ......s)AS COLUMNNAME FROM TABLENAME ;
(8)组合查询
组合查询:执行多个SELECT 查询语句,并将结果作为单个结果集返回,使用UNION关键字将多个SELECT 查询结果集组合成一个结果集返回; SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME UNION SELECT COLUMNNAME2,COLUMNNAME3 FROM TABLENAME1; UNION规则 ①UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔; ②UNION中的每个查询必须包含相同的列、表达式或聚集函数; ③列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型); ④使用UNION时默认取消掉了重复行,如果需要不取消重复行需要使用UNION ALL;
⑤如果需要对UNION的结果排序,只需要在最后一个SELECT 查询语句后面加上ORDER BY即可;
(9)Mysql中的连接方式
①内连接
a)内连接:自然连接(Naturaljoin)是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉; SELECT *FROM TABLENAME INNER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME = TABLENAME.COLUMNNAME;(比较的分量必须是相同的属性组) b)等值连接:等值连接是关系运算-连接运算的一种常用的连接方式。是条件连接(或称θ连接)在连接运算符为“=”号时,即θ=0时的一个特例
SELECT *FROM TABLENAME,TABLENAME1 WHERE TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME;
②外连接
a)左连接:LEFT JOIN或LEFT OUTER JOIN SELECT *FROM TABLENAME LEFT OUTER JOIN TABLENAME1 ON TABLENAME.COLUMNNAME=TABLENAME1.COLUMNNAME; b)右连接:RIGHT JOIN 或 RIGHT OUTER JOIN SELECT *FROM TABLENAME AS T RIGHT OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME; c)全连接:FULL JOIN 或 FULL OUTER JOIN SELECT *FROM TABLENAME AS T FULL OUTER JOIN TABLENAME1 AS T1 ON T.COLUMNNAME=T1.COLUMNNAME;(Mysql不支持)
(10)全文本搜索
①什么是全文本搜索 a)Mysql中最常用的引擎就是MyISAM和InnoDB搜索引擎,前者支持全文本搜索,后者不支持; b)为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引;若在创建表是进行适当的设置,Mysql就会自动进行索引和重新索引; c)创建表时设置全文本搜索 CREATE TABLE TABLENAME( COLUMNNAME TYPE, FULLTEXT(COLUMNNAME) ) ②进行全文本搜索的基本语法:Match()和Against() a)其中Match()指定被搜索的列,Against()指定要使用的搜索表达式;(一般不区分大小写) b)传递给Match的值必须必须要与FULLTEXT中定义的一致,且如果定义了多列则次序也需要一致; c)全文本搜索会自动根据搜索的匹配优先级排序列出结果; SELECT *FROM TABLENAME WHERE MATCH(COLUMNNAME) AGAINST('需要搜索的内容'); ③进行全文本搜索的更高级语法 a)使用扩展查询 SELECT *FROM TABLENAME WHERE MATCH() AGAINST('需要搜索的内容' with query expansion); b)布尔文本搜索 SELECT *FROM TABLENAME WHERE MATCH AGAINST('需要搜索的内容' IN BOOLEAN MODE) SELECT *FROM TABLENAME WHERE MATCH AGAINST('a +b' IN BOOLEAN MODE);--+表示包含,必须存在+后面的内容; SELECT *FROM TABLENAME WHERE MATCH AGAINST('a -b' IN BOOLEAN MODE);---表示不包含,必须不存在+后面的内容; SELECT *FROM TABLENAME WHERE MATCH AGAINST('a >b' IN BOOLEAN MODE);-->表示包含,而且增加等级; SELECT *FROM TABLENAME WHERE MATCH AGAINST('a <b' IN BOOLEAN MODE);--<表示包含,而且减少; SELECT *FROM TABLENAME WHERE MATCH AGAINST('a (bbbb)' IN BOOLEAN MODE);--()把词组成表达式; SELECT *FROM TABLENAME WHERE MATCH AGAINST('a b*' IN BOOLEAN MODE);--*表示匹配词尾的表达式;
(11)视图
①创建视图 CREATE VIEW VIEWNAME AS SELECT COLUMNNAME,COLUMNNAME1 FROM TABLENAME WHERE COLUMNNAME=''; ②删除视图 DROP VIEW VIEWNAME; ③修改视图 视图一般是在不修改,直接先删除视图再重新创建视图; CREATE OR REPLACE VIEW VIEWNAME AS SELECT ...; ④查询视图 SELECT *FROM VIEWNAME;--查询视图整体的语法与查询表的视图一致
(12)事务
①什么是事务 a)事务可以用来维护数据库的完整性,保证成批的Mysql操作要么完全执行要么完全不执行; b)事务中的关键字:事务(transaction)、回退(rollback)、提交(commit)、保留点(savepoint) ②事务的相关操作语法 SELECT *FROM TABLENAME; START TRANSACTION; DELETE FROM TABLENAME WHERE COLUMNNAME='' SAVEPOINT SAVEPOINTNAME1; DELETE FROM TABLENAME WHERE COLUMNNAME='' SAVEPOINT SAVEPOINTNAME2; ROLLBACK TO SAVEPOINT1; COMMIT;
c)Mysql中可以查看或者设置是否自动提交
SELECT @@AUTOCOMMIT;--0为不自动提交,1为自动提交;
(13)存储过程
①什么是存储过程 a)可能存在一个完整的操作需要多个SQL语句才能完成,可以用存储过程实现; b)为之后的使用而保存的一条或者多条SQL语句的结合,可以视为批处理文件; ②操作存储过程 a)创建存储过程 CREATE PROCEDURE PROCEDURENAME() BEGIN 需要处理的多条语句 END; b)删除存储过程 DROP PROCEDURE IF EXISTS PROCEDURENAME; DROP PROCEDURE PROCEDURENAME; c)调用存储过程 CALL PROCEDURENAME() d)查看存储过程 SHOW CREATE PROCEDURE PROCEDURENAME; SHOW PROCEDURE STATUS; ③创建带参数的存储过程 a)创建 CREATE PROCEDURE PROCEDURENAME( OUT max_columnname decimal(10,2), OUT avg_columnname decimal(10,2), OUT min_columnname decimal(10,2) ) BEGIN SELECT MAX(COLUMNNAME) INTO max_columnname FROM TABLENAME; SELECT AVG(COLUMNNAME) INTO avg_columnname FROM TABLENAME; SELECT MIX(COLUMNNAME) INTO min_columnname FROM TABLENAME; END; b)调用 CALL PROCEDURENAME(@max_columnname,@avg_columnname,@min_columnname); select @lowp; ④创建更加智能的存储过程 a)创建带IN和OUT的存储过程 CREATE PROCEDURE PROCEDURENAME( IN columnname decimal(10,2), OUT columnname1 decimal(10,2) ) BEGIN SELECT SUM(columnname) FROM TABLENAME WHERE TABLENAME.columnname=columnname INTO columnname1; END; CALL PROCEDURENAME(a,@columnname1); b)创建更加智能的存储过程 CREATE PROCEDURE PROCEDURENAME( IN columnname1 INT, IN columnname2 BOOLEAN, OUT columnname3 DECIMALE(10,2) ) BEGIN DECLARE columnname_3 DECIMALE(10,2); DECLARE columnname_2 INT DEFAULT 6; SELECT SUM(item_price*quantity) FROM TABLENAME INTO columnname_3; IF columnanme2 then SELECT columnname_3+(columnname_3*columnname_2/100) INTO columnname_3; END IF; SELECT columnname_3 INTO columnname3; END;
(14)触发器
①什么是触发器 a)在某个表发生更改时自动处理的某一逻辑就是触发器; b)Mysql中的触发器就是在进行DELETE/UPDATE/INSERT操作时自动执行的一条语句; ②操作触发器基本语句 a)创建触发器语句 CREATE TRIGGER TRIGGERNAME BEFORE/AFTER INSERT/UPDATE/DELETE ON TABLENAME FOR EACH ROW SELECT 'PRODUCT ADDED' INTO @TEST; b)删除触发器 DROP TRIGGER TRIGGERNAME; ③操作触发器更高级语句 a)INSERT触发器 CREATE TRIGGER TABLENAME AFTER INSERT ON TABLENAME FOR EACH ROW SELECT NEW.COLUMNNAME INTO @TESTCOLUMNNAME; INSERT INTO orders(ORDER_DATE, CUST_ID) VALUES( NOW(), 10004); SELECT @TESTCOLUMNNAME; b)DELETE触发器
CREATE TRIGGER TRIGGERNAME BEFORE DELETE ON TABLENAME
FOR EACH ROW
INSERT INTO ARCHIVE_TABLE(COLUMNNAME1,COLUMNNAME2,COLUMNNAME3) VALUES(OLD.COLUMNNAME1,OLD.COLUMNNAME2,OLD.COLUMNNAME)
BEGIN
END;
SELECT *FROM ARCHIVE_TABLE;
DELETE FROM TABLENAME WHERE COLUMNNAME='' c)UPDATE触发器:引用名为OLD的虚拟表访问update之前的值,引用NEW的虚拟表访问update之后的表;
CREATE TRIGGER TRIGGERNAME BEFORE UPDATE ON TABLENAME
FOR EACH ROW SELECT NEW.COLUMNNAME = (NEW.COLUMNNAME)INTO @UPDATE;
d)NEW虚拟表中的数据可能会更新,OLD中的值全都是只读的,不能更新; ④创建触发器的规则 a)触发器名需要唯一(触发器名必须在每个表中唯一,但是设计的时候最好在同一个数据库内唯一);需要规定触发器关联的表; b)触发器需要响应的和时间:INSERT/DELETE/UPDATE,AFTER/BEFORE; c)只有表才支持触发器,视图或者临时表不支持触发器; d)每个表每个事件每次只允许一个触发器,所有每个表最多只支持6个触发器; e)如果BEFORE触发器失败,则MySQL将不执行请求的操作。此外,如果BEFORE触发器或语句本身失败,MySQL将不执行AFTER触发器(如果有的话)
(15)安全管理
①管理账户 a)查看用户 SELECT *FROM USER; b)创建用户 CREATE USER USERNAME IDENTIFIED BY 'password' c)删除用户 DROP USER USERNAME; d)重命名用户 RENAME USER USERNAME TO USERNAME1; e)修改密码 SET PASSWORD FOR USERNAME =PASSWORD('aaaaaa') ②设置、收回权限 a)查看用户权限 SHOW GRANTS FOR USERNAME; b)设置权限 GRANT ALL ON DATEBASENAME.* TO USERNAME; GRANT SELECT ON DATEBASENAME.* TO USERNAME; GRANT SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME; c)收回权限 REVOKE ALL ON DATEBASENAME.* TO USERNAME; REVOKE SELECT ON DATEBASENAME.* TO USERNAME; REVOKE SELECT,INSERT,ALTER ON DATEBASENAME.* TO USERNAME;
③操作数据库
a)创建数据库
CREATE DATABASE DATABASENAME;
b)删除数据库
DROP DATABASE DATABASENAME;
c)使用数据库
USE DATABASENAME;
d)查看所有数据库
SHOW DATABASES;
(16)字符集和校对顺序
①查看所有的字符集和校对顺序 a)SHOW CHARACTER SET; b)SHOW COLLATION; ②在创建表是设定字符集和校对顺序 CREATE TABLE TABLENAME( COLUMNNAME INT, COLUMNNAME1 VARCHAR(10) )default character set hebrew collate hebrew_general_ci; ③在特定的列加上字符集和校对顺序 CREATE TABLE TABLENAME( COLUMNNAME INT, COLUMNNAME1 VARCHAR(10) character set hebrew collate hebrew_general_ci ); ④在使用SELECT语句时加上字符集和校对顺序 SELECT *FROM TABLENAME ORDER BY COLUMNNAME DESC collate latin1_general_cs;
(17)索引
索引(index):帮助MySQL高效获取数据的数据结构,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查询算法 (1)索引的优缺点 ①优点 a)在一定程度上大大提高了数据查询速度; b)提高了数据检索效率,降低数据库的IO成本; c)通过索引列对数据进行order by排序,降低数据排序的成本,降低CPU的消耗; ②缺点 a)建立索引会占据磁盘空间,维护索引也需要占据数据库资源; b)索引会影响数据的增删改查速度; (2)索引的分类 ①主键索引 ②唯一索引 ③复合索引 ④普通索引 (3)索引的操作 ①创建索引的三种方式 CREATE INDEX INDEXNAME ON TABLENAME COLUMNNAME ALTER TABLE TABLENAME ADD INDEX INDEXNAME COLUMNNAME; CREATE TABLE TABLENAME (...,INDEX INDEXNAME(COLUMNNAME)); a)CREATE INDEX INDEXNAME ON TABLENAME COLUMNNAME;(普通索引) b)CREATE UNIQU INDEXNAME ON TABLENAME COLUMNNAME;(唯一索引) c)CREATE TABLE TABLENAME(COLUMNNAME TYPE PRIMARY KEY)/ALTER TABLE TABLENAME ADD PRIMARY KEY;(主键索引在创建索引的时候自动就创建了主键索引) d)CREATE INDEX INDEXNAME ON TABLENAME (COLUMNNAME1,COLUMNNAME2); ②删除 DROP INDEX INDEXNAME ON TABLENAME; ④查询 SHOW INDEX FROM TABLENAME;
(18)游标(等后续学习的更加透彻再更新)