一、基本概念
SQL(Structured Query Language)结构化查询语言
SQL语言包含4个部分:
1.数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句
2.数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句
3.数据查询语言(DQL),例如:SELECT语句
4.数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句
MySQL支持标准的SQL语句,也有自己私有的SQL语句。
SQL数据基本操作分为为创建(create)、更新(update)、读取(read)和删除(delete),即CURD,以及在此基础上的更为复杂的一些数据操作。
create:分为create和insert into,用于创建数据库(表)以及向表里添加数据记录
update:更新数据库(表)信息以及更新表内的具体数据信息记录
read:读取数据库(表)信息以及表内的具体数据信息记录
delete:删除数据库(表)信息以及表内的具体数据信息记录
Mysql只是一种管理数据库的小型管理系统(DBMS),并不是数据库数据本身。
数据库是一个保存有组织的数据的容器,使用DBMS访问数据库。
表是某中特定类型数据的结构化清单。
模式是关于数据库和表的布局及特性信息。
列是表中的一个字段,所有的表都是由一个或多个列组成。
数据类型是所允许存储数据的类型,每个表列都有相应的数据类型,它限制该列中存储的数据。
行是表中的一个记录。
主键是一列或一组列,其值能够唯一区分表中的每个行。
注意事项在处理SQL语句时,其中所有的空格都会被忽略。
mysql语句之后用”;”或”\g”结束,enter不执行命令。
数据库名不能是纯数字。
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
二、Mysql数据(字段)类型
在创建表的时候,要明确定义字段对应的数据类型。MySQL主要的数据类型分为数值类型、字符串(文本)类型、时间日期类型和其他类型几类。
数值类型
数值类型说明:
补充说明
1.在int(integer)系列中,只能存储整型值,且可以在后面用括号指定显示的尺寸(M),如果不指定则会默认分配。如果实际值的显示宽度大于设定值,将会显示实际值而不会截断以适应显示尺寸。如smallint(3)中的3即为显示尺寸,即显示三位的数值(不包括-号)
2.int类型可以指定UNSIGNED属性,即无符号(非负),所以存储范围有两种
3.在float、double及decimal类型中,不能指定UNSIGNED属性,其显示尺寸包含了小数点精度(D),即float(3,1)保存范围为-99.9至99.9
4.decimal必须指定显示尺寸(M)和小数点精度(D),float和double都是可选的
5.在可能涵盖取值范围的基础上,尽可能选择较小的类型以提高效率和节约存储空间,如年龄,就选择tinyint(3)。该原则对于字符类型同样适用。
字符串(文本)类型
字符串(文本)类型说明:
补充说明
char和varcha需要指定长度,不同的是,char存储时总是按照指定的长度储存,而varchar则根据实际字符串长度再加上一个字节分配空间。
时间日期类型
时间日期类型说明:
补充说明
在PHP中,一般情况下对于时间都是按照UNIX时间戳以int类型存储于表中,再根据实际需要用PHP的时间函数进行处理,但不完全都是这样
三、基本语法
系统管理
连接MySQL
格式: mysql -h主机地址-u用户名-p用户密码
mysql默认没有密码,直接mysql默认以root(和系统的root没关系)身份链接本地的mysql服务
例1:连接到本机上的MySQL。
[[email protected] ~]# mysql -uroot -pmima
例2:连接到远程主机上的MYSQL。
[[email protected] ~]# mysql -uroot -h192.168.1.2-phello
修改新密码
在终端输入:mysql -u用户名-p密码,回车进入Mysql。
> use mysql;
>update user setpassword=PASSWORD(‘新密码‘) where user=‘用户名‘;
>flush privileges;#更新权限
> quit; #退出
增加新用户
格式:grant select on数据库.* to用户名@登录主机identified by ‘密码‘
例:增加一个用户jacken密码为123,让他可以在任何主机上登录,并对所有数据库有
查询、插入、修改、删除的权限。
首先用以root用户连入MySQL,然后键入以下命令:
mysql> grantselect,insert,update,delete on *.* [email protected] identified by‘123‘;
mysql> grant allprivileges on *.* to [email protected] identified by ‘mysql‘;(有所有权限)
然后刷新权限设置。
mysql>flush privileges;
删除用户
delete from user where user=‘用户名‘ andhost=’主机’;
例子:删除本地主机上的jacken用户(远程主机的jacken用户可登录)
mysql> delete from user whereuser=‘jacken‘ and host=’localhost’;
数据库操作
显示所有的数据库
mysql> show databases;(注意:最后有个s)
创建数据库
mysql> create database test;
连接数据库
mysql> use test01;
查看当前使用的数据库
mysql> select database();
当前数据库包含的表信息
mysql> show tables; (注意:最后有个s)
删除数据库
mysql> drop database test01;
表操作
备注:操作之前使用“use ”应连接某个数据库。
建表
命令:create table ( [,.. ]);
例子:
mysql> create table MyClass(
> id int(4) not null primary keyauto_increment,
> name char(20) not null,
> sex int(4) not null default ‘0‘,
> degree double(16,2));
获取表结构
命令: desc表名,或者show columns from表名
例子:
mysql> describe MyClass
mysql> desc MyClass;
mysql> show columns from MyClass;
删除表
命令:drop table
例如:删除表名为MyClass的表
mysql> drop table MyClass;
插入数据
命令:insert into [( [,.. ])] values (值1 )[, (值n )]
例子:
mysql> insert into myclass values(‘‘,‘Tom‘,‘‘,96.45),(‘‘,‘Joan‘,‘‘,82.99),(‘‘,‘Wang‘,‘‘,96.59);
查询表中的数据
查询所有行
mysql> select * from MyClass;
查询前几行数据
例如:查看表MyClass中前2行数据
mysql> select * from MyClass order by idlimit 0,2;
或者
mysql> select * from MyClass limit 0,2;
select distinct字段from表名;去除重复的字段值
select * from表名where字段=‘值‘ and字段2
select * from表名order by字段;按照指定字段升序排列
select * from表名order by字段【desc】;按照指定字段降序排列
select * from表名order by字段【limit n】;显示前n行
select * from表名order by字段【limit n,m】;从n+1行开始,显示出m行
select FUN_NAME(字段) frombiao1;
FUN_NAME包括sum(求和)、count(*)记录数、max(最大值)、min(最小值)
having和where的区别在于,having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,尽可能用where先过滤记录,这样因为结果集减少,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。
删除表中数据
命令:delete from表名where表达式
例如:删除表MyClass中编号为1的记录
mysql> delete from MyClass where id=1;
修改表中数据
命令:update表名set字段=新值,... where条件
mysql> update MyClass set name=‘Mary‘where id=1;
在表中增加字段
命令:alter table表名add字段类型其他;
alter table表名modify字段varchar(20)【first|after】;
alter table表名add字段int(3)【first|after】;
alter table表名drop字段;
alter table表名change字段字段2 int(4)【first|after】;
alter table表名rename字段2;
modify修改字段类型change修改字段名字(新名字加类型)rename修改表名
例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0
mysql> alter table MyClass add passtestint(4) default ‘0‘
更改表名
命令:rename table原表名to新表名;
例如:在表MyClass名字更改为YouClass
mysql> rename table MyClass to YouClass;
更新字段内容
命令:update表名set字段名[where字段]=‘‘=新内容
update表名set字段名=replace(字段名, ‘旧内容‘, ‘新内容‘);
例如:文章前面加入4个空格
update article set content=concat(‘ ‘, content);
数据库导入导出
从数据库导出数据库文件
使用“mysqldump”命令
1)导出所有数据库
格式:mysqldump -u [数据库用户名] -p -A>[备份文件的保存路径]
2)导出数据和数据结构
格式:mysqldump -u [数据库用户名] -p [要备份的数据库名称]>[备份文件的保存路径]
举例:
例1:将数据库mydb导出到/data/mydb.sql文件中。
mysqldump -h localhost -u root -p mydb >/data/mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
例2:将数据库mydb中的mytable导出到/data/mytable.sql文件中。
mysqldump -h localhost -u root -p mydbmytable>/data/mytable.sql
例3:将数据库mydb的结构导出到/data/mydb_stru.sql文件中。
mysqldump -h localhost -u root -p mydb--add-drop-table > /data/mydb_stru.sql
备注:-h localhost可以省略,其一般在虚拟主机上用。
3)只导出数据不导出数据结构
格式:
mysqldump -u [数据库用户名] -p -t[要备份的数据库名称]>[备份文件的保存路径]
4)导出数据库中的Events
格式:mysqldump -u [数据库用户名] -p -E [数据库用户名]>[备份文件的保存路径]
5)导出数据库中的存储过程和函数
格式:mysqldump -u [数据库用户名] -p -R [数据库用户名]>[备份文件的保存路径]
从外部文件导入数据库中
1)使用“source”命令
首先创建数据库,然后使用该数据库。最后执行下面操作。
mysql>source [备份文件的保存路径]
2)使用“
首先创建数据库
mysql -u root–p < [备份文件的保存路径]
Other
show processlist
显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。
通配符(wildcard)
用来匹配值的一部分的特殊字符。
搜索模式(search pattern)又字面值、通配符或两者组合构成的搜索条件。
%任何字符出现任意次(>=0)
select prod_name,prod_id from productswhere prod_name LIKE ‘hi%‘;
_匹配单个字符
select prod_name,prod_id from productswhere prod_name LIKE ‘_hi‘;
正则表达式
.代表任意字符。
| OR匹配,两个串之一,如a|b匹配a或b。
[]匹配几个字符之一,[abc]1匹配a1或b1或c1。。
-匹配范围[2-5]a匹配2a或3a或4a或5a。
\\转义,使通配符代表其本身意思。
^有两种用法,在集合中用来否定该集合,否则指定串的开始处。
$结束符
空白元字符
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表
重复元字符
* 0个或多个匹配
+一个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n}指定数目的匹配
{n,}不少于指定数目的匹配
{n,m}匹配数目的范围(m不超过255)
本文出自 “一步步踏入Linux世界” 博客,转载请与作者联系!
原文:http://linuxnote.blog.51cto.com/9876511/1627125