首先,对SQL做一个分类。SQL分为:
数据定义语言 :
简称DLL(data definition Language),用来数据库对象,包括数据库,表,列等。主要的关键字有:create,alter ,drop等。
数据操作语言:
简称DML(data manipulation Language),用来对数据库中的表进行更新。关键字:insert,delete,updata等。
数据控制语言:
简称DCL(Data Contorl language),用来定义数据库的访问权限和安全级别,还有创建用户
数据查询语言:
简称DQL(Data Query language),用来查询数据库中表的记录。关键字:select,from , where等
SQL通用语法
1.SQL语句不区分大小写,但通常建议使用大写
2.末尾以分号结尾,通过空格和缩进来增强语句的可读性。
3.使用/**/的方式添加注释。
常见的数据类型有:int,double,varchar和data。但数据类型远不止此。
分类 | 类型名称 | 说明 |
---|---|---|
整数类型 | tinyInt | 很小的整数 |
整数类型 | smallint | 小的整数 |
整数类型 | mediumint | 中等大小的整数 |
整数类型 | int(integer) | 普通大小的整数 |
小数类型 | float | 单精度浮点数 |
小数类型 | double | 双精度浮点数 |
小数类型 | decimal(m,d) | 压缩严格的定点数 |
日期类型 | year YYYY | 1901~2155 |
日期类型 | time | HH:MM:SS -838:59:59~838:59:59 |
日期类型 | date | YYYY-MM-DD 1000-01-01~9999-12-3 |
日期类型 | datetime | YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
日期类型 | timestamp | YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC |
文本、二进制类型 | CHAR(M) | M为0~255之间的整数 |
文本、二进制类型 | VARCHAR(M) | M为0~65535之间的整数 |
文本、二进制类型 | TINYBLOB | 允许长度0~255字节 |
文本、二进制类型 | BLOB | 允许长度0~65535字节 |
文本、二进制类型 | MEDIUMBLOB | 允许长度0~167772150字节 |
文本、二进制类型 | LONGBLOB | 允许长度0~4294967295字节 |
文本、二进制类型 | TINYTEXT | 允许长度0~255字节 |
文本、二进制类型 | TEXT | 允许长度0~65535字节 |
文本、二进制类型 | MEDIUMTEXT | 允许长度0~167772150字节 |
文本、二进制类型 | LONGTEXT | 允许长度0~4294967295字节 |
文本、二进制类型 | VARBINARY(M) | 允许长度0~M个字节的变长字节字符串 |
文本、二进制类型 | BINARY(M) | 允许长度0~M个字节的定长字节字符串 |
数据库的操作:database
创建数据库
格式:
*create database 数据库名
*create database 数据库名 character set 字符集名(UTF8,GBK…..)
查看数据库
查看MySQL服务器中所有的数据库:
show database
查看某个数据库的定义信息:
show create database 数据库名
删除数据库
drop database 数据库名称
切换数据库
use 数据库名称
查看正在使用的数据库
select database();
表结构的相关语句
创建表:
格式:
create table 表名{
字段名 类型(长度) 约束
字段名 类型(长度) 约束
…
}
举例:
CREAT TABLE GOODS{
brand VARCHAR(100)
price INT(100)
…
}
######主键约束
主键是用于标识当前记录的字段。主键有且仅有一个,非空。
有两种方式来创建表的主键
第一种是在创建表时创建主键,在字段后边加上 primary key
create table tablename(
id int primary key,
……
)
第二种是先加上主键字段但不声明,在表最后加入声明
create table tablename(
int id
……
primary key (id)
)
删除主键
格式:alter table 表名 drop primary key
举例:alter table goods drop primary key
主键是自动增长的,无需指定
在主键后边添加auto increment即可实现自动增长.
举例:
CREATE TABLE GOODS {
sid INT PRIMARY KEY AUTO INCREMENT
……
}
#查表
查看数据库中所有的表 :show tables
查看表的结构: desc
#删除表
drop table 表名
#修改表的结构格式
alter table 表名 add 列名 类型(长度) 约束;
作用:为表添加列
alter table 表名 modify 列名 类型(长度) 约束;
作用:修改表中列的类型长度和约束
alter table(表名) change 旧列名 新列名 类型(长度) 约束;
作用:修改表中某列的名字
alter table 表名 drop 列名
作用:删除某列
rename table 表名 to 新表名
作用:修改表名
alter table 表名 character set 字符集
作用:修改表的字符集
#####插入表记录
语法
insert into 表名(列名1,列名2,列名3**……**)values (值1,值2,值3…);
insert into 表名(值1,值2,值3**…….**)
第一种是向指定的列插入值,第二种是向表中所有列都插入值
1.插入时必须注意插入数据的类型和字段的类型相同,且数据的大小应该在列的长度范围内
2.除了数值外,其他的字段类型必须使用引号包裹起来赋值出,如果要插入空置,则不必写入字段,直接赋值为null即可
举例:
INSERT INTO GOODS(sid,name) VALUES(‘s001’,’xiaomi’);
INSERT INTO GOODS(sid,name) VALUES(‘s002’,’huawei’);
……
更新表记录:
用来修改指定条件的数据,将满足条件的记录指定为指定值
语法:
updata 表名 set 字段名=值,字段名=值,…….
updata 表名 set 字段名=值,字段名=值,……,where 条件;
值如果是字符串或者日期,则需要加‘’包裹
删除记录:delete
语法:
detele from 表名 [where 条件];
truncate table 表名;
注意:在DOS命令窗口操作中文时会报错,这还是由于你使用的MySQL的客户端编码是UTF8,而系统的cmd窗口编码是GBK
解决方案:修改MySQL客户端编码
SQL查询语句
创建账务表:
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(200),
money DOUBLE,
)
插入表记录
insert into zhangwu (id,name,money) values(1,’吃饭’,10)
insert into zhangwu (id,name,money) values(2,‘坐车’,200)
……..
查询的语法:
- 查询指定字段
select id ,name**……**from zhangwu
也可以选择 select * from zhanwu,查询本表中的所有字段,但是通常不这样做,因为如果表的数据较大时,将会严重拖慢程序运行的速度。 - 去除重复记录
select distanct 字段 from 表名;
举例:select distanct 字段 from 表名;
条件查询语句
where 语句表示条件过滤。富哦用于数据的查询和修改。
select 字段 from 表名 where 条件;
运算符类型 | 语句 | 说明 |
---|---|---|
比较运算符 | < > <= >= = <> | 小于 大于 … |
BETWEEN…AND… | 显示某一区域的值(含头尾) | |
IN(set) | 显示在in列表中的值,例:in (1,10) | |
LIKE通配符 | 模糊查询,LIke语句中有两个通配符:%用来匹配多个字符,_用来匹配一个字符 | |
IS NULL/IS NOT MULL | 判断是否为空/不为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立 |
查询所有吃饭支出记录
SELECT *FROM zhangwu WHERE name = ‘吃饭支出’;
查询金额大于100的支出
SELECT *FROM zhangwu WHERE money>100;
查询金额大于2000小于5000的支出
SELECT *FROM zhangwu WHERE money >2000 AND money money<5000;或者 SELECT *FROM zhangwu WHERE money BETWEEN 2000 AND 5000;
查询金额是1000和5000或者3500的支出信息
SELECT *FROM zhangwu WHERE money=1000 OR money=5000
OR money=3500;
或者
SELECT *FROM zhnagwu WHERE money IN(1000,5000,3500);
查询出账务中名称包含“支出”的账务信息
SELECT *FROM zhangwu WHERE name LIKE “%支出%”
查询出账务名称不为NULL账务信息
SELECT *FROM zhangwu WHERE name IS NOT NULL
或者
SELECT *FROM zhangwu WHERE NOT (name IS NULL)