dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:3838回复:12

基本sql语句

楼主#
更多 发布于:2014-01-13 15:28
基本mysql语句


1. 创建库
create database test;
#指定字符集(mysql 5.0 以上)
create database redmine character set utf8;
#验证
show create database redmine\G;
*************************** 1. row ***************************
       Database: redmine
Create Database: CREATE DATABASE `redmine` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)

2. 删除库
drop database test;

3. 列出全部的库
show databases;


1. 创建表
create table test (c1 int(10),c2 int(10), c3 int(10),c4 char(10));

2. 表结构
desc test;
#也可以使用show 语句
show create table test;

3. 删除表
drop table test;

4. 列出当前库全部表
show tables;

5. 复制表(包括结构、索引、数据)
CREATE TABLE newtable LIKE oldtable;
INSERT newtable SELECT * FROM oldtable;



#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2014-01-13 15:53
delete 语句

作用:
删除记录

格式:
delete from tbl_name [where 要删除的记录]

条件:
where 子句指定哪些记录应该删除。它是可选的但是如果不选的话,将会删除所有的记录
这个查询将清除表中的所有内容。一定要当心!

为了删除特定的记录,可用 WHERE 子句来选择所要删除的记录。这类似于 SELECT 语句中的 WHERE 子句。
delete from test where c1="1";
delete from mysql.user where host="::1";
逻辑条件
delete from user where id > 14 and id < 43
delete from user where id=14 or id=43

下面的语句清空整个表
delete from test;

delete 不等于
#删除user_id不等于14 的记录;
delete from ywwd_admin_member where  user_id <> 14;

扩展: truncate
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2014-01-13 16:17
update 语句

作用:
修改记录

格式:
update tbl_name set 要更改的列

条件:
WHERE 要更新的记录,这里的 WHERE 子句是可选的,因此如果不指定的话,表中的每个记录都被更新。
update test set c1=’2’ where c4='0';
update mysql.user set password=password('password') where user='monitor';
update mysql.user set host='%' where user=dongnan and host='10.0.100.*';

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
地板#
发布于:2014-01-17 13:56
ALTER TABLE 语句

作用:
更改表结构

格式:
如需在表中添加列,请使用下列语法:
ALTER TABLE table_name ADD column_name datatype

要删除表中的列,请使用下列语法:
ALTER TABLE table_name DROP COLUMN column_name

改变表中列的数据类型,请使用下列语法:
ALTER TABLE table_name ALTER COLUMN column_name datatype

示例:在表中添加列

alter table test.test add UdpYes int(11), add UdpNo int(11), add Tcp int(11);

示例:删除表中的列
alter table test.test drop column numOfCTViaNC, drop column numOfCTViaPop;
PS:可以删除多个列使用","隔开。

示例:更改表的字符集
alter table redmine.projects convert to character set utf8 collate utf8_general_ci;

示例:增加索引
#添加普通索引
alter table favorite add index index_uid(uid);
  
#添加多列索引
alter table reply add index index_pid_uid_create_time(pid,uid,create_time);
  
#添加主键索引(PRIMARY KEY)
alter table `table_name` add primary key (`column`)

#update 20160519
示例语句:添加新列(passwd),位置为user_pwd后;
alter table `ywwd` add `passwd` VARCHAR(60) NOT NULL DEFAULT '' COMMENT '测试' AFTER user_pwd;

表添加列是一个常用的操作,MySQL增加列的时候可以指定此列的位置,给指定位置加列需要两个关键字,FIRST和AFTER :
FIRST,表示增加此列为第一个列;
AFTER,表示增加在某个列之后 ;

语法
ALTER TABLE table_name ADD [COLUMN] col_name column_definition  [ FIRST | AFTER col_name]
#update 20161112
更改字段长度
alter table user modify column ip char(15);




参考:SQL ALTER TABLE 语句
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
4楼#
发布于:2014-10-21 10:32
show 语句
例子1: 变量-最大连接数
mysql&gt; show variables like 'max_con%';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 10    |
| max_connections    | 1000  |
+--------------------+-------+
2 rows in set (0.00 sec)

临时修改此参数的值
mysql&gt; set GLOBAL max_connections=2000;
mysql&gt; set GLOBAL max_connect_errors=1000;

示例:表引擎
show create table test;
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

参考
MySQL的show语句大全


#待续....
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
5楼#
发布于:2015-05-15 14:49
mysql 授权语句
示例: 创建数据库与授权用户
create database redmine character set utf8;
create user 'redmine'@'localhost' identified by 'ywwd.net';


# mysql 5.6
GRANT all privileges on redmine.* TO 'redmine'@'%' identified by 'password' WITH GRANT OPTION;  

# 刷新权限  
flush privileges;

示例: 删除用户
drop user 'rep2@'10.0.100.%';
flush privileges;

示例: 收回权限

# 查看用户权限
show grants for zx_root;
# 赋予权限
grant select on ywwd.*  to zx_root;
# 回收权限
revoke select on ywwd.*  from  zx_root;
# 使用多个权限同时赋予和回收,权限之间使用逗号分隔
grant select,update,delete,insert ywwd.* to  dongnan;
# 刷新
flush  privileges ;


示例: 只读权限用户
grant select on `ywwd-db`.* TO 'dongnan'@'%' identified by 'password' WITH GRANT OPTION;  
# 刷新
flush  privileges ;

# 数据库更新表 host 字段为 '%' 无效,登录用户没有无法显示数据库,如:
 show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.00 sec)
#  解决方法,是再次使用 grant 命令为数据库授权用户;

# mysqldump 所需要的权限:
1、对于table 来说mysqldump 最少要有select 权限。
2、对于view 来说mysqldump 要有show view 权限。
3、对于trrigger 来说mysqldump 要有trriger 权限。
4、如果要产生一份一致的备份 mysqldump 要有lock tables 权限。

参考:mysql 用户管理和权限设置
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
6楼#
发布于:2015-12-14 12:27
mysql where 子句
示例:
#等于
select * from stat where id = 6 \G;
    
#大于&小于
select * from stat where id &gt;10 and id &lt;50 \G;
    
#范围
select * from stat where id between 10 and 50;

运算符    
=     #等于
!=    #不等于
&gt;     #大于
&lt;     #小于
&gt;=     #大于或等于
&lt;=     #小于或等于
BETWEEN   #介于一个包含范围内
LIKE      #搜索匹配的模式

帮助
我们知道从MySQL表中使用SQL SELECT 语句来读取数据。
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

语法
以下是SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法
#SELECT field1, field2,...fieldN FROM table_name1, table_name2...
#[WHERE condition1 [AND [OR]] condition2.....

参考:WHERE 子句

update
示例2:like 匹配字段
mysql&gt; select ssl_cipher from user where ssl_cipher like "%root%" \G;
*************************** 1. row ***************************
ssl_cipher: root:x:0:0:root:/root:/bin/bash

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
7楼#
发布于:2015-12-23 15:23
mysql select 语句
示例: mysql select查询结果 写入到文件
mysql&gt; select username,id from ywwd into outfile '/tmp/ywwd.txt';
注意:写入目录,需要可写入权限。
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
8楼#
发布于:2016-02-24 18:43
mysql set 语句
举个栗子:
设置最大连接数    
set GLOBAL max_connections=2000;  
set GLOBAL max_connect_errors=1000;

设置 sql模式
set GLOBAL sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

慢查询日志
#关闭慢查询日志    
SET GLOBAL slow_query_log = 'OFF'
 
#启用/设置慢查询日志
SET GLOBAL long_query_time = 5

SET 语句可以设置各种不同的变量类型,这些变量可以影响着服务器或者客户端的参数。它可以帮助你设置用户变量或者是系统变量。

系统变量在 SET 语法中可以以 var_name 的方式来引用;
变量名前面用 GLOBAL 或 @@global. 来表示这是一个全局变量;
变量名前面用 SESSION , @@session. 或 @@ 来表示这是一个会话变量。
LOCAL 和 @@local. 其实 SESSION 和 @@session. 属同义。
如果变量名前面没有附加的修饰词的话,那么 SET 只修改会话变量

参考
SET 和 SHOW语法

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
9楼#
发布于:2016-03-02 18:46
mysql insert into 语句
insert into 语句用于向表格中插入新的行

语法
insert into 表名称 values (值1, 值2,....)

我们也可以指定所要插入数据的列:
insert into table_name (列1, 列2,...) values (值1, 值2,....)

示例:
insert into post_rule (name,func,create_time,domain) values('帖子','post_add_post','2147483647',1);

参考:SQL INSERT INTO 语句

#待续....
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
10楼#
发布于:2016-03-02 18:57
mysql rename table语句
举个栗子:重命名表
mysql&gt; show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| x_user          |
+-----------------+
1 row in set (0.00 sec)
#
mysql&gt; rename table x_user to user;
Query OK, 0 rows affected (0.00 sec)
#
mysql&gt; show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user            |
+-----------------+
1 row in set (0.00 sec)
#
注意:执行成功后"源表"将删除,提前备份;

功能
rename命令用于修改表名。
rename命令格式:rename table 原表名 to 新表名;
mysql&gt; rename table MyClass to YouClass;
当你执行 RENAME 时,你不能有任何锁定的表或活动的事务。你同样也必须有对原初表的 ALTER 和 DROP 权限,以及对新表的 CREATE 和 INSERT 权限
如果在多表更名中,MySQL 遭遇到任何错误,它将对所有被更名的表进行倒退更名,将每件事物退回到最初状态。

过程

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
11楼#
发布于:2016-04-13 17:51
mysql load data infile 语句
示例:sqlmap 读取/etc/passwd
LOAD DATA INFILE '/etc/passwd' INTO TABLE user FIELDS TERMINATED BY 'fuck' (ssl_cipher);

验证
mysql&gt; select ssl_cipher from user where ssl_cipher like "%root%" \G;
*************************** 1. row ***************************
ssl_cipher: root:x:0:0:root:/root:/bin/bash
*************************** 2. row ***************************
ssl_cipher: operator:x:11:0:operator:/root:/sbin/nologin
2 rows in set (0.00 sec)

待续....
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
12楼#
发布于:2017-06-08 13:01
mysql in 子句
示例: 删除 loan_id 为 '201705190002', '201705190003'
delete from table_name where loan_id in ('201705190002', '201705190003');

两种方式
1. in + 字符串
select user from mysql.user where user in('root','open') \G;
*************************** 1. row ***************************
user: open
*************************** 2. row ***************************
user: root
注意:这里一定要将字符串用单引号'' 标注起来;

2. in + 记录集
select * from table where uname in(select uname from user);

#

返回顶部