Mysql基本用法

  • 格式:doc
  • 大小:131.00 KB
  • 文档页数:19

Mysql基本用法(关键字不区分大小写)

mysql接受自由格式的输入:它收集输入行但直到看见分号才执行,字符串用单引号或双引号包围都可以

MySQL服务器支持3种注释风格:

·从‘#’字符从行尾。

·从‘-- ’序列到行尾。请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。该语法与标准SQL注释语法稍有不同

·从/*序列到后面的*/序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。

#查询MySQL数据库中所有用户的信息

SELECT * FROM er;

#查询MySQL数据库中所有用户

SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM er;

#查看数据库中某个用户的权限

show grants for 'root'@'%';

列出用户所有权限(很多截图截不到)

select * from er where user='root';

#查看user表结构

desc er;

#登录数据库

mysql -hlocalhost -uroot -p;

#修改密码

mysqladmin -uroot -pold password new; #显示数据库

SHOW DATABASES;

#显示数据表

SHOW TABLES;

#选择数据库

use examples;

#创建数据库并设置编码utf-8 多语言

create database `examples` default character set utf8 collate utf8_general_ci;

#删除数据库

drop database examples;

mysql用表格(行和列)方式显示查询输出。第一行包含列的标签,随后的行是查询结果。通常,列标签是你取自数据库表的列的名字。如果你正在检索一个表达式而非表列的值(如刚才的例子),mysql用表达式本身标记列。

查询MySQL的版本号和当前日期

SELECT VERSION(),CURRENT_DATE();

查询结果如下:

可将mysql用作一个简单的计算器

SELECT SIN(PI()/4),(4+1)*5;

查询结果如下:

#查询MySQL可用的字符集

SHOW CHARACTER SET;

#查看字符集的校对规则

SHOW COLLATION LIKE 'latin1%';

#创建表

create table test(

id int(10) unsigned zerofill not null auto_increment,

email varchar(40) not null,

ip varchar(15) not null,

state int(10) not null default '-1',

primary key (id)

)engine=InnoDB;

MYSQL同一服务中两个数据库A,B,复制其中的一张表到另一数据库中

create table b.table1 as select * from a.table1

#显示表结构:例显示test表的表结构

DESCRIBE send;或show columns from send;

#删除表

drop table test;

#重命名表

alter table test_old rename test_new; #添加列

alter table test add cn int(4) not null;

#修改列

alter table test change id id1 varchar(10) not null;

#删除列

alter table test drop cn;

#创建索引

alter table test add index (cn,id);

#删除索引

alter table test drop index cn

#插入/装载数据

insert into test (id,email,ip,state) values(2,'qq@','127.0.0.1','0');

SQL命令导入文件,也可在navicat中直接通过导入(import)文件操作进行数据装载

LOAD DATA LOCAL INFILE 'event.txt' INTO TABLE event;

#删除数据

delete from test where id = 1;

#修改数据

update test set id='1',email='q@' where id=1;

#查数据

select * from test; #取所有数据

select * from test limit 0,2; #取前两条数据 select * from test email like '%qq%' #查含有qq字符 _表示一个 字符%表示多个字符

select * from test order by id asc;#降序desc,升序ASC

select * from test id not in('2','3');#id不含2,3或者去掉not表示含有

select * from test timer between 1 and 10;#数据在1,10之间

MySQL提供的模式匹配:

1. 标准的SQL模式匹配(操作符:LIKE/NOT LIKE)

SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在 MySQL中,SQL的模式默认是忽略大小写的。例名字为三个字符’ma_’;以b开头:’b%’;以b结尾:’%b’;包含b:’%b%’。查询出表中名字包含b的记录为: SELECT * FROM pet WHERE name LIKE '%b%';

2. 一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式

由MySQL提供的模式匹配的其它类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它们是同义词)。‘.’匹配任何单个的字符。·字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的范围,使用一个“-”。“[a-z]”匹配任何字母,而“[0-9]”匹配任何数字。 “ * ”匹配零个或多个在它前面的字符。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”. a) 如果你想强制使REGEXP比较区分大小写,使用BINARY关键字使其中一个字符串变为二进制字符串。例:SELECT * FROM pet

WHERE name REGEXP BINARY '^b'; 。该查询只匹配名称首字母的小写‘b’。

b) 为了找出包含一个“w”的名字,使用以下查询:SELECT * FROM pet

WHERE name REGEXP 'w';

c) 为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:SELECT * FROM pet WHERE

name REGEXP '^.....$';

d) 使用“{n}”“重复n次”操作符重写前面的查询:SELECT * FROM pet

WHERE name REGEXP '^.{5}$';

计数行:COUNT(*)函数、列最大值:MAX(字段)、MIN(字段)

按组时使用以上函数查询就必须使用GROUP BY,否则会出错

例:SELECT owner, COUNT(*) FROM pet GROUP BY owner; 每个主人有多少宠物,

SELECT article, MAX(price) AS price FROM shop GROUP BY article

查询结果中有几个属性,GROUP BY中就要相应出现,否则会出错

SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;

如果表中含有代表用户访问网页的年-月-日值,可以使用以下查询来确定每个月的访问天数(涉及批处理):

SELECT year,month,BIT_COUNT(BIT_OR(1<

year,month;

#---------------------------表连接知识------------------------------

#等值连接又叫内链接 inner join 只返回两个表中连接字段相等的行

select * from A inner join B on A.id = B.id; #写法1

select * from A,B where A.id = B.id; #写法2

select a.id,a.title from A a inner join B b on a.id=b.id and a.id=1;#写法3 表的临时名称

select a.id as ID,a.title as 标题 from A inner join B on A.id=B.id;#添加as字句

#左连接又叫外连接 left join 返回左表中所有记录和右表中连接字段相等的记录

select * from A left join B on A.id = B.id;

select * from A left join (B,C,D) on (B.i1=A.i1 and C.i2=A.i2 and D.i3 = A.i3);#复杂连接

#右连接又叫外连接 right join 返回右表中所有记录和左表中连接字段相等的记录

select * from A right join B on A.id = B.id;

#完整外部链接 full join 返回左右表中所有数据

select * from A full join B on A.id = B.id;

#交叉连接 没有where字句 返回卡迪尔积

select * from A cross join B;