语句结束要加“;”
命令行客户端登陆(把mysql.exe路径添加到环境变量中)
mysql –u root –p
创建数据库CREATE DATABASE
CREATE {DATABASE|SCHEMA} [IF NOT EXISTS] dbname
[DEFAULT] CHARACTER SET [=] charset_name
指定数据库的字符集
[DEFAULT] COLLATE [=] collation_name
指定字符集的校对规则
例:mysql>CREATE DATABASE mysql_test
>DEFAULT CHARACTER SET gb2312
>DEFAULT COLLATE gb2312_chinese_ci;
选择数据库USE
USE name (操作数据库之前必须先选择数据库)
修改数据库ALTER DATABASE
(1)ALTER {DATABASE|SCHEMA} dbname
[DEFAULT] CHARACTER SET [=] charset_name
可指定数据库的字符集
[DEFAULT] COLLATE [=] collation_name
可指定字符集的校对规则
(2)ALTER DATABASE dbname
UPGRADE DATA DIRECTORY NAME(更新升级数据目录名称)
删除数据库DROP
DROP {DATABASE|SCHEMA} [IF EXISTS] dbname
查看数据库、存储引擎SHOW
SHOW {DATABASE|SCHEMA} SHOW ENGINES(查看存储引擎)
创建表CREATE TABLE
CREATE TABLE tbname
(Create_definition定义列)
Table_options 表格选项(描述表的存储特性:例引擎)
Partition_options 分区选项
查看表名SHOW
SHOW TABLES {FORM|IN} dbname
[LIKE ‘pattern’|WHERE expr]
表数据的更新ALTER TABLE
ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tb_name
[alter_specification[,alter_specification]…]
[partition_options]
添加新列并可指定位置ADD[COLUMN]
ALTER TABLE dbname.tb_name
ADD COULUMN col_name char(10) NOT NULL DEFAULT ‘Wuhan’ AFTER col_name1
修改指定列的名称和数据类LCHANGE[COLUMN]
ALTER TABLE dbname.tb_name
CHANGE COLUMN old_col_name new_col_name CHAR(1) NULL DEFAULT ‘M’
修改指定列的数据类型或列的位置MODIFY[COLUMN]
ALTER TABLE dbname.tb_name
MODIFY COLUMN cust_name CHAR(20) {FIRST|AFTER col_name}
修改或删除指定列的默认值ALTER [COLUMN]
ALTER TABLE dbname.tb_name
ALTER COLUMN cust_city SET DEFAULT ‘Beijing’
删除列DROP COLUMN
ALTER TABLE dbname.tb_name
DROP COLUMN col_name
删除主键DROP PRIMARY KEY
ALTER TABLE dbname.tb_name
DROP PRIMARY KEY col_name
删除外键DROP FOREIGE KEY
ALTER TABLE dbname.tb_name
DROP FOREIGE KEY col_name
删除索引DROP INDEX
ALTER TABLE dbname.tb_name
DROP INDEX col_name
重命名表
RENAME [TO]
ALTER TABLE dbname.tb_name
RENAME TO dbname.new_tb_name
RENAME TABLE
RENAME TABLE tb_name TO new_tb_name[,tb_name2 TO new_tb_name2]…
复制表CREATE TABLE
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] new_tb_name
{LIKE old_tb_name|(LIKE old_tb_name)}
删除表
DROP [TEMPORARY] TABLE [IF EXISTS]
tb_name[,tb_name]…
[RESTRICT|CASCADE]
显示表的结构
SHOW COLUMNS
SHOW [FULL] COLUMNS {FROM|IN} tb_name [{FROM|IN} tb_name]
[LIKE ‘pattern’|WHERE expr]
DESC
{DESC|DESCRIBE} tb_name [col_name|wild]
表数据的操作
插入表数据INSERT
INSERT…VALUES
可以向表中插入一行或多行数据。
INSERT [LOW_PRIORITY|DELAYED|HIGH_PRIORITY] [IGNORE]
[INTO]tb_name[(col_name)]
{VALUES|VALUE}({expr|DEFAULT},…),(…)…
[ON DUPLICATE KEY UPDATE
col_name=expr[,col_name=expr]…]
INSERT…SET
可以指定插入行中每列的值,也可以只指定部分列的值。
INSERT [LOW_PRIORITY|DELAYED|HIGH_PRIORITY] [IGNORE]
[INTO]tb_name
SET col_name={expr|DEFAULT},…
[ON DUPLICATE KEY UPDATE
col_name=expr[,col_name=expr]…]
INSERT…SELECT
向表中插入其他表的数据。
INSERT [LOW_PRIORITY| HIGH_PRIORITY] [IGNORE]
[INTO]tb_name[(col_name)]
SELECT…
[ON DUPLICATE KEY UPDATE
col_name=expr[,col_name=expr]…]
插入表数据REPLACE
如果一个待插入的表中存在有PRIMARY KEY或UNIQUE KEY,而待插入的数据行中包含有与待插入表的已有数据行中相同的PRIMARY KEY 或UNIQUE KEY 列值,那么INSERT语句将无法插入此行。此时若需要插入这行数据,则可使用REPLACE语句来实现。使用REPLACE语句可以在插入数据之前将表中与待插入的新纪录相冲突的旧记录删除,从而保证新纪录能够正常插入。
REPLACE VALUES
REPLACE [LOW_PRIORITY|DELAYED]
[INTO] tb_name[(col_name,…)]
{VALUES|VALUE} ({expr|DEFAULT},…),(…)…
REPLACE SET
REPLACE REPLACE [LOW_PRIORITY|DELAYED]
[INTO] tb_name
SET col_name={expr|DEFAULT},…
REPLACE SELECT
REPLACE [LOW_PRIORITY|DELAYED]
[INTO] tb_name[(col_name,…)]
SELECT…
删除表数据DELETE
在mysql中,可以使用DELETE语句或TRUNCATE TABLE语句删除表中的一行或多行数据。
从单个表中删除数据DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tb_name
[WHERE where_condition]
[ORDER BY…]
[LIMIT row_count]
从多个表中删除数据DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tb_name[.*] [tb_name[.*]]…
FROM table_references
[WHERE where_condition]
或者
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tb_name[.*] [tb_name[.*]]…
USING table_references
[WHERE where_condition]
例:假设数据库中有三个表tb1/tb2/tb3,他们均含有ID列,现要求删除表tb1中id值等于tb2中id值的所有行,以及表tb2中id值等于tb3中id值的所有行。
在mysql命令行客户端输入如下SQL语句即可实现:
(1)mysql > DELETTE tb1,tb2
->FROM tb1,tb2,tb3
->WHERE tb1.id=tb2.id AND tb2.id=tb3.id;
(2)mysql>DELETE FROM tb1,tb2
->USING tb1,tb2,tb3
->WHERE tb1.id=tb2.id AND tb2.id=tb3.id;
清除表数据语句TRUNCATE TABLE
如若要从表中删除所有的行,不必使用DELETE语句,可以使用TRUNCATE语句直接删除指定表中的所有数据,而且执行速度会比DELETE操作更快。这是因为,TRUNCATE操作的实际过程是先删除原来的表,并在重新创建一个表,而不是逐行删除表中的数据。
TRUNCATE [TABLE] tb_name
修改表数据
使用UPDATE语句修改单个表
UPDATE [LOW_PRIORITY] [IGNORE] tb_name
SET col_name1={expr|DEFAULT} [,col_name2={expr|DEFAULT}]…
[WHERE where_condition]
[ORDER BY…]
[LIMIT row_count]
使用UPDATE语句修改多个表
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr|DEFAULT} [,col_name2={expr|DEFAULT}]…
[WHERE where_condition]
数据库的查询SELECT
SELECT语法
使用SELECT语句可以在需要时从MySQL中快捷方便地检索、统计或输出数据。该语句的执行过程是从数据库中选取匹配的特定的行和列,并将这些数据组织成一个结果集,然后以一张临时表的形式返回。
SELECT(所有的子句必须按照语法格式罗列的顺序来使用)
[ALL|DISTINCT|DISTINCTROW]
[HIGH_PRIORITY]
[STRAIGHT_JOIN]
[SQL_SMALL_RESULT][SQL_BIG_RESULT][SQL_BUFFER_RESULT]
[SQL_CACHE|SQL_NO_CACHE][SQL_CALC_FOUND_ROWS]
select_expr [,select_expr…]
[FROM table_references
[WHERE where_condition]
[GROUP BY {col_name|expr|position}
[ASC|DESC],…[WITH ROLLUP] ]
[HAVING where_condition]
[ORDER BY {col_name|expr|position}
[ASC|DESC],…]
[LIMT{[offset,]row_count|row_count OFFSET offset}]
[PROCEDURE procedure_name(argument_list)]
[INTO OUTFILE ‘file_name’
[CHARACTER SET charset_name]
export_options
|INTO DUMPFILE ‘file_name’
|INTO var_name[,var_name]]
[FOR UPDATE|LOCK IN SHARE MODE]
选择指定的列
查询表中部分列
mysql>SELECT col_name[,col_name]…
>FROM dbname.tb_name;
查询表中所有列
mysql>SELECT *
>FROM dbname.tb_name;
定义并使用列的别名
在系统输出查询结果集中某些列或所有列的名称时,若希望这些列的名称显示为自定义的列名,而非原表中的列名,则可以在SELECT语句中添加AS子句到指定的列名之后,以此来修改查询结果集中列的别名。
col_name [AS] col_alias
例:mysql>SELECT address AS 地址 [,col_name AS alias]…
>FROM dbname.tb_name;
当自定义列名中含有空格时,必须用单引号将列名括起来。
替换查询结果集中的数据
在对表进行查询时,若希望得到对某些列的查询分析结果,而不是由查询得到的原始具体数据,则可在SELECT语句中替换这些列,其中需要用到CASE表达式。
CASE
WNEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
…
ELSE表达式
END [AS col_alias]
例:mysql>SELECT col_name,
>CASE
>WHEN cust_sex=’M’ THEN ‘男’
>ELSE ‘女’
>END AS 性别
>FROM dbname.tb_name;
计算列值
使用SELECT语句对列进行查询时,在结果集中可以输出对列值计算后的值。
例:查询数据库test的表customers中每个客户的cust_name列、cust_sex列、以及对cust_id列加上数字100的值。
mysql>SELECT cust_nam,cust_sex,cust_id+100
>FROM dbname.tb_name;
聚合函数
SELECT 语句的语法中select_expr部分可以指定为聚合函数(aggregation function)。聚合函数是MYSQL中一类系统内置函数,通常用于对一组值进行计算,然后返回单个值。它通常与GROUP BY子句一起使用,如果SELECT语句中有一个GROUP BY 子句,则这个聚合函数对所有列起作用;如果没有,则SELECT语句只产生一行作为结果。另外,除COUNT函数外,聚合函数都会会略空值。
函数名 | 说明 |
COUNT | 求组中项数,返回INT类型整数 |
MAX | 求最大值 |
MIN | 求最小值 |
SUM | 返回表达式中所有值的和 |
AVG | 求组中值的平均值 |
STD或STDDEV | 返回给定表达式中所有值的标准值 |
VARIANCE | 返回给定表达式中所有值的方差 |
GROUP_CONCAT | 返回由属于一组的列值连接组合而成的结果 |
BIG_AND | 逻辑或 |
BIT_OR | 逻辑与 |
BIT_XOR | 逻辑异或 |