您的位置:首页 > 数据库 > MySQL

MySQL基础命令

2014-04-09 14:26 721 查看
mysql > SHOW CHARACTER SET 查看字符集
mysql> SHOW CARIABLES LIKE ‘%char%’; 查看当前系统所用的字符集 
mysql > SHOW COLLATION查看支持的排序规则:
mysql > SHOW INDEXES FROM stb_name 查看表的索引
mysql > SHOW CREATE VIEW table 查看视图创建的过程信息
查看服务器变量:
1、Mysql > SHOW [{GLOBAL| SESSION} ]VARIABLES[LIKE ‘’];
2、Mysql > SELECT @@{GLOBAL|SESSION}.VARILABLE_NAME;
3、mysql > 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;删除conut,copy两个表

修改表:
修改表名:
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种方式
1、INSERT INTO 表名 VALUES(‘给字段1的赋值’,‘字段2的赋值’。。。),()
例子:INSERT INTO aa VALUES (‘bob’,‘20’),(‘tom’,‘24’)。。
2、INSERT INTO 表名 SET 字段1=‘’,字段2=‘’,。。。
例子:INSERT INTO aa SET Name='bob1',Age='34';
3、使用INSERT…SELECT语句插入从其他表选择的行
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个的,并且按正序排序显示其StuID、Name、ClassID。

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 students,Courses 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表中有Name,Age 而B表中也有Name,Age,就可以用联合查询来将他们 合并在一起。
mysql> SELECT Name,Age FROM A UNION SELECT Name,Age FROM B;

视图:也称为虚表,临时使用,临时生成。
CREATE VIEW 表名 AS (后面SELECT语句生成的虚表)
AS: 以什么结果来创建虚表或者视图,表示用后面的结果来做视图
存储下来的SELECT语句:
CREATE VIEW stu AS SELECT StuID,Name,Age,Gender FROM students;
创建一个视图(虚表),用来让后面查询语句做为查询表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息