Mysql命令使用:
linux shell下
# mysql客户端连接服务器时候的选项
-u --user
-p --password
-h --host
-e statement #可以在操作系统的shell中通过运行mysql -e mysql_statement的形式来执行mysql语句,并且将结果返回给操作系统的shell,注意statement要用双引号引起来。长格式 --execute=statement
eg:mysql -uroot -p -hlocalhost # 注意:mysql的用户名格式为USERNAME@HOST,参数可以省去,以默认值登陆。
-D --database <DATABASE> # 定义连接后的默认数据库
--protocol {tcp|socket}
--port PORT
其他选项
--compress # 压缩传输
--ssl-ca=/path/to/ssl_ca_file #ca证书文件
--ssl-capath=/path/to/ca_dir #多个ca时,指定ca证书目录
--ssl-cert=/path/to/cert_file #服务器证书路径
--ssl-cipher=cipher_list #加密算法列表
--ssl-key=/path/to/key_file #自己的密钥
--ssl-verify-server-cert #是否验证服务器
--html 以html显示mysql的就查询结果。 可以写为-H
--xml 以xml格式输出查询结果。
mysql客户端命令:
交互式模式
批处理模式(脚本模式,可以在shell中如 #mysql < scrpt.sql 或者在mysql的客户端shell中 mysql> source script.sql,其中source命令可以替换为\.)
客户端提示信息:
mysql> 可以输入新语句
-> 等待输入下一行语句
'> 等待单引号闭合
“> 等待双引号闭合
`> 等待反引号闭合
/*> 等待c语言样式的注释闭合
>\q #退出,或者>quit
>? # 获取帮助,也可以用\h或help
>\d >delimiter # 定义语句结束符。
>\s >status # 服务器状态
>\c clear # 提前终止语句执行。eg: SELECT user Fro\c (注意\c前有语句结束符;则\c失效)
>\g go #无论语句结束符是什么,直接将此语句送到服务器端执行
>\G ego #无论语句结束符是什么,直接将此语句送到服务器端执行,结果以竖排现实。
>\! system #执行shell命令。eg: \! ls /root
>\W warnings #语句执行结束后显示警告信息
>\w nowarning
>\# rehash # 对新建对象,启用名称补全。
mysqladmin客户端命令(mysql数据库管理)
语法: # mysqladmin [options] command [arg] command [arg] ... //command [arg] 是子命令机器参数
子命令:
create # 创建数据库 eg : mysqladmin -uroot -hlocalhost -p create DATABASE
drop # 删除数据库
password #修改密码 eg: mysql
ping #测试服务器是否在线
processlist #正在执行的进程列表(线程)
status #显示服务器本身的当前的状态,这个子命令有高级用法 --sleep N(每隔多少时间显示一次) 和 --count N(总共显示的次数)
extended-status #显示服务器状态变量及其值
variables #服务器变量
flush-privileges #刷新授权表 等同于reload
flush-tables # 关闭所有已打开的表
flush-status # 重置大多数服务器状态变量
flush-logs # 二进制日志和中继日志滚动
flush-hosts # 清除主机内部信息(DNS解析缓存、太多连接错误导致拒绝登陆)。
kill # 杀死内部线程。
refresh # 等同于flush-hosts和flush-logs
shutdown # 关闭mysqld服务
version # 版本号和状态信息
start-slave #启动从服务器的复制线程 (SQL-thread 和 IO thread)
stop-slave #关闭复制功能,停止从服务器的复制线程
服务器端命令:
获取帮助: help KEYWORD;
SHOW命令:
>SHOW ENGINES; //查询存储引擎
> SHOW VARIABLES LIKE '%innodb%' //查看所有和*innodb*相关的选项。服务器变量 的查看:SHOW GLOBAL VARIABLES [ LIKE '关键字' ]; (关键字可以用通配符_和%),GLOBAL表示全局变量,去掉GLOBAL表示会话变量。对于innoDB,多个表存储在同一个表空间文件。如果需要每表一个空间文件。对于不熟悉的用户,可以按照下面流程操作:SHOW VARIABLES LIKE '%innodb%'; 会显示很多变量,找到选项innodb_file_per_table OFF,了解这个选项的写法后,直接将选项写入my.cnf中,my.cnf中的写法是:找到[mysqld]分区,添加一行innodb_file_per_table = 1 ,重启mysqld服务,然后SHOW GLOBAL VARIABLES LIKE '%innodb%';查看选项状态。这样的修改就能永久有效了。
状态变量的查看 SHOW GLOBAL STATUS;
SHOW TABLE STATUS IN mysql LIKE 'user'; # 查看数据库中的表的状态信息(如使用的存储引擎) SHOW TABLE STATUS的语法是:SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
SHOW CHARACTER SET; # 显示服务器所有可用字符集
SHOW COLLATION; #显示服务器可用排序规则
SHOW GLOBAL VARIABLES LIKE 'sql_mode'; //查看全局变量中变量sql_mode的值。等同于 SELECT @@global.sql_mode; @@表示调用服务器变量,@表示用户自定义变量
SHOW [SESSION] VARIALBES LIKE 'str'; # 会话变量的查询.等同于 SELECT @@[sesion].'str';
扩展: 修改服务器的全局变量,会话变量的方法: SET {GLOBAL|[SESSION]} VAR=VAR; eg:SET tx_isolation='READ-UNCOMMITTED'
SHOW INDEXES FROM tb_name; #显示表的索引
SHOW GLOBAL VARIABLES LIKE 'tx_isolation' # 查看当前的隔离级别
SHOW CREATE VIEW view_name; # 查看试图创建时所用的语句,同理SHOW CREATE TABLE tb_name;可以查看创建表所用的语句。
SHOW MASTER STATUS; #查看当前使用的二进制日志文件
SHOW BINLOG EVENTS IN 'log_name' [FROM position];# 查看事件(从二进制日志文件中的某个位置) 后面FROM句子可以省去
SHOW BINARY LOGS #查看二进制文件名
CREATE命令:
创建用户:(一般只有usage和show database的权限)
CREATE USER username@host IDENTIFIED BY 'password' [, username IDENTIFIED BY 'password']...
FLUSH PRIVILEGES; #重读授权表(新版本的CREATE USER命令可以自动重读授权表)
重命名用户:RENAME USER 'old_username'@'host' TO 'new_username'@'host'
创建数据库
便于记忆:CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET = 字符集 | COLLATE = 排序规则 ] ;
详细语法:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
修改数据库
便于记忆:ALTER DATABASE db_name < CHARACTER SET = 字符集 | COLLATE = 排序规则 > ;
详细语法:
ALTER {DATABASE | SCHEMA} [db_name] alter_specification ...
ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME
alter_specification:
[DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
删除数据库:
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
补充:创建/删除视图
CREATE VIEW 创建试图:
基本语法:CREATE VIEW view_name AS select statement;
详细语法:见HELP CREATE VIEW;
DROP VIEW 删除视图。
创建表:(三种方法)
方法一: 直接定义
eg:CREATE TABLE tb1 (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL) ENGINE [=] engine_name
eg: CREATE TABLE tb2 (id INT UNSIGNED NOT NULL AUTO_INCREMENT, Name CHAR(20) NOT NULL, Age TINYINT NOT NULL, PRIMARY KEY(id),UNIQUE KEY(name),INDEX(age)) #单独指定主键时,需要在后面PRIMARY (col1,col2...) UNIQUE KEY和INDEX处理多字段的时候,同理。
方法二:从其他表查询数据,创建新表:
eg: CREATE TABLE tb3 SELECT * FROM tb2 WHERE id<=2; #注意:这种创建表的方式会导致很多字段的属性的格式定义会丢失,比如PRIMARY KEY和AUTO_INCREMENT。创建的表有字段和行。
方法三:以其他表为模板,创建新表:
eg: CREATE TABLE tb4 LIKE db_stu.name; #只有字段,没有行
参考:
Syntax:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
Or:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[partition_options]
select_statement
Or:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
{ LIKE old_tbl_name | (LIKE old_tbl_name) }
create_definition:
col_name column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
[index_option] ...
| {INDEX|KEY} [index_name] [index_type] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY]
[index_name] [index_type] (index_col_name,...)
[index_option] ...
| {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...)
[index_option] ...
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) reference_definition
| CHECK (expr)
column_definition:
data_type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'string']
[COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]
[STORAGE {DISK|MEMORY|DEFAULT}]
[reference_definition]
data_type:
BIT[(length)]
| TINYINT[(length)] [UNSIGNED] [ZEROFILL]
| SMALLINT[(length)] [UNSIGNED] [ZEROFILL]
| MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]
| INT[(length)] [UNSIGNED] [ZEROFILL]
| INTEGER[(length)] [UNSIGNED] [ZEROFILL]
| BIGINT[(length)] [UNSIGNED] [ZEROFILL]
| REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]
| FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]
| DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]
| NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]
| DATE
| TIME
| TIMESTAMP
| DATETIME
| YEAR
| CHAR[(length)]
[CHARACTER SET charset_name] [COLLATE collation_name]
| VARCHAR(length)
[CHARACTER SET charset_name] [COLLATE collation_name]
| BINARY[(length)]
| VARBINARY(length)
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT [BINARY]
[CHARACTER SET charset_name] [COLLATE collation_name]
| TEXT [BINARY]
[CHARACTER SET charset_name] [COLLATE collation_name]
| MEDIUMTEXT [BINARY]
[CHARACTER SET charset_name] [COLLATE collation_name]
| LONGTEXT [BINARY]
[CHARACTER SET charset_name] [COLLATE collation_name]
| ENUM(value1,value2,value3,...)
[CHARACTER SET charset_name] [COLLATE collation_name]
| SET(value1,value2,value3,...)
[CHARACTER SET charset_name] [COLLATE collation_name]
| spatial_type
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
reference_definition:
REFERENCES tbl_name (index_col_name,...)
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]
reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION
table_options:
table_option [[,] table_option] ...
table_option:
ENGINE [=] engine_name
| AUTO_INCREMENT [=] value
| AVG_ROW_LENGTH [=] value
| [DEFAULT] CHARACTER SET [=] charset_name
| CHECKSUM [=] {0 | 1}
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'string'
| CONNECTION [=] 'connect_string'
| DATA DIRECTORY [=] 'absolute path to directory'
| DELAY_KEY_WRITE [=] {0 | 1}
| INDEX DIRECTORY [=] 'absolute path to directory'
| INSERT_METHOD [=] { NO | FIRST | LAST }
| KEY_BLOCK_SIZE [=] value
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| PACK_KEYS [=] {0 | 1 | DEFAULT}
| PASSWORD [=] 'string'
| ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
| TABLESPACE tablespace_name [STORAGE {DISK|MEMORY|DEFAULT}]
| UNION [=] (tbl_name[,tbl_name]...)
partition_options:
PARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list)
| RANGE(expr)
| LIST(expr) }
[PARTITIONS num]
[SUBPARTITION BY
{ [LINEAR] HASH(expr)
| [LINEAR] KEY(column_list) }
[SUBPARTITIONS num]
]
[(partition_definition [, partition_definition] ...)]
partition_definition:
PARTITION partition_name
[VALUES
{LESS THAN {(expr) | MAXVALUE}
|
IN (value_list)}]
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
[NODEGROUP [=] node_group_id]
[(subpartition_definition [, subpartition_definition] ...)]
subpartition_definition:
SUBPARTITION logical_name
[[STORAGE] ENGINE [=] engine_name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir']
[INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] tablespace_name]
[NODEGROUP [=] node_group_id]
select_statement:
[IGNORE | REPLACE] [AS] SELECT ... (Some valid select statement)
CREATE TABLE creates a table with the given name. You must have the
CREATE privilege for the table.
Rules for permissible table names are given in
http://dev.mysql.com/doc/refman/5.1/en/identifiers.html. By default,
the table is created in the default database. An error occurs if the
table exists, if there is no default database, or if the database does
not exist.
URL: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
修改表:
添加、修改、删除{字段|索引}
修改{表名|表属性}
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name
[alter_specification [, alter_specification] ...]
[partition_options]
eg: SHOW INDEXES FROM tb3; ALTER TABLE tb3 ADD UNIQUE KEY (coursename);
eg: ALTER TABLE tb3 ADD col_stdate DATA DEFAULT '2014-09-08';
eg: ALTER TABLE tb3 CHANGE tb3 tb3_bak DATA DEFAULT '2014-09-08';
eg: ALTER TABLE tb3_bak RENAME TO tb3_2014_02; # 修改表名,等同于RENAME TABLE tb3_bak TO tb3_2014_02;
eg: ALTER TABLE tb4 ADD FOREIGN KEY (levelID) REFERENCES TO (tb3.levelID); # 创建外键约束必须是在可以支持事务的存储引擎之上,references两边的字段类型要一致,否则就会出问题。references定义,可以HELP CREATE TABLE; 删除表或字段是不允许的,因为reference默认是RESTRICT的
eg: ALTER TABLE tb1 ENGINE='innoDB'; # 修改表的存储引擎,注意ENGINE=是属于table_options
参考:
alter_specification:
table_options
| ADD [COLUMN] col_name column_definition
[FIRST | AFTER col_name ]
| ADD [COLUMN] (col_name column_definition,...)
| ADD {INDEX|KEY} [index_name]
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]
UNIQUE [INDEX|KEY] [index_name]
[index_type] (index_col_name,...) [index_option] ...
| ADD FULLTEXT [INDEX|KEY] [index_name]
(index_col_name,...) [index_option] ...
| ADD SPATIAL [INDEX|KEY] [index_name]
(index_col_name,...) [index_option] ...
| ADD [CONSTRAINT [symbol]]
FOREIGN KEY [index_name] (index_col_name,...)
reference_definition
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST|AFTER col_name]
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| DROP PRIMARY KEY
| DROP {INDEX|KEY} index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO|AS] new_tbl_name
| ORDER BY col_name [, col_name] ...
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| ADD PARTITION (partition_definition)
| DROP PARTITION partition_names
| COALESCE PARTITION number
| REORGANIZE PARTITION [partition_names INTO (partition_definitions)]
| ANALYZE PARTITION {partition_names | ALL}
| CHECK PARTITION {partition_names | ALL}
| OPTIMIZE PARTITION {partition_names | ALL}
| REBUILD PARTITION {partition_names | ALL}
| REPAIR PARTITION {partition_names | ALL}
| PARTITION BY partitioning_expression
| REMOVE PARTITIONING
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
table_options:
table_option [[,] table_option] ... (see CREATE TABLE options)
partition_options:
(see CREATE TABLE options)
删除表:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE] #CASCADE是级联的,会同时删除引用它的表,非常危险。
创建索引:
eg: CREATE INDEX name_on_student ON student(col_ID(5 DESC)) USING BTREE; #默认是BTREE的,col_ID的索引长度是5,降序。
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option] ...
方便记忆:CREATE INDEX index_name ON tb_name (col,...); # col后可以加上索引长度,如果字段是TEXT类型的,必须指定索引长度。
参考:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option] ...
index_col_name:
col_name [(length)] [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option:
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
CREATE INDEX is mapped to an ALTER TABLE statement to create indexes.
See [HELP ALTER TABLE]. CREATE INDEX cannot be used to create a PRIMARY
KEY; use ALTER TABLE instead. For more information about indexes, see
http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html.
URL: http://dev.mysql.com/doc/refman/5.1/en/create-index.html
删除索引:
DROP [ONLINE|OFFLINE] INDEX index_name ON tbl_name
-----------------------------------------------------------------
SELECT语句:
SELECT fied1,... FROM tb_name ; #投影
SELECT [DISTINCT] * FROM tb_name WHERE qualification; # 选择。注意DISTINCT表示重复的只显示一次。
一、简单查询:
子句:
FROM子句: 要查询的关系。FROM子句后面可以是表、多个表、其他SELECT语句。(后面是表,则是简单查询,多个表是多表查询,其他SELECT语句是子查询,也叫潜逃查询)
WHERE子句:布尔关系表达式。
WHERE后面的操作符:
1-可用算数运算符(不理想,因为不能有效使用索引) + - * / % ,
2-可用比较运算符 =、!=或<>、<=>、>、>=、<、<= ,注意<=>表示可以和空值安全比较,是否等于。
3-逻辑运算符:AND、OR、XOR、NOT (注意,多个逻辑关系表达式组合时,可以用括号来指定优先级)eg: WHERE Age>=20 AND Age<=25;
4-BETWEEN ... AND ... 介于 eg:WHERE Age BETWEEN 20 AND 25; #等同于上一句的例子
5-LIKE 'str' 比较操作可用通配符%和_。eg: WHERE name LIKE 'M%';
6-RLIKE 或 REGEXP 支持对正则表达式的支持,注意用了正则表达式,索引将不可用。eg: WHERE name RLIKE '^[MXU].*';
7-IN 范围。 eg:WHERE Age IN (18,19,20,30,31);
8- IS [NOT] NULL 对空值或非空值的比较 eg: WHERE cource IS NULL;
ORDER BY子句:
ORDER BY field_name {ASC|DESC} # 默认升序,巨大数据排序比较耗费资源。为了避免不必要开销,存储的时候应该是排好序,而且应该是按照搜索码排序。
eg: SELECT Name,Age FROM students ORDER BY Age DESC;
字段别名 AS :eg: SELECT name AS Student_Name FROM tb_students; # 字段名将显示为Student_Name。
eg: SELECT 2+1; SELECT 2+1 AS sum;
LIMIT子句: LIMIT [offset,]count # offset 表示偏移个数,count表示显示数目。
eg: SELECT Name FROM student LIMIT 2; # 限制只显示前两行。而LIMIT 3,5 表示跳过前三个,再显示5个。
聚合:
MIN()、MAX()、SUM()、AVG()、COUNT() eg:SELECT AVG(Age) FROM students; #求年龄平均值
GROUP BY 子句(主要用于聚合):
GROUP BY field; eg: SELECT gender,AVG(age) FROM students GROUP BY gender;
HAVING 过滤条件(和WHERE一样) eg: SELECT gender,COUNT(age) FROM students GROUP BY gender HAVING age>=18; #过滤条件可以直接引用别名。
二、多表查询
表的连接:
1-交叉连接、笛卡尔乘积 eg: SELECT * FROM students,course;
2-自然连接:两张表的字段必须有等值关系,才会显示
eg:SELECT students.Name,course.CourseName FROM students,course WHERE students.CID1 = course.CourseID;
别名:SELECT s.Name,c.Cname FROM students AS s,courses AS c WHERE s.CID1=c.CID;
3-外连接:
左外连接: ...LEFT JOIN... ON... #ON指定条件 eg:SELECT s.Name,c.Cname FROM students AS s LEFT JOIN courses AS c ON s.CID1=c.CID;    //个人理解左外连接就是用ON条件剔除右边,内连接就是用ON条件剔除两边
右外连接: ...RIGHT JOIN...ON... eg:SELECT s.Name,c.Cname FROM students AS s RIGHT JOIN courses AS c ON s.CID1=c.CID;
4-自连接:必须要用别名
eg:SELECT s.Name AS student,t.Name AS teacher FROM students AS s,students AS t WHERE s.TID=t.SID; # 解释SELECT 学生名,老师名 FROM 学生,老师 WHERE 学生的TID=老师的SID
三、子查询
在比较中使用子查询,子查询只能是单值
eg: SELECT Name,Age FROM students WHERE Age>=(SELECT AVG(Age) FROM students);
IN中使用子查询:
eg: SELECT Name,Age FROM students WHERE Age IN (SELECT Age FROM tutors);
FROM中使用子查询:大多数可以改写成多条件查询
eg: SELECT Name,Age FROM (SELECT Name,Age FROM students) AS st WHERE st.Age>=20;
四、联合查询
UNION eg: (SELECT Name,Age FROM students) UNION (SELECT TName,Age FROM tutors);
DML语句
插入数据 INSERT
方法1: INSERT tb_name (col1,col2...) VALUES (val1,var2,...)[,(...),...]
eg: INSERT students (Name,Age,Gender) VALUES ('Lee',24,'F'),('Fo',17,'M');
方法2:INSERT tb_name col1=var1,col2=var2,...
eg: INSERT visitors SET Name='Beely',ID=5;
方法3:INSERT tb_name SELECT子句
eg: INSERT students (Age,Name) SELECT Age,Name FROM tutors WHERE Age<=25;
参考:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
INSERT inserts new rows into an existing table. The INSERT ... VALUES
and INSERT ... SET forms of the statement insert rows based on
explicitly specified values. The INSERT ... SELECT form inserts rows
selected from another table or tables. INSERT ... SELECT is discussed
further in [HELP INSERT SELECT].
URL: http://dev.mysql.com/doc/refman/5.1/en/insert.html
替换字段的数据:
REPLACE 语法和INSERT一样
DELETE 删除字段数据:
Syntax:
Single-table syntax:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
TRUNCATE tb_name 清空表并重置AUTO_INCREMENT计数器。
UPDATA 修改字段数据:
语法:UPDATE tb_name SET col1=var1[,col2=var2]... [WHERE condition]
参考
Syntax:
Single-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
For the single-table syntax, the UPDATE statement updates columns of
existing rows in the named table with new values. The SET clause
indicates which columns to modify and the values they should be given.
Each value can be given as an expression, or the keyword DEFAULT to set
a column explicitly to its default value. The WHERE clause, if given,
specifies the conditions that identify which rows to update. With no
WHERE clause, all rows are updated. If the ORDER BY clause is
specified, the rows are updated in the order that is specified. The
LIMIT clause places a limit on the number of rows that can be updated.
For the multiple-table syntax, UPDATE updates rows in each table named
in table_references that satisfy the conditions. In this case, ORDER BY
and LIMIT cannot be used.
where_condition is an expression that evaluates to true for each row to
be updated. For expression syntax, see
http://dev.mysql.com/doc/refman/5.1/en/expressions.html.
table_references and where_condition are specified as described in
http://dev.mysql.com/doc/refman/5.1/en/select.html.
You need the UPDATE privilege only for columns referenced in an UPDATE
that are actually updated. You need only the SELECT privilege for any
columns that are read but not modified.
The UPDATE statement supports the following modifiers:
o With the LOW_PRIORITY keyword, execution of the UPDATE is delayed
until no other clients are reading from the table. This affects only
storage engines that use only table-level locking (such as MyISAM,
MEMORY, and MERGE).
o With the IGNORE keyword, the update statement does not abort even if
errors occur during the update. Rows for which duplicate-key
conflicts occur are not updated. Rows for which columns are updated
to values that would cause data conversion errors are updated to the
closest valid values instead.
URL: http://dev.mysql.com/doc/refman/5.1/en/update.html
GRANT命令:
eg: GRANT CREATE ON cactidb.* TO 'cactic'@'%’ INDENTIFIED BY '123456' REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 1000; #没有插入数据的权限
eg: GRANT SUPER ON *.* TO 'cactic'@'%’;
参考:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
GRANT PROXY ON user_specification
TO user_specification [, user_specification] ...
[WITH GRANT OPTION]
object_type:
TABLE
| FUNCTION
| PROCEDURE
#注意,如果三种中任意两者同名,则必须要指明对象类别,eg: GRANT EXECUTE ON FUNCTION db.ab TO username@host;
priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
user_specification:
user
[
| IDENTIFIED WITH auth_plugin [AS 'auth_string']
IDENTIFIED BY [PASSWORD] 'password'
]
ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
#count为零时,表示无限制
The GRANT statement grants privileges to MySQL user accounts. GRANT
also serves to specify other account characteristics such as use of
secure connections and limits on access to server resources. To use
GRANT, you must have the GRANT OPTION privilege, and you must have the
privileges that you are granting.
Normally, a database administrator first uses CREATE USER to create an
account, then GRANT to define its privileges and characteristics. For
example:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
GRANT USAGE ON *.* TO 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
However, if an account named in a GRANT statement does not already
exist, GRANT may create it under the conditions described later in the
discussion of the NO_AUTO_CREATE_USER SQL mode.
The REVOKE statement is related to GRANT and enables administrators to
remove account privileges. See [HELP REVOKE].
When successfully executed from the mysql program, GRANT responds with
Query OK, 0 rows affected. To determine what privileges result from the
operation, use SHOW GRANTS. See [HELP SHOW GRANTS].
URL: http://dev.mysql.com/doc/refman/5.1/en/grant.html
REVOKE取消权限:
eg: REVOKE UPDATA (col_comment) ON cacti.tb_info FROM 'cacti'@'%';
参考:
Syntax:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [, user] ...
The REVOKE statement enables system administrators to revoke privileges
from MySQL accounts. Each account name uses the format described in
http://dev.mysql.com/doc/refman/5.1/en/account-names.html. For example:
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
If you specify only the user name part of the account name, a host name
part of '%' is used.
For details on the levels at which privileges exist, the permissible
priv_type and priv_level values, and the syntax for specifying users
and passwords, see [HELP GRANT]
To use the first REVOKE syntax, you must have the GRANT OPTION
privilege, and you must have the privileges that you are revoking.
To revoke all privileges, use the second syntax, which drops all
global, database, table, column, and routine privileges for the named
user or users:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
To use this REVOKE syntax, you must have the global CREATE USER
privilege or the UPDATE privilege for the mysql database.
URL: http://dev.mysql.com/doc/refman/5.1/en/revoke.html
MySQL密码修改方法:
方法一:
>SET PASSWORD FOR 'tom'@'%'=PASSWORD('12345678'); # 调用PASSWORD()函数修改密码,注意设置完后,密码在mysql库的user表中的PASSWORD字段是加密存放的,但是加密没有salt字符串。
>FLUSH PRIVILEGES; # 修改完后刷新授权表。
方法二:(需要在linux shell下执行)
# mysqladmin -uroot -hlocalhost -p password '12345678' # -h指定服务器(本机可省略),-p指定老密码,如果没有旧密码,可以直接省略。注意,-h127.0.0.1的时候,修改的其实是root@localhost的密码,因为在linux shell下-h指定的是服务器,127.0.0.1和localhost是同一台服务器。所以才会互相影响。修改密码建议还是用第一种方法
方法三:(直接修改mysql数据库)
>USE mysql;
>UPDATE user SET password=PASSWORD('12345678') WHERE User='root' AND Host='127.0.0.1'; # 注意表和库区分大小写,字段不区分大小写。password字段后面引用了password()函数。
>FLUSH PRIVILEGES;

转载于:https://www.cnblogs.com/mind-water/articles/9669269.html

MySQL语句语法参考相关推荐

  1. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)

    MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...

  2. mysql sqlite 语法_[Sqlite] Sqlite的基本日常SQL操作语句汇总

    序言: 嵌入式数据库Sqlite的基本sql使用汇总,使用测试起来,与关系型数据库mysql在语法上有很多的相似之处,先准备测试数据: CREATE TABLE COMPANY(ID INT NOT ...

  3. MySQL数据库(安装配置 语句语法使用 项目中操作MySQL)

    文章目录: 一:安装配置 1.安装MySQL 2.卸载MySQL 3.汉化MySQL 4.启动和停止MySQL 5.修改MySQL密码 6.连接MySQL 二:语句语法使用 1.语句使用:增删改查 增 ...

  4. Mysql基本语法DML和DQL语句的总结(笔记)

    Mysql基本语法DML和DQL语句的总结(笔记) 文章目录 Mysql基本语法DML和DQL语句的总结(笔记) 1.DML语句之插入 2.DML语句之修改表记录 语法1:带条件修改 语法2:带条件修 ...

  5. mySQL基本语法 DDL语句

    一.mySQL基本语法 二.数据库的DDL语句(数据库的定义语句)之库的操作 1.查看库 2.创建库 或者 :create database 库名; 3.查看库的字符集 4.修改库的字符集 5.删除库 ...

  6. mysql语句性能开销检测profiling详解

    转载自 mysql语句性能开销检测profiling详解 之前我介绍过msyql查询优化explain检查命令的使用,explain主要是检查sql语句的基本性能,sql是否优秀,但不能查看具体的涉及 ...

  7. mysql常用函数参考

    mysql常用函数参考 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL,返回 ...

  8. MySQL之语法入门与基础命令

    一.MySQL SELECT语句 SELECT语句是控制查看哪些列和行数据,具体如下: SELECT column_1, column_2, ... FROMtable_1 [INNER | LEFT ...

  9. mysql一条语句是如何被执行的——带你了解mysql语句执行内部顺序

    文章目录 写在前面 MySQL基本架构 超详细架构图 连接器 查询缓存 解析器 MySQL 8.0对Parser所做的改进 优化器 执行器 存储引擎 SQL语句执行时间分析 参考资料 写在前面 sel ...

  10. 一些常用的mysql语句实例-以后照写2

    specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...

最新文章

  1. ansys添加力矩_ansys中的workbench怎么添加力矩
  2. 为什么要Zipkin
  3. 程序员买房与程序员转型
  4. Hive集成Mysql作为元数据时,提示错误:Specified key was too long; max key length is 767 bytes...
  5. 通俗的解释机器学习的预测原理
  6. 学会有礼貌的拒绝应聘者
  7. cad2017单段线_AutoCAD2017命令总结
  8. linux下用命令修改图片像素
  9. 动态渲染element组件el-table表头项+自定义el-table列表项
  10. 模拟波束成形和数字波束成形的区别
  11. 解决unable to locate package net-tools
  12. C++语言程序设计第五版 - 郑莉(第五章课后习题)
  13. 托福高频真词List01 // 附阅读真题
  14. SSM+宠物用品商店 毕业设计-附源码191355
  15. LimeSDR-USB 初学者教程(Windows)
  16. HeidiSQL日常使用
  17. 祁隆在徒弟面前自抬身价三十万,冷漠高安龙梅子段位是其四分之一
  18. mongodb+node.js入门
  19. 用linux搭建服务器的
  20. [原][译][jsbsim]空气动力学模型库讨论JSBSim对比YASim

热门文章

  1. FFMPEG 的学习
  2. 设计模式(二)Adapter模式
  3. ROS中测试机器人里程计信息
  4. java枚举类型详解
  5. 请教Parser Generator 开发工具中关于Lex和Yacc的问题
  6. 查询数据进行排名,一样的并列
  7. 16.1 Class类与Java反射
  8. 正则表达式(以后认真研究下)
  9. C 中的左值(Lvalues)和右值(Rvalues)
  10. [bzoj2115][Wc2011] Xor