MySQL基本语法
一.为什么会像有MySQL这样的DBMS(数据库管理系统)
1.当你写程序需要用到一些数据时,你可能会在本地,找到数据目录,然后使用它;你还可以通过远程连接一台机器,数据就在这台机器上;
2.那如果你要来实现这样的一台机器,你需要做什么呢?
你就需要提供一个服务端,里面有一套规则,然后等着客户端来连接,当然,你还需要有客户端与服务端的用户认证,授权以及一些限制等;
3.因此,DBMS就帮我们做这样的一些事情;
二.DBMS有哪些
SqlServer,Oracle,sqlite,access,MySQL等,本文讲的是MySQL,其实你学会了其中一种,其他的也基本会了;
三.下载安装MySQL
1.windows下载: http://dev.mysql.com/downloads/mysql/
2.开启服务端:在终端进入下载路径的bin目录,然后执行mysqld --initialize-insecur启动服务端并初始化,但是会报错,原因是你的目录下没有data文件夹,此时你就需要新建一个data文件夹,然后再执行一次,就成功了,并且你会发现你的data文件夹下有了许多文件;
3.客户端连接:通过终端输入命令:mysql -u root -p,也就是登 陆到root用户(需要输入密码),root用户默认是空,连接上后你就可以输入sql语句了;
4.为了不用每次开启服务时,都要进入到bin目录下,你可以把bin目录添加到环境变量path去,这样就可以在任意目录终端输入mysqld启动服务端; 5.你还可以将mysql服务端制作成一个windows服务,通过在bin目录下的终端输入mysqld --install制作;net start mysql 等命令是在终端开启和终止已经制作好的windows服务里的 mysql 服务;你也可以在任务管理器--》服务--》打开服务 打开和关闭服务器;
四.一些重要的概念
在正式开始学习sql语句之前,我们需要了解几个概念:
数据库:相当于文件夹
数据库表:相当于文件夹里的excel表格文件
数据行:相当于excel表格中的一行一行数据
还有就是数据表的列:相当于excel表格最上面的那个列名
一些重要的sql语法规则:
sql语句用分号‘;’隔开;
sql注释:两个减号和一个空格‘-- ’;
sql不区分大小写;
查询时尽量不要使用*,查询速度会比较慢;
五.sql语句几大组成部分
1.用户管理
2.用户登录
3.授权管理
4.数据库级别操作
5.数据表级别操作
6.数据行级别操作(重点)
7.连表操作(重点)
六.用户管理、登录和授权管理
1.用户管理
-- 创建用户
create user '用户名'@'IP地址' identified by '密码';
-- 删除用户
drop user '用户名'@'IP地址';
-- 修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
-- 修改密码
set password for '用户名'@'IP地址' = (‘新密码’);
注意:用户权限相关数据保存在mysql数据库的user表中,所有也可以直接修改user表来达到目的,但是不推荐;
还有就是用户名和ip地址的引号可以省略,但是密码的引号不可以省略;
2.用户登录
-- 用户登录(u指的就是user,h指的是IP地址,p指的是密码)
mysql -u 用户名 -h -p
用户名@IP地址:用户只能在该ip下才能访问
用户名@192.%:用户在192.开头的ip下能访问
-- %表示通配符,也就是什么都可以匹配到
3.授权管理
-- 查看权限
show grants for '用户名'@'IP地址';
-- 授权
grant 权限 on 数据库.表 to '用户名'@'IP地址';
-- 取消权限
revoke 权限 on 数据库.表 from '用户名'@'IP地址';
-- 权限有select,insert等
七.数据库级别操作
-- 查看数据库
show databases;
-- 创建数据库
create database 数据库名称;
create database 数据库名称 default charset utf8 collate utf8_general_ci;
--charset utf8设置默认编码,collate utf8_general_ci是设置校对规则
-- 进入数据库
use 数据库
-- 删除数据库
drop database 数据库名称:
八.数据表级别操作
在讲表操作之前,我们需要了解六个概念;
1.主键:唯一标识,一般设置自增列为主键
不能为null;
不能重复;
一张表只有一个主键(可以多列组成主键);
-- 一般用法:
--添加主键
alter table 表名 add primary key(‘列名’);
--删除主键
alter table 表名 drop primary key;
-- 因为一个表只有一个主键,所有不用指定主键的列名
2.外键
一对多;
两张表建立约束;
-- 一般用法:
-- 添加外键
alter table 表名 add constraint 外键名 foreign key (列名) references 表2(列名);
-- 删除外键
alter table 表名 drop foreign key 外键名;
3.默认值
就是给某一列设置默认值;
-- 一般用法:
-- 修改默认值
alter table 表名 alter 列名 set default 默认值;
-- 删除默认值
alter table 表名 alter 列名 drop default;
4.自增列
自增列在插入一条数据行时,可以不用设值,他自己会增加在上一条的基础上加1;
对于自增列,必须是索引;
自增列还可以设值步长和起始值;
-- 一般用法 -- 设置自增列一般在创建表的时候设置
--查看当前数据库的自增长设置
show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
+--------------------------+-------+
-- 设置步长
set auto_increment_offset=10;
-- 设置起始值
set auto_increment_increment=2;
5.基本数据类型
MySQL的数据类型大致分为:数值、时间、字符串;
常用的有:
int:整数;
decimal:小数,比较精准;
char(m):定长,m指长度,查找速度快,不浪费空间
varchar(m):变长,m指的是最大长度,查找速度慢,比较浪费空间;
6.空值
用于设置某一列是否可以为空;
一般用于设置主键不能为空;
not null - 不可空 ;
null - 可空;
有了以上这六个概念后我们就可以开始创建我们的表了;
1.创建表
create table 表名(
列名 类型 是否可以为空,
列名 类型 是否可以为空
)ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 这里的ENGINE是设置数据库引擎的,charset设置编码方式;
例子:
create table table_name(
nid int not null auto_increment PRIMARY key,
name varchar(10),
age int DEFAULT 18
)engine = innodb DEFAULT charset = utf8
2.删除表
drop table 表名;
3.清空表内容
delete from 表名;
truncate table 表名;
-- 注意:truncate速度快,而且清空表后自增列又回到原点,即重新从1开始;
4.修改表
增:alter table 表名 add 列名 数据类型;
删:alter table 表名 drop column 列名;
改:alter table 表名 modify column 列名 数据类型
-- 只可以改类型
alter table 表名 change 原列名 新列名 数据类型
-- 可以修改列名和类型
九.语句操作
增删改查:
增:insert into 表名(列名,列名...)values("值","值"...);
-- 插入一条
insert into 表名(列名,列名...)values("值","值"...),("值","值"...)...;
-- 插入多条
insert into 表名1(列名,列名...) select(列名,列名...) from 表名2;
-- 从表2中获取数据插入到表1中去
删:delete from 表 where 条件;
改:update 表名 set 列名="值" where 条件;
查:select * from 表
-- *表示多有的列
select nid, name, age as a from 表 where 条件;
-- as给age重命名为a
其他:
条件:select * from 表名 where id > 0 and name = 'luyi';
select * from 表 where id between 1 and 5;
-- id值在1到五之间
select * from 表 where id in (1,2,3);
-- id值是(1,2,3)其中一个
select * from 表 where id not in (1,2,3)
select * from 表 where id in (select id from 表);
-- id的值在子表取出来的值中
分页:select * from 表 limit 4,5;
-- 取从第四行开始的五行
-- 另一种写法:
select * from 表 limit 5 offset 4;
排序: select * from 表 order by 列 asc(desc);
-- asc为从小到大根据“列”排列,desc则是从大到小;不写则是asc
分组:select * from 表 group by 列名,...
-- group by必须在where之后,order by之前
select num from 表 group by num having max(id)>10
-- group by一般与聚合函数配合使用,聚合函数有
max,min,sum,count,avg
十.连表操作
连表操作:
无对应关系则不显示 select A.num, A.name, B.name from A,B Where A.nid = B.nid;
无对应关系则不显示
select A.num, A.name, B.name
from A inner join B
on A.nid = B.nid;A表所有显示,如果B中无对应关系,则值为null
select A.num, A.name, B.name
from A left join B
on A.nid = B.nid;
B表所有显示,如果B中无对应关系,则值为null
select A.num, A.name, B.name
from A right join B
on A.nid = B.nid;
-- 推荐使用left join,inner join与left join的主要区别就是
inner会舍去没有对应关系的null值
与连表操作相似的还有表的组合
-- 就是把两个表组合成一个新表显示出来
select name from A union select name from B;
-- 会自动处理重合部分
select name from A union all select name from B;
-- 不会自动处理重合部分
本文参考了博客:博客地址链接
作者:卢一
出处:http://www.cnblogs.com/luyi001/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。