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;