mysql环境搭载

  1. 云栖社区>
  2. 博客>
  3. 正文

mysql环境搭载

技术小阿哥 2017-11-27 21:44:00 浏览495
展开阅读全文

1.Net start/stop mySQLservername:MySQL提供了命令行操作,启动或关闭数据库服务器:

2.MySQL的命令分类,分为3个类别:

DDL:data definition languages,定义了4大数据库对象 数据库(DATABASE)、表(TABLE)、视图(VIEW)、索引(INDEX)等,常用的关键字主要包括:Create,dorp,alter

DML:data manipulation language,数据操作语言,用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用的关键字SUID

DCL:data control language,用于控制不同的数据段的许可和访问级别的语句,这些语句定义了数据库、表、字段用户的访问权限和安全级别。常用的关键字grant,revoke

3.数据库一些DDL操作:

 mysql -u username -p password;  :登陆数据库服务器

 create database dbname;:创建一个数据库

 show databases;:显示当前服务器上的所有数据库

 use dbname;使用某个数据库

 show tables;:显示当前使用的数据库集中的所有表

 drop database dbname;:删除指定的数据库

 drop table tablename;:删除指定的表

 create table tablename(column1 type,...,columnn type);:创建表

 create table tablename as (select .....):通过子查询创建表

 desc tablename;:查看表结构

 show create table tablename ;

 DESC tablename;显示表的结构。

ALTER TABLE tablename MODIFY/ADD[COLUMN]column_definition [FIRST | AFTER col_name] :修改表字段的数据类型 /添加字段

上例子:ALTER TABLE emp MODIFY COLUMN age INT(4)  修改字段

 ALTER TABLE emp ADD COLUMN age INT(3)   :添加字段

 ALTER TABLE emp DROP COLUMN age:删除字段

 ALTER TABLE emp CHANGE age newage INT(4):字段更名

修改字段的排列顺序不能单独使用,只能与MODIFY/ADD/CHANGE联合使用

ALTER TABLE emp MODIFY age int(3) AFTER name:把age 放在name之后

ALTER TABLE emp RENAME newemp:表更名

ALTER TABLE emp ENGINE=enginename;更改表的引擎

ALTER TABLE emp DROP FOREIGN KEY foreignkeyname;删除外键

4.关于Create

CREATE DATABASE databsename

CREATE TABLE tablename(fieldvar1,...,fieldvar) VALUES(value1,..,valuen),..,(value1,..,valuen)

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX indexname ON tablename(fieldname)

CREATE OR REPLACE ALGORITHM=TEMPTABLE VIEW viewname[(field1,..,fieldn) ]AS 

5.子查询  创建或者修改原试图

DELIMITER && CREATE TRIGGER triggername BEFORE|AFTER INSERT|UPDATE|DELETE  ON tablename FOR EACH ROW BEGIN 执行子句1;...;执行子句n;END &&                       --只有三种触发器INSERT|UPDATE|DELETE

DROP DATABASE databsename

DROP TABLE tablename

DROP INDEX indexname ON tablename

DROP VIEW IF EXISTS viewname

SHOW TRIGGERS

DROP TRIGGER triggername 

6.用户管理

MySQL的用户管理位于mysql数据库的user表中,只要在该表中插入相应的用户记录,该用户就可以访问。

 INSERT INTO mysql.user(Host,User,Password) VALUES(Hostname,Username,password),同时可以插入相应的权限字段。可以将user当做普通表操作

7.数据库备份

备份表:MYSQLDUMP -u username -p password databasename table1,..tablen > backupname.sql

备份数据库:

Mysqldump -u username -p password --DATABASES databasename1,.. databasenamen  >backupname.sql

还原数据库:

MYSQL-u username -p password <backup.sql文件路径

8.Mysql的数据导入导出:

 SELECT * FROM tablename INTO OUTPUT “输出文件路径.txt” FIELDS TERMINATED BY ‘\、’ OPTIONALLY ENCLOSED BY ‘\”’ LINES STARTING BY ‘\>’ TERMINATED BY ‘\r\n’;

MYSQL -u username -p password -e “查询语句” databasename >文件路径

9.mysql数据类型

整数类型 

TINYINT(1byte),SMALLINT(2byte),MEDIUMINT(3byte),INT(4byte),INTEGER(4byte),BIGINT(8byte)

浮点数类型/定点数类型  

FLOAT(4byte)、DOUBLE(8byte)、DEC(M,D)

日期与时间类型 

YEAR(1byte)、DATE(4byte)、TIME(3byte)、DATETIME(8byte)、TIMESTAMP(4byte)

字符串类型 

CHAR(nbyte),VARCHAR(<65535byte),TINYTEXT(<255byte),TEXT(<65535byte),MEDIUMTEXT(<167772150byte) 、LONGTEXT(<4294967295byte)、ENUM、SET

二进制类型 

BINARY(<Mbit),VARBINARY(<Mbit),BIT(<64bit),TINYBLOB(<255bit),BLOB(<2^16bit),MEDIUMBLOB(<2^24bit),LONGBLOB(<2^32bit)


10.表中各字段(属性)完整性约束条件

PRIMARY KEY

FOREIGN KEY

NOT NULL         该字段只能非空

UNIQUE           该字段只能为一

AUTO_INCREMENT   该字段字段增加

DEFAULT          设置默认值

CREATE TABLE tab1(id INT NOT NULL PRIMARY KEY,name VARCHAR(20) NOT NULL,stu_id INT);

11.一张表的属性包括:字段、字段类型、字段完整性约束、索引、视图、触发器。在创建表的时候要考虑是否需要这些属性中的任何一个。表是数据库的最小单位。

12.索引

索引的作用:创建索引是指在表的一列或多列上建立索引,可以帮助快速查询数据库表中的特定记录,索引是提高数据库性能的重要方式,通过索引查询数据时就可以不必读完记录的所有信息,而只是查询索引列。

使用索引的缺点:索引虽然可以提高数据查询的速度,但是在修改表中数据时会动态的维护索引,需要花费较多时间;索引需要占据物理内存。

索引分类:普通索引、唯一性索引、全文索引、空间索引以及单列索引和多列索引。

索引的设计原则

a.尽量选择唯一性索引

b.为经常需要排序、分组、和联合操作的字段建立索引

c.为常作为查询条件的字段建立索引

d.现在索引的数目,不要在太多字段上建立索引

e.尽量使用前缀来建立索引

创建索引的方式

a.在已有的表上创建索引

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

CREATE UNIQUE INDEX indexname ON tablename(id);

b.创建表时创建索引

CREATE TABLE 表名 (字段名 数据类型 [完整性约束条件],

字段名 数据类型 [完整性约束条件],

...

字段名 数据类型 [完整性约束条件],

[UNIQUE|FULLTEXT|SPATIAL]INDEX|KEY [别名] (字段名1 [(长度)][ASC|DESC]));

UNIQUE:表示创建唯一性索引

FULLTEXT:表示创建全文索引,只能创建在字符串字段上。

SPATIAL:表示创建空间索引

INDEX和KEY:参数用于指定字段为索引,二者选其一就行,作用是一样的

别名:是可选参数

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

长度:可选字段,指索引的长度,必须是字符串类型才可以使用

ASC/DESC:可选字段。


SHOW CREATE TABLE tablename;

CREATE TABLE tablename1(id INT, name VARCHAR(20),sex BOOLEAN,INDEX(id)); 在id字段上创建一个普通索引。

CREATE TABLE tablename1(id INT UNIQUE, name VARCHAR(20),sex BOOLEAN,UNIQUE INDEX indexothername(id ASC)); 在id字段上创建一个唯一性索引。indexothername为别名

CREATE TABLE tablename1(id INT, name VARCHAR(20),sex BOOLEAN,FULLTEXT INDEX(name));在字符字段上创建全文索引

CREATE TABLE tablename1(id INT, name VARCHAR(20),sex CHAR(4),INDEX indexname(name,sex)); 创建一个多字段索引

创建空间索引,要求表的引擎必须是MyISAM类型,而且索引字段必须是非空约束。标准格式为

CREATE TABLE tablename(id INT, spa GEOMETRY NOT NULL, SPATIAL INDEX(spa)) ENGINE=MyISAM;


c.用ALTER TABLE 来创建索引

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引别名(字段名 [(长度)] [ASC|DESC]);

ALTER TABLE tablename ADD UNIQUE INDEX indexname(name(20));

ALTER TABLE tablename ADD INDEX indexname(name,address,id); 创建多列索引


d.删除索引

DROP INDEX 索引名 ON 表名;

DROP INDEX id ON tablename; 删除无名索引

SHOW CREATE TABLE tablename;显示表上的索引。


13.视图

视图是什么:视图是从一个或多个表中导出来的虚拟存在的表。

a.创建形式:

CREATE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名[(字段列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];

例子:

CREATE VIEW viewname AS SELECT * FROM tablename; 创建视图

b.查看视图

DESC viewname;查看视图

SHOW TABLE STATUS LIKE '视图名'

SHOW CREATE VIEW 视图名

c.修改视图

CREATE OR REPLACE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名[(字段列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION];修改视图

ALTER [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW 视图名[(字段列表)] AS SELECT 语句 [WITH [CASCADED|LOCAL] CHECK OPTION]; 修改视图

d.删除视图

DROP VIEW [IF EXISTS] 视图名列表 [PRESTRICT | CASCADE]  删除视图


14.触发器

触发器的工作原理:由INSERT、UPDATE、DELETE 3大事件来触发某个操作。

a.创建只有一个执行语句的触发器:

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句;

例子: CREATE TRIGGER triggername BEFORE INSERT ON tablename FOR EACH ROW INSERT INTO trigger_time VALUES(NOW()chuang);

b.创建有多个执行语句的触发器:

CREATE TRIGGER triggername BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 

BEGIN

   执行语句列表

END


MYSQL中,默认一个语句的结束符为‘;’,可以使用DELIMITER 声明使用其它的结束符

DELIMITER &&

CREATE TRIGGER triggername AFTER DELETE

        ON tablename FOR EACH ROW

        BEGIN

            INSERT INTO trigger_time VALUES("21:01:10");

            INSERT INTO trigger_time VALUES("22:01:10"); 

        END

        &&

DELIMITER ;重新声明为‘;’结束符

c.查看触发器

SHOW TRIGGERS;查看所有触发器

SELECT * FROM information_schema.triggers;mysql的所有的触发器都保存在information_schema数据库中的triggers;mysql表中。

d.删除触发器

DROP TRIGGER 触发器名;删除触发器

15.存储过程及函数

存储过程与函数的区别:存储过程没有返回值,函数有返回值。

a.创建存储过程:

CREATE PROCEDURE pname(parametrList)

          [characteristic] routine_body

参数可以有3种类型:IN OUT INOUT

例子:

CREATE PROCEDURE pname(IN emp_id INT,OUT count_num INT)

READS SQL DATA     //有固定的几个取值,当前为只读数据库

BEGIN

SELECT COUNT(*) INTO count_num FROM employee WHERE d_id=emp_id;

END

INTO 在select语句中给变量赋值。


b.创建存储函数:

CREATE FUNCTION fname(paraList)

RETURNS type

[charaterist] routine_body

例子:

CREATE FUNCTION fname(emp_id INT)

RETURNS VARACHAR(20)

BEGIN

RETURN (SELECT name FROM employee WHERE num=emp_id WHERE num=emp_id);

END

查看存储过程和函数

 SHOW PROCEDURE STATUS LIKE 'pname'

 SHOW FUNCTION  STATUS LIKE 'pname'

 SHOW CREATE FUNCTION pname;  //显示函数实体

 SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='pname';

删除存储过程和函数

 DROP PROCEDURE pname;

 DROP FUNCTION  fname;

c.变量的使用

 DECLARE my_sql INT DEFAULT 10;  //声明变量

 SET  my_sql=30; //变量赋值

 SELECT d_id INTO my_sql FROM employee WHERE id=2;

d.定义条件和处理程序

定义条件和处理程序是事先定义程序执行过程可能遇到的问题,并且定义解决该问题的处理程序,从而提前预测可能出现的问题。

例如:定义MYSQL中"ERROR 1146(42S02)"这个错误条件,名称为"can_not_find"

   DECLARE can_not_find CONDITION FOR SQLSTATE '42S02'

或 DECLARE can_not_find CONDITION FOR 1146

定义处理程序:

例子:DECLARE CONTINUE HANDLER FOR can_not_find SET info='CAN NOT FIND';   //设置了一个变量

e.光标(游标)的使用

 作用:查询语句可能查询出多条记录,使用光标可以逐条的读取查询结果。

 光标的操作包括:声明光标、打开光标、使用光标、关闭光标。

DECLARE cursor_name CURSOR FOR SELECT name,age FROM employee;  //声明

OPEN cursor_name; //打开光标

FETCH cursor_name INTO emp_name,emp_age; //从光标中取一条记录出来

CLOSE cursor_name;


f.MYSQL的流程控制语句

if语句

  IF condition THEN ...

  ELSEIF condition THEN ...

  ELSE ...

  END IF

case语句

  CASE value

WHEN case1 THEN ...

WHEN case2 THEN ...

ELSE ...

  END CASE


LOOP语句

add_num: LOOP

SET count=count+1;

IF count=100 THEN

LEAVE add_num;

END LOOP add_num;


LEAVE 相当于c语言中的break;ITERATE相当于continue

REPEAT语句

   REPEAT 

      ...

   UNTIL condition

   END REPEAT;

WHILE语句

   WHILE condition DO

     ...

   END WHIL



本文转自 a_liujin 51CTO博客,原文链接:http://blog.51cto.com/a1liujin/1652032,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论
技术小阿哥
+ 关注