MySQL基础命令

mysql >  SHOW CHARACTER SET 查看字符集

mysql>   SHOW CARIABLES LIKE %char%; 查看当前系统所用的字符集 

mysql >  SHOW COLLATION查看支持的排序规则:

mysql >  SHOW INDEXES FROM stb_name 查看表的索引

mysql >  SHOW CREATE VIEW table 查看视图创建的过程信息

查看服务器变量

1Mysql > SHOW [{GLOBAL| SESSION} ]VARIABLES[LIKE ‘’];

   2Mysql > SELECT @@{GLOBAL|SESSION}.VARILABLE_NAME;

3mysql > SELECT * FROM  INFORMATION_SCHEMA.GLOBAL_VARIABLES   WHERE VARIABLE_NAME = sql_mode‘

修改变量

  前提:默认仅管理员有权限修改全局变量

Mysql >  SET {GLOBAL| SESSION} VARIABLE_NAME=value

  注意:无论是全局的还是会话级别的动态变量修改,在重启mysql后都会失效,想永久有效,可定义在配置文件中相应段中[mysqld];

创建表:

CREATE  [TEMPORARY]  TABLE  [IF NOT EXISTS]  tbl_name

例:mysql > CREARE TABLE t3 (Name VARCHAR(50) NOT NULL, Age TINYINT UNSIGNED NOT NULL, PRIMARY KEY(Name,Age));

创建表(复制表结构方法)

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name{ LIKE old_tbl_name | (LIKE old_tbl_name) }

例:mysql> CREATE TABLE copy LIKE conut;

删除表:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

  例子:mysql> DROP TABLE conut,copy;删除conutcopy两个表

修改表:

修改表名:

   ALTER TABLE 旧表名 RENAME [TO] 新表名

例:mysql> ALTER TABLE first RENAME abc;  mysql> ALTER TABLE abc RENAME TO ab;

修改字段的数据类型:

   ALTER TABLE 表名 MODIFY 字段名 数据类型

例:mysql> ALTER TABLE ab MODIFY Name varchar(30);( 原来Name char(20)

修改字段的名字和数据类型 :

   ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

例:mysql> ALTER TABLE ab CHANGE Name NAME char(10);(原来Name varchar(30)

增加字段:

   ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST| AFTER 属性名2];

语法:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST| AFTER 属性名2];

属性名1 -指需要增加的字段名称;

数据类型 -指新增加字段的数据类型;

完整性约束条件 -设置新增字段的完整性约束条件;

        FIRST -将新增字段添加到“属性名2”所指的字段后;(默认添加在最后一个字段)

例:mysql> ALTER TABLE ab ADD Gender2 CHAR(2) NOT NULL AFTER ID

插入语句:3种方式

  1INSERT  INTO 表名 VALUES(‘给字段1的赋值’,‘字段2的赋值’。。。),()

       例子:INSERT  INTO  aa  VALUES (‘bob’,‘20’),(‘tom’,‘24’)。。

2INSERT INTO 表名 SET 字段1=‘’,字段2=‘’,。。。

       例子:INSERT  INTO  aa  SET  Name=‘bob1‘,Age=‘34‘;

  3使用INSERTSELECT语句插入从其他表选择的行

INSERT  INTO  表名  SELECT   clause

       例子:insertinto tbl_name1(col1,col2) select col3,col4 from tbl_name2;

tbl_name1(col1,col2)将其和后面所对应的关系也了出来

             - -如果每一列都有数据

             Insert  into  tbl_name1  select  col3,col4  from  tbl_name2;

              这种情况呢,就是基本两个表的字段是一样的,或者说从后面SELECT  之后的字段是和前面tbl_name1的字段是一样的。

更新语句:UPDATE

      UPDATE语法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要给予哪些值。WHERE子句指定应更新哪些行。如果没有WHERE子句,则更新所有的行。如果指定了ORDER BY子句,则按照被指定的顺序对行进行更新。LIMIT子句用于给定一个限值,限制可以被更新的行的数目。

       MySQL UPDATE赋值被从左到右评估。例如,以下语句对年龄列加倍,然后再进行增加: MySQL> UPDATE persondata SET ageage=age*2, ageage=age+1;

       对item,month这两个表进行更行,让两个表中ID字段相同的元素,把month中的price,更新到item中的price字段,或者说把items字段元素更新成和month中的price字段中的元素一样。

SQL>UPDATE items,month SET items.price=month.price  WHERE items.id=month.id;

UPDATE mysql.user  SET  password = PASSWORD(‘mageedu‘)WHERE User=‘root‘;

更新mysql表中的user字段,当user字段中有root元素时,set(更改)password字段的内容为mageedu

UPDATE更新后,需要用:FLUSH PRIVILEGES 刷新下权限

删除语句:DELETE:

       注意: 一删除一行,不限定为清空表

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_condition]   [ORDER BY ...]   [LIMIT row_count]

   删除关键文件数据时,要看仔细。

   如果有自动增长的字段的话,删除后,不会重新从1开始增长的、

TRUNCATE   ta_name   清空这张表。

     mysql> DELETE FROM user where user=‘‘; 删除user表中user字段为空的行。

MySQL的查询操作:

 ①:单表查询:简单查询②:多表查询:连续查询③:联合查询:

      投影:挑选要显示的字段        选择:挑选符合条件的行

投影:SELECT 字段1, 字段2, ... FROM tb_name;   SELECT * FROM tb_name;

选择:SELECT 字段1, ... FROM tb_name WHERE 子句;

WHERE 子句的判断条件如下:

        ① 布尔条件表达式操作符:=  <=>  <>  <  <=  >  >=

            例:mysql> SELECT Name,Age FROM students WHERE Age >=25;

        ② IS NULL     IS NOT NULL

例如:mysql> SELECT Name,Gender FROM students WHERE TeacherID IS NOT NULL

        ③ LIKE: 支持的通配符: %(任意长度的任意字符)_(任意单个字符)

例如:mysql> SELECT Name,Age FROM students WHERE Name LIKE ‘X%‘;      

        ④ RLIKE, REGEXP: 支持使用正则表达式

例如:mysql> SELECT Name FROM students WHERE Name RLIKE ‘^D.*‘;    

        ⑤:IN: 判断指定字段的值是否在给定在列表中;

例如:mysql> SELECT Name,Age FROM students WHERE Age=‘25,26,27‘;

        ⑥:BETWEEN ... AND ...: 位于指定的范围之间

例如:mysql> SELECT Name,Age FROM students WHERE Age BETWEEN 20 AND 25;

组合条件测试:

         NOT, ! (非)    AND, &&(与)    OR, ||(或)

例如:mysql> SELECT Name,Age FROM students WHERE Age BETWEEN 20 AND 25                         AND NAME RLIKE ‘^S‘;

聚合函数:

     SUM()(和),  AVG()(平均值),  MAX()(最大值),  

     MIN()(最小值),  COUNT()(统计)

例如:mysql> SELECT COUNT(Name) FROM students WHERE Age >20 AND Gender=‘M‘ AND Name RLIKE ‘^S‘;  统计年龄大于20的男生名字以S开头的个数

SELECT  values_to_display  FROM table_name   WHERE expression  

 GROUP BY  how_to_group   HAVING  expression   ORDER BY  how_to_sort

   LIMIT  row_count;

SELECT语句的执行流程:

FROM clause --> WHERE clause --> GROUP BY --> HAVING clause --> ORDER BY ... --> SELECT --> LIMI

FROM 表名 WHERE 满足的条件 GROUP BY 通过什么来分组 HAVING 分组后又要满足什么条件 ORDER BY 以什么分类 LIMIT 限制显示几行

GROUP  BY  sth “以sth为分组”

意思就是:用sth分组后,相同的为一组,就可以排出总组数,然后再进行其他操作

HAVING:通过where对查询加限制条件,那么如果在group by之后我们要对分组里面的数据再加限制条件怎么办呢?答案是having

例子:mysql> SELECT ClassID FROM students GROUP BY ClassID HAVING Count(Name)>=2;

显示students表中,以ClassID为分组,每组人数大于等于2个人的ClassID

ORDER BY排序用的 (也就是以什么来排序的)

Order By keyword是用来给记录中的数据进行分类的。

ORDER BY # ASC:以正序排序 (由小到大)

ORDER BY # DESC:以逆序排列(由大到小)

mysql> SELECT StuID,Name,ClassID FROM students GROUP BY ClassID HAVING COUNT(Name)>2 ORDER BY StuID ASC ;

+-------+--------------+---------+

| StuID | Name         | ClassID |

+-------+--------------+---------+

|     1 | Shi Zhongyu  |       2 |

|     2 | Shi Potian   |       1 |

|     4 | Ding Dian    |       4 |

|     5 | Yu Yutong    |       3 |

|     8 | Lin Daiyu    |       7 |

|     9 | Ren Yingying |       6

+-------+--------------+---------+

例题解释:查找出students表中以ClassID为分组,每个ClassID组中人数(人名个数)大于2个的,并且按正序排序显示其StuIDNameClassID

LIMIT # :只仅显示出 # 行。

mysql> SELECT StuID,Name,ClassID FROM students GROUP BY ClassID HAVING COUNT(Name)>2 ORDER BY StuID ASC LIMIT 3;

和上面例题一样,不过只显示3行的内容。

SELECT语句:

DISTINCT:指定的结果相同的只显示一次;

SQL_CACHE:缓存于查询缓存中;

SQL_NO_CACHE:不缓存查询结果;

SELECT语句只是查询单张表。

MySQL多表查询和子查询:

表的别名:

SELECT * FROM Stable AS S

AS:用作别名。

联结查询:事先将两张或多张表join,根据join的结果进行查询;

cross join: 交叉联结(a+b)(c+d+e)=

自然联结:等值联结

外联结:

左外联结:只保留出现在左外连接运算之前(左边)的关系中的每一个元组;

left_tb LEFT JOIN right_tb ON 连接条件

类似于 SELECT Name FROM studentsCourses WHERE students.StuID = Courses.StuID

ON 后面的连接条件,就和WHERE 后面的连接条件一样,即ON = WHERE此时

SELECT  s.Name  FROM  students  LEFT  J OIN  Courses  ON  students.StuID  =  Courses.StuID

右外联结:只保留出现在右外连接运算之后(右边)的关系中的每一个元组;

left_tb RIGHT JOIN right_tb ON 连接条件

联合查询:将多张表中,相同的字段合并在一起。

SELECT  clause  FROM  table  UNION  SELECT  clause  FROM table2  UNION .......

    比如A表中有NameAge B表中也有NameAge,就可以用联合查询来将他们  合并在一起。

         mysql> SELECT Name,Age FROM A UNION  SELECT  Name,Age  FROM  B;

视图:也称为虚表,临时使用,临时生成。

CREATE  VIEW 表名 AS (后面SELECT语句生成的虚表)

AS: 以什么结果来创建虚表或者视图,表示用后面的结果来做视图

 存储下来的SELECT语句:

CREATE VIEW  stu  AS SELECT StuIDNameAgeGender FROM students

创建一个视图(虚表),用来让后面查询语句做为查询表。


本文出自 “linux运维” 博客,请务必保留此出处http://xz159065974.blog.51cto.com/8618592/1392783

MySQL基础命令,布布扣,bubuko.com

MySQL基础命令

上一篇:SQL 分类统计函数


下一篇:Sql Server 常用的查询