数据库知识总结

一、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)DISTINCT
SELECT 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&REGEXP

通配符:
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)游标(等后续学习的更加透彻再更新)

二、Oracle(后续更新)

三、SQL SERVER(后续更新)

四、Redis(后续更新)

posted on 2024-02-25 20:19  light12  阅读(174)  评论(0编辑  收藏  举报